teapot-coding-agent 0.37.48 → 0.37.50
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/agent/agent.js +17 -35
- package/dist/master.js +0 -3
- package/package.json +3 -1
- package/public/assets/{index-Bz-zDX6W.js → index-J20qcMnK.js} +8 -8
- package/public/assets/index-J20qcMnK.js.map +1 -0
- package/public/assets/{shiki-BM9QZl1b.js → shiki-LgPvPv_g.js} +2 -2
- package/public/assets/{shiki-BM9QZl1b.js.map → shiki-LgPvPv_g.js.map} +1 -1
- package/public/index.html +1 -1
- package/public/assets/index-Bz-zDX6W.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"mappings":"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AC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAAEC,GAAG,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,CAAC,EAAEC,GAAG,SAASC,GAAG,EAAE,EAAE,CAAC,IAAI10B,EAAE,EAAErB,EAAE,EAAE,OAAO,EAAE2K,EAAE,GAAGpM,EAAE,EAAE,EAAE,CAAC,IAAIA,EAAE,EAAEyB,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,KAAKA,GAAGqB,GAAG,GAAG,EAAEA,EAAErB,GAAG,EAAEzB,EAAE,EAAEoM,EAAE,CAAC,GAAG,EAAEA,EAAE,OAAO,GAAGpM,EAAE,EAAEoM,EAAE,CAAC,GAAG,EAAEA,EAAE,OAAO,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI9M,GAAG,KAAK,CAAC,aAAa,CAAkB,GAAjB,KAAK,QAAQ,IAAO,CAACi4B,GAAG,CAAC,GAAG,IAAI,WAAW,KAAK,EAAEA,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,EAAEA,GAAG,KAAK,EAAE,EAAE,EAAE,EAAEA,GAAG,KAAK,EAAE,IAAI,GAAG,EAAEA,GAAG,KAAK,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAEA,GAAG,KAAK,EAAE,MAAM,KAAK,EAAE,GAAG,OAAO,EAAEA,GAAG,KAAK,EAAE,MAAM,KAAK,EAAEA,GAAG,KAAK,EAAE,MAAM,KAAK,EAAEA,GAAG,KAAK,EAAE,MAAM,KAAK,EAAEA,GAAG,KAAK,EAAE,MAAM,KAAK,EAAEA,GAAG,KAAK,EAAE,MAAM,KAAK,EAAEA,GAAG,KAAK,EAAE,MAAM,KAAK,EAAE,IAAI,IAAIzwB,EAAE,EAAEA,EAAEuwB,GAAG,OAAO,EAAEvwB,EAAEywB,GAAG,KAAK,EAAEF,GAAGvwB,EAAE,CAAC,GAAGuwB,GAAGvwB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAOA,EAAE,GAAG,EAAEA,EAAE,IAAI,EAAEA,EAAE,MAAMywB,GAAGzwB,GAAG0wB,GAAG1wB,EAAEwwB,EAAE,EAAE,EAAExwB,GAAG,QAAQA,GAAG,QAAQA,GAAG,QAAQA,GAAG,OAAO,EAAE,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,IAAIrF,EAAE,KAAK,QAAQqF,CAAC,EAAE,EAAErF,IAAI,GAAGqB,IAAI,EAAE,GAAG,EAAE,CAAC,IAAIO,EAAEo0B,GAAG,aAAa30B,CAAC,EAAEO,IAAI,EAAE,EAAE,CAAC,EAAEA,EAAE5B,IAAI,EAAE4B,EAAE,CAAC,OAAOo0B,GAAG,oBAAoB,EAAEh2B,EAAE,CAAC,CAAC,CAAC,EAAMg2B,GAAG,MAAMz3B,CAAC,CAAC,aAAa,CAAC,KAAK,WAAW,OAAO,OAAO,IAAI,EAAE,KAAK,QAAQ,GAAG,KAAK,UAAU,IAAI6C,EAAE,KAAK,SAAS,KAAK,UAAU,MAAM,IAAIiE,EAAE,IAAIxH,GAAG,KAAK,SAASwH,CAAC,EAAE,KAAK,QAAQA,EAAE,QAAQ,KAAK,gBAAgBA,CAAC,CAAC,OAAO,kBAAkB,EAAE,CAAC,SAAOA,EAAE,EAAM,CAAC,OAAO,aAAa,EAAE,CAAC,OAAOA,GAAG,EAAE,CAAC,CAAC,OAAO,gBAAgB,EAAE,CAAC,OAAOA,GAAG,CAAC,CAAC,OAAO,oBAAoB,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAOA,EAAE,WAAW,GAAGhE,EAAE,IAAI,EAAG,GAAM,CAAC,SAAS,CAAC,KAAK,UAAU,QAAQ,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,IAAI,eAAe,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,cAAc,EAAE,CAAC,GAAG,CAAC,KAAK,WAAWgE,GAAG,MAAU,MAAM,4BAA4BA,EAAE,EAAE,EAAE,KAAK,QAAQA,EAAE,KAAK,gBAAgB,KAAK,WAAWA,GAAG,KAAK,UAAU,KAAKA,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,WAAWA,EAAE,SAASA,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,KAAK,gBAAgB,QAAQA,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC,IAAIhE,EAAE,EAAErB,EAAE,EAAE2K,EAAE,EAAE,OAAO,IAAI,IAAI/I,EAAE,EAAEA,EAAE+I,EAAE,EAAE/I,EAAE,CAAC,IAAI,EAAE,EAAE,WAAWA,CAAC,EAAE,GAAG,OAAO,GAAG,GAAG,MAAM,CAAC,GAAG,EAAEA,GAAG+I,EAAE,OAAOtJ,EAAE,KAAK,QAAQ,CAAC,EAAE,IAAI0d,EAAE,EAAE,WAAWnd,CAAC,EAAE,OAAOmd,GAAGA,GAAG,MAAM,GAAG,EAAE,OAAO,KAAKA,EAAE,MAAM,MAAM,GAAG,KAAK,QAAQA,CAAC,CAAC,CAAC,IAAI5Y,EAAE,KAAK,eAAe,EAAEnG,CAAC,EAAEvD,EAAE8B,EAAE,aAAa4H,CAAC,EAAE5H,EAAE,kBAAkB4H,CAAC,IAAI,GAAG5H,EAAE,aAAayB,CAAC,GAAG,GAAGvD,EAAE,EAAE0J,CAAC,CAAC,OAAO9E,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,OAAO,KAAK,gBAAgB,eAAegE,EAAEhE,CAAC,CAAC,CAAC,EAAM40B,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,OAAO,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAK,GAAE,KAAK,UAAU,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,OAAO5wB,EAAE,KAAK,QAAQ,KAAK,UAAUA,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,KAAK,UAAUA,GAAGhE,EAAE,KAAK,SAASgE,IAAI,KAAK,QAAQhE,EAAE,CAAC,EAAE,SAAS60B,GAAG,EAAE,CAAC,IAAI70B,EAAE9C,EAAE,OAAO,MAAM,IAAIA,EAAE,OAAO,MAAMA,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,IAAIA,EAAE,KAAK,CAAC,EAAEyB,EAAEzB,EAAE,OAAO,MAAM,IAAIA,EAAE,OAAO,MAAMA,EAAE,OAAO,CAAC,EAAEyB,GAAGqB,IAAI,EAAE,UAAUA,EAAE,KAAK,GAAGA,EAAE,KAAK,GAAG,CAAC,IAAI80B,GAAG,WAAWC,GAAG,IAAIC,GAAG,MAAM93B,CAAC,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,CAA4C,GAA3C,KAAK,UAAU8G,EAAE,KAAK,mBAAmBhE,EAAKA,EAAE+0B,GAAG,MAAU,MAAM,iDAAiD,EAAE,KAAK,OAAO,IAAI,WAAW/wB,CAAC,EAAE,KAAK,OAAO,EAAE,KAAK,WAAW,IAAI,WAAWhE,CAAC,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,IAAI,YAAYgE,CAAC,EAAE,KAAK,cAAc,CAAC,EAAE,KAAK,iBAAiB,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,UAAU,EAAE,CAAC,IAAIhE,EAAE,IAAI9C,EAAE,GAAG,CAAC,EAAE,OAAO,OAAO8C,EAAE,IAAI,IAAIrB,EAAE,SAAM,QAAQ,EAAE,EAAE,EAAMA,EAAE,EAAE,OAAO,EAAEA,EAAE,CAAC,IAAI,EAAE,EAAEA,GAAG,GAAG,MAAM,QAAQ,CAAC,EAAE,IAAI,IAAI4B,EAAE,EAAEA,EAAE,EAAE,OAAO,EAAEA,EAAEP,EAAE,YAAY,EAAEO,EAAE,OAAOP,EAAE,SAAS,CAAC,CAAC,CAAC,OAAOA,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI9C,EAAE,KAAK,UAAU,KAAK,kBAAkB,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK,OAAO,EAAE,WAAW,IAAI,KAAK,UAAU,EAAE,EAAE,iBAAiB,KAAK,iBAAiB,EAAE,cAAc,IAAI,KAAK,aAAa,EAAE,EAAE,cAAc,KAAK,cAAc,EAAE,iBAAiB,KAAK,iBAAiB,EAAE,YAAY,KAAK,YAAY,CAAC,CAAC,SAAS,CAAC,IAAI8G,EAAE,CAAC,EAAE,IAAI,IAAIhE,EAAE,EAAEA,EAAE,KAAK,OAAO,EAAEA,EAAE,CAACgE,EAAE,KAAK,KAAK,OAAOhE,EAAE,EAAE,IAAIrB,EAAE,KAAK,cAAcqB,IAAI,EAAE,EAAE,KAAK,cAAcA,GAAG,IAAI,EAAErB,EAAE,GAAGqF,EAAE,KAAK,MAAM,UAAU,MAAM,KAAK,KAAK,WAAWrF,EAAE,CAAC,CAAC,CAAC,CAAC,OAAOqF,CAAC,CAAC,OAAO,CAAC,KAAK,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,CAAC,EAAE,KAAK,iBAAiB,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,GAAG,KAAK,YAAY,CAAC,EAAE,KAAK,QAAQ,KAAK,UAAW,KAAK,cAAc,CAAC,MAAS,IAAGA,EAAE,GAAG,MAAU,MAAM,uCAAuC,EAAE,KAAK,cAAc,KAAK,QAAQ,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,KAAK,OAAO,KAAK,UAAUA,EAAE8wB,GAAGA,GAAG9wB,CAApH,CAAqH,CAAC,YAAY,EAAE,CAAC,GAAG,KAAK,YAAY,CAAC,EAAI,KAAK,OAAO,CAAC,GAAG,KAAK,eAAe,KAAK,kBAAkB,KAAK,mBAAmB,CAAC,KAAK,iBAAiB,CAAC,EAAE,MAAM,CAAC,GAAGA,EAAE,GAAG,MAAU,MAAM,uCAAuC,EAAE,KAAK,WAAW,KAAK,oBAAoBA,EAAE8wB,GAAGA,GAAG9wB,EAAE,KAAK,cAAc,KAAK,OAAO,EAAE,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,OAAO,KAAK,cAAcA,GAAG,MAAM,KAAK,cAAcA,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,IAAIhE,EAAE,KAAK,cAAcgE,IAAI,EAAErF,EAAE,KAAK,cAAcqF,GAAG,IAAI,OAAOrF,EAAEqB,EAAE,EAAE,KAAK,WAAW,SAASA,EAAErB,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAIqF,EAAE,CAAC,EAAE,IAAI,IAAIhE,EAAE,EAAEA,EAAE,KAAK,OAAO,EAAEA,EAAE,CAAC,IAAIrB,EAAE,KAAK,cAAcqB,IAAI,EAAE,EAAE,KAAK,cAAcA,GAAG,IAAI,EAAErB,EAAE,IAAI,EAAEqB,GAAG,KAAK,WAAW,MAAMrB,EAAE,CAAC,EAAE,CAAC,OAAOqF,CAAC,CAAC,SAAS,EAAE,CAAC,IAAIhE,EAAE,GAAG,KAAK,eAAe,EAAE,EAAE,KAAK,YAAY,KAAK,iBAAiB,KAAK,SAAS,KAAK,aAAa,KAAK,iBAAiB,OAAO,IAAIrB,EAAE,KAAK,YAAY,KAAK,WAAW,KAAK,OAAO,EAAEA,EAAEqB,EAAE,GAAG,EAAEA,EAAE,GAAG,CAAC,EAAE,KAAK,IAAI,EAAE,GAAGgE,EAAE8wB,EAAE,EAAE9wB,CAAC,CAAC,EAAMixB,GAAG,CAAC,EAAEC,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,OAAO,EAAE,KAAK,QAAQD,GAAG,KAAK,IAAI,GAAG,KAAK,UAAU,OAAO,OAAO,IAAI,EAAE,KAAK,eAAe,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,EAAE,CAAC,KAAK,UAAUjxB,KAAK,IAAK,KAAI,KAAK,UAAUA,GAAG,CAAC,GAAG,IAAIrF,EAAE,KAAK,UAAUqF,GAAG,OAAOrF,EAAE,KAAKqB,CAAC,EAAE,CAAC,YAAY,CAAC,IAAIsJ,EAAE3K,EAAE,QAAQqB,CAAC,EAAEsJ,IAAI,IAAI3K,EAAE,OAAO2K,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,KAAK,UAAUtF,IAAI,OAAO,KAAK,UAAUA,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,WAAWA,CAAC,CAAC,SAAS,CAAC,KAAK,UAAU,OAAO,OAAO,IAAI,EAAE,KAAK,eAAe,CAAC,EAAE,KAAK,QAAQixB,EAAE,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,IAAI,IAAIjxB,EAAE,KAAK,OAAO,OAAO,KAAK,OAAO,aAAa,EAAE,KAAK,QAAQ,OAAO,EAAEA,GAAG,EAAE,EAAEA,EAAE,KAAK,QAAQA,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQixB,GAAG,KAAK,IAAI,GAAG,KAAK,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,QAAQ,KAAK,UAAU,KAAK,MAAMA,GAAG,CAAC,KAAK,QAAQ,OAAO,KAAK,WAAW,KAAK,IAAI,OAAO,OAAO,IAAI,IAAIjxB,EAAE,KAAK,QAAQ,OAAO,EAAEA,GAAG,EAAE,IAAI,KAAK,QAAQA,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,QAAQ,OAAO,KAAK,WAAW,KAAK,IAAI,MAAMuZ,GAAGvZ,EAAEhE,EAAErB,CAAC,CAAC,OAAO,IAAI,IAAI,EAAE,KAAK,QAAQ,OAAO,EAAE,GAAG,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC,IAAIqF,EAAEhE,EAAErB,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,MAAM,EAAE,KAAK,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC,GAAG,KAAK,SAAS,EAAE,KAAKqB,EAAErB,GAAG,CAAC,IAAI2K,EAAEtF,EAAE,KAAK,GAAGsF,IAAI,GAAG,CAAC,KAAK,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,CAAC,GAAGA,EAAE,IAAI,GAAGA,EAAE,CAAC,KAAK,OAAO,EAAE,MAAM,CAAC,KAAK,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI,GAAGA,EAAE,EAAE,CAAC,KAAK,SAAS,GAAG3K,EAAEqB,EAAE,GAAG,KAAK,KAAKgE,EAAEhE,EAAErB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC,GAAG,KAAK,SAAS,EAAE,IAAG,KAAK,SAAS,GAAG,KAAK,OAAO,EAAE,CAAC,KAAK,QAAQ,OAAO,KAAK,WAAW,KAAK,IAAI,MAAMqF,CAAC,MAAM,CAAC,IAAIrF,EAAE,CAAC,EAAE,EAAE,KAAK,QAAQ,OAAO,EAAE4B,EAAE,CAAC,EAAE,GAAG,KAAK,OAAO,SAAS,EAAE,KAAK,OAAO,aAAa,EAAE,EAAEP,EAAE,EAAE,KAAK,OAAO,YAAY,KAAK,OAAO,OAAO,CAAC,GAAG,CAACO,GAAG5B,IAAI,CAAC,EAAE,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC,IAAIqF,CAAC,EAAErF,IAAI,CAAC,GAAG,IAAI,GAAGA,aAAa,QAAQ,MAAO,MAAK,OAAO,OAAO,CAAC,EAAE,KAAK,OAAO,aAAa,EAAE,KAAK,OAAO,YAAY,CAAC,EAAEA,EAAE,GAAG,CAAC,KAAK,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,EAAEA,aAAa,QAAQ,MAAO,MAAK,OAAO,OAAO,CAAC,EAAE,KAAK,OAAO,aAAa,EAAE,KAAK,OAAO,YAAY,CAAC,EAAEA,CAAC,EAAC,KAAK,QAAQs2B,GAAG,KAAK,IAAI,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EAAEE,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,KAAK,SAASnxB,EAAE,KAAK,MAAM,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,MAAM,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,YAAY,KAAK,OAAOuZ,GAAGvZ,EAAEhE,EAAErB,CAAC,EAAE,KAAK,MAAM,OAAO,MAAM,KAAK,MAAM,GAAG,KAAK,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAIqB,EAAE,CAAC,EAAE,GAAG,KAAK,UAAU,EAAE,CAAC,OAAO,GAAGgE,IAAI,EAAE,KAAK,SAAS,KAAK,KAAK,EAAEhE,aAAa,SAAS,OAAOA,EAAE,KAAK,IAAI,KAAK,MAAM,GAAG,KAAK,UAAU,CAAC,EAAErB,EAAE,EAAE,MAAO,MAAK,MAAM,GAAG,KAAK,UAAU,CAAC,EAAEqB,CAAC,CAAC,EAAMo1B,GAAG,CAAC,EAAEC,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,UAAU,OAAO,OAAO,IAAI,EAAE,KAAK,QAAQD,GAAG,KAAK,OAAO,EAAE,KAAK,eAAe,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,UAAU,OAAO,OAAO,IAAI,EAAE,KAAK,eAAe,CAAC,EAAE,KAAK,QAAQA,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,KAAK,UAAUpxB,KAAK,IAAK,KAAI,KAAK,UAAUA,GAAG,CAAC,GAAG,IAAIrF,EAAE,KAAK,UAAUqF,GAAG,OAAOrF,EAAE,KAAKqB,CAAC,EAAE,CAAC,YAAY,CAAC,IAAIsJ,EAAE3K,EAAE,QAAQqB,CAAC,EAAEsJ,IAAI,IAAI3K,EAAE,OAAO2K,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,KAAK,UAAUtF,IAAI,OAAO,KAAK,UAAUA,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,WAAWA,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,QAAQ,OAAO,IAAI,IAAIA,EAAE,KAAK,OAAO,OAAO,KAAK,OAAO,aAAa,EAAE,KAAK,QAAQ,OAAO,EAAEA,GAAG,EAAE,EAAEA,EAAE,KAAK,QAAQA,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQoxB,GAAG,KAAK,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,EAAE,KAAK,OAAOpxB,EAAE,KAAK,QAAQ,KAAK,UAAUA,IAAIoxB,GAAG,CAAC,KAAK,QAAQ,OAAO,KAAK,WAAW,KAAK,OAAO,OAAOp1B,CAAC,OAAO,IAAI,IAAIrB,EAAE,KAAK,QAAQ,OAAO,EAAEA,GAAG,EAAE,IAAI,KAAK,QAAQA,EAAE,CAAC,KAAKqB,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,QAAQ,OAAO,KAAK,WAAW,KAAK,OAAO,MAAMud,GAAGvZ,EAAEhE,EAAErB,CAAC,CAAC,OAAO,IAAI,IAAI,EAAE,KAAK,QAAQ,OAAO,EAAE,GAAG,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC,IAAIqF,EAAEhE,EAAErB,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,QAAQ,OAAO,KAAK,WAAW,KAAK,OAAO,SAASqF,CAAC,MAAM,CAAC,IAAIrF,EAAE,CAAC,EAAE,EAAE,KAAK,QAAQ,OAAO,EAAE4B,EAAE,CAAC,EAAE,GAAG,KAAK,OAAO,SAAS,EAAE,KAAK,OAAO,aAAa,EAAE,EAAEP,EAAE,EAAE,KAAK,OAAO,YAAY,KAAK,OAAO,OAAO,CAAC,GAAG,CAACO,GAAG5B,IAAI,CAAC,EAAE,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC,OAAOqF,CAAC,EAAErF,IAAI,CAAC,GAAG,IAAI,GAAGA,aAAa,QAAQ,MAAO,MAAK,OAAO,OAAO,CAAC,EAAE,KAAK,OAAO,aAAa,EAAE,KAAK,OAAO,YAAY,CAAC,EAAEA,EAAE,GAAG,CAAC,KAAK,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,EAAEA,aAAa,QAAQ,MAAO,MAAK,OAAO,OAAO,CAAC,EAAE,KAAK,OAAO,aAAa,EAAE,KAAK,OAAO,YAAY,CAAC,EAAEA,CAAC,CAAC,KAAK,QAAQy2B,GAAG,KAAK,OAAO,CAAC,CAAC,EAAEE,GAAG,IAAIN,GAAGM,GAAG,SAAS,CAAC,EAAE,IAAIC,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,KAAK,SAASvxB,EAAE,KAAK,MAAM,GAAG,KAAK,QAAQsxB,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,QAAQtxB,EAAE,OAAO,GAAGA,EAAE,OAAO,GAAGA,EAAE,MAAM,EAAEsxB,GAAG,KAAK,MAAM,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,YAAY,KAAK,OAAO/X,GAAGvZ,EAAEhE,EAAErB,CAAC,EAAE,KAAK,MAAM,OAAO,MAAM,KAAK,MAAM,GAAG,KAAK,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAIqB,EAAE,CAAC,EAAE,GAAG,KAAK,UAAU,EAAE,CAAC,OAAO,GAAGgE,IAAI,EAAE,KAAK,SAAS,KAAK,MAAM,KAAK,OAAO,EAAEhE,aAAa,SAAS,OAAOA,EAAE,KAAK,IAAI,KAAK,QAAQs1B,GAAG,KAAK,MAAM,GAAG,KAAK,UAAU,CAAC,EAAE32B,EAAE,EAAE,MAAO,MAAK,QAAQ22B,GAAG,KAAK,MAAM,GAAG,KAAK,UAAU,CAAC,EAAEt1B,CAAC,CAAC,EAAMw1B,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,KAAK,MAAM,IAAI,WAAWxxB,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,MAAM,KAAKA,GAAG,EAAEhE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,MAAMA,GAAG,EAAEgE,GAAGrF,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI4B,EAAE,EAAEA,EAAEyD,EAAE,OAAO,IAAI,KAAK,MAAMhE,GAAG,EAAEgE,EAAEzD,IAAI5B,GAAG,EAAE,CAAC,CAAC,EAAE82B,GAAG,IAAIC,GAAG,UAAU,CAAC,IAAIx4B,EAAE,IAAIs4B,GAAG,IAAI,EAAEx1B,EAAE,MAAM,MAAM,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI0d,CAAC,EAAE/e,GAAG,EAAE,IAAIqB,EAAE,MAAM5E,EAAEsiB,CAAC,EAAE,EAAE/e,EAAE,GAAG,GAAG,EAAE4B,EAAE5B,EAAE,EAAE,EAAE,EAAE4B,EAAE,KAAK,EAAE,EAAEA,EAAE,KAAK,MAAMA,EAAE5B,EAAE,GAAG,EAAE,CAAC,EAAE,IAAIC,EAAED,EAAE,EAAE,EAAE,EAAEmG,EAAuC,IAAIA,KAAzC5H,EAAE,WAAW,EAAE,CAAC,EAAEA,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAW0B,EAAE1B,EAAE,QAAQ,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE4H,EAAE,EAAE,CAAC,EAAE5H,EAAE,QAAQyB,EAAE,IAAI,GAAG,EAAEmG,EAAE,EAAE,CAAC,EAAE5H,EAAE,QAAQyB,EAAE,IAAI,GAAG,EAAEmG,EAAE,EAAE,CAAC,EAAE5H,EAAE,IAAI,IAAI4H,EAAE,EAAE,CAAC,EAAE5H,EAAE,IAAI,GAAG4H,EAAE,GAAG,CAAC,EAAE5H,EAAE,IAAI,IAAI4H,EAAE,EAAE,CAAC,EAAE5H,EAAE,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE4H,EAAE,EAAE,CAAC,EAAE5H,EAAE,IAAI,IAAI4H,EAAE,GAAG,CAAC,EAAE5H,EAAE,IAAI,IAAI4H,EAAE,GAAG,CAAC,EAAE,OAAO5H,EAAE,QAAQqD,EAAE,EAAE,EAAE,CAAC,EAAErD,EAAE,QAAQqD,EAAE,EAAE,EAAE,CAAC,EAAErD,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,EAAEA,EAAE,QAAQqD,EAAE,EAAE,EAAE,CAAC,EAAErD,EAAE,QAAQqD,EAAE,EAAE,EAAE,CAAC,EAAErD,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,EAAEA,EAAE,QAAQqD,EAAE,EAAE,EAAE,CAAC,EAAErD,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,EAAEA,EAAE,QAAQqD,EAAE,EAAE,EAAE,CAAC,EAAErD,EAAE,QAAQqD,EAAE,EAAE,EAAE,CAAC,EAAErD,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,EAAEA,EAAE,QAAQqD,EAAE,EAAE,EAAE,CAAC,EAAErD,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,EAAEA,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,EAAEA,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAEA,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,EAAEA,EAAE,QAAQ,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAEA,EAAE,QAAQyB,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAEzB,EAAE,QAAQ,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAEA,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAEA,EAAE,QAAQqD,EAAE,EAAE,EAAE,CAAC,EAAErD,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,EAAEA,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,EAAEA,EAAE,IAAI,GAAG,EAAE,GAAG,CAAC,EAAEA,EAAE,QAAQyB,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAC,EAAEzB,EAAE,QAAQyB,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAEzB,EAAE,QAAQ,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAEA,EAAE,QAAQyB,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAEzB,EAAE,QAAQyB,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAC,EAAEzB,EAAE,QAAQ,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAEA,EAAE,QAAQyB,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAEzB,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,EAAEA,EAAE,QAAQyB,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAC,EAAEzB,EAAE,QAAQyB,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAEzB,EAAE,QAAQyB,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAEzB,EAAE,QAAQyB,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAEzB,EAAE,QAAQyB,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAC,EAAEzB,EAAE,QAAQyB,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAEzB,EAAE,QAAQyB,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAEzB,EAAE,QAAQyB,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAEzB,EAAE,QAAQyB,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,CAAC,EAAEzB,EAAE,QAAQyB,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,EAAEzB,EAAE,QAAQyB,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,EAAEzB,EAAE,QAAQ,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,EAAEA,EAAE,QAAQyB,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,CAAC,EAAEz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","names":["sharedConfig","getContextId","num","count","len","setHydrateContext","context","equalFn","a","b","$TRACK","signalOptions","ERROR","runEffects","runQueue","STALE","PENDING","UNOWNED","Owner","Transition","Listener","Updates","Effects","ExecCount","createRoot","listener","owner","unowned","fn","current","detachedOwner","root","updateFn","untrack","cleanNode","runUpdates","createSignal","options","s","readSignal","value","writeSignal","createRenderEffect","updateComputation","createComputation","createEffect","runUserEffects","c","SuspenseContext","useContext","createMemo","onMount","onCleanup","transPending","setTransPending","runningTransition","updates","lookUpstream","observers","sSlot","node","TransitionRunning","isComp","i","o","markDownstream","time","runComputation","nextValue","err","handleError","init","state","runTop","ancestors","top","prev","wait","res","completeUpdates","sources","disposed","d","v","e","queue","userLength","source","ignore","index","obs","n","reset","castError","runErrors","f","fns","error","FALLBACK","dispose","mapArray","items","mapped","disposers","indexes","mapFn","newItems","list","newLen","j","newIndices","newIndicesNext","temp","tempdisposers","tempIndexes","start","end","newEnd","item","disposer","mapper","set","indexArray","signals","createComponent","Comp","props","narrowedError","name","For","fallback","Index","Show","keyed","conditionValue","condition","child","memo","reconcileArrays","bLength","aEnd","bEnd","aStart","bStart","after","map","parentNode","sequence","t","$$EVENTS","render","element","code","insert","template","create","isMathML","html","isSVG","isImportNode","delegateEvents","document","l","eventNames","eventHandler","setAttribute","isHydrating","className","addEventListener","delegate","handler","handlerFn","style","nodeStyle","setStyleProperty","use","arg","marker","initial","accessor","insertExpression","parent","el","ev","key","oriTarget","oriCurrentTarget","retarget","handleNode","data","walkUpTree","path","hydrating","cleaned","multi","cleanChildren","array","currentArray","normalizeIncomingArray","unwrapArray","nodes","appendNodes","dynamic","normalized","unwrap","replacement","inserted","isParent","LIST_ITEM","renderMarkdown","renderEscaped","escapeHtml","src","out","lines","line","fence","ticks","info","buf","close","cls","h","inline","isSeparatorRow","align","splitRow","head","rows","cell","idx","tag","hasHeader","k","r","parseList","indentOf","startLine","para","ws","ordered","m","ind","minIndent","ol","body","sub","task","box","look","nextItem","codes","url","alt","text","cells","cur","ch","applyDelta","agentId","patch","now","clearLive","isTurnBoundary","isLiveStatus","status","liveBufferStatus","assistant","assistantTexts","events","live","loggedReasoning","startedToolCallSince","liveBufferRemainder","st","reasoning","nothingPending","sawContent","at","isOwnLiveWork","row","actor","pruneDeadLiveBuffers","doomed","id","buffers","statusOf","reconcileLiveBuffer","rest","clearThinkClockIfDone","startedAt","selected","agents","x","placeEchoesBelow","echoes","visible","maxSeq","placed","resequenceToDelivery","noteSeq","bySeq","resequenceCache","hit","moved","pendingFloor","own","META_TOOLS_HIDDEN","feedCandidates","input","feedTypes","metaToolName","consumed","content","expandSubRows","kind","norm","dedupeAgainstEmbeds","embedType","promptLifecycle","deliveredIds","loggedUserPrompts","deliveredNotes","cancelledNotes","pid","dropInvisibleRows","stillPendingIds","cancelledCache","withCancelled","byNote","marked","resequencePrompts","floorOf","cancelSeq","lifecycle","delivered","settled","floor","remainingEchoes","pending","p","buildTimelineWithCount","deduped","resequenced","auditPhase","isPlaceholderDetail","cardDetail","raw","goalLine","verdictHasReason","what","Card","classes","tone","class","filter","Boolean","join","markdown","_el$","_tmpl$3","_$insert","_$createComponent","when","title","children","_el$2","_tmpl$2","meta","_el$3","_tmpl$","_el$4","_tmpl$4","_$effect","innerHTML","_$className","mergeThemes","byId","local","remote","BG_WIDTHS","BG_SMALL","bgSrcSet","w","bgSrc","width","treeRowsOf","hideGhosts","stack","seenIds","byParent","roots","walk","chatOff","depth","collapsedChats","chatGroupKeyOf","kids","collapsedSubs","groupKeys","groups","workspaceOf","g","seen","shouldShowCollapseCaret","args","subAgentDisplayName","parts","personas","descendantsOf","guard","wsChatCountsOf","counts","sidebarRowsOf","lastWs","collapsed","answeredQuestionIdsOf","lastQuestionAt","lastUserPromptAt","locallyAnswered","reconcilePending","queued","liveIds","matched","unidentifiable","resolveTimelineSession","mine","owned","requested","bound","linkableSessionId","handle","known","agentIds","KEY_PREFIX","storedTextareaHeight","rememberTextareaHeight","px","trackTextareaHeight","ro","onHeight","timelineAcceptsSession","shown","frameSession","eventBelongsOnTimeline","selectedAgent","timelineSession","deltaBelongsToTimeline","timelineIsLive","agentLive","agent","themeColors","bg","fg","cursor","cursorAccent","cs","retintTerminal","want","effectiveProviderOf","defaultProvider","providers","providerDefaultModel","provider","modelOnProviderSwitch","toProvider","modelPlaceholderFor","agentProvider","mayResyncProvider","userTouchedProvider","shouldWriteComposerValue","composing","composerValueChanged","nodeValue","next","distanceToTail","atTail","tolerance","classifyScroll","lastViewport","lastHeight","ledger","expected","shouldPin","following","nextFollowing","cause","gapToTail","composerHeight","scrollHeight","maxHeight","agentLabel","agentLabelWithId","label","tail","extra","PALETTE_KEYS","STORAGE_KEY","DEFAULT_PALETTE","PRESET_PALETTES","\"dark\"","\"midnight\"","\"tea\"","\"coffee\"","\"matcha\"","\"matrix\"","\"sunset\"","\"light\"","\"strawberry\"","\"ramune\"","isColour","sanitizeTheme","palette","img","isAsset","isData","isRemote","loadCustomThemes","parsed","saveCustomThemes","themes","loadCustomThemesFromServer","newThemeId","taken","applyCustomTheme","SURFACE_VARS","hasImage","theme","cssVar","wantDim","wantAlpha","prop","solid","opaque","colour","normalizeColour","hex","resolveActiveTheme","zs","Rl","Ll","M","S","Gs","mi","$s","_i","Al","kl","Vs","qs","Cn","Mn","Pn","Ce","It","er","tr","u","_","A","R","ir","we","De","rt","q","js","Hn","Fn","Xs","ie","Pl","F","rr","ge","Zs","xt","nr","H","sr","Js","Be","wt","Ol","nt","ae","Dt","ce","Qs","or","Re","lr","Bl","ar","Lt","Nl","Un","bi","eo","Rt","Se","At","Kn","zn","I","P","oe","Me","Pe","O","dt","fr","pr","vi","Gn","Ne","ho","C","dr","Ee","D","ye","fe","kt","Ct","zl","mr","$","y","T","E","N","Z","te","Oe","ze","le","me","ht","fi","Qe","Ke","di","V","Mt","$n","po","br","qn","Vn","gi","Yn","Vl","Pt","ql","jn","gr","Si","Xl","mo","Ot","Ei","Bt","Ti","Sr","vr","_o","Nt","yr","xr","Ii","vo","go","Ir","$e","Ve","xe","ra","wr","Te","Zn","Dr","Fe","sa","oa","la","ot","yi","Jn","To","Io","yo","Qn","Rr","es","ca","ua","ha","da","fa","ft","wo","pa","Lr","qe","xi","Do","ma","ts","Ye","kr","va","_e","Mo","ns","je","Ea","Ta","Po","Sa","Bh","be","Nh","Fh","Hh","Oo","Wh","Uh","No","Kh","zh","L","Y","ss","ya","xa","os","mt","Mr","Di","pt","Fo","ls","Ie","_t","Wt","Wo","He","Q","Pr","lt","Uo","Or","Ri","Nr","Br","as","ka","La","Aa","Fr","Ca","Ut","Kt","Wr","Ur","Ma","Ko","zo","us","zr","hs","ds","Pa","Kr","zt","Gt","Gr","We","Li","bt","Ai","fs","$t","ue","he","de","J","ps","vt","U","$r","z","ve","Xe","Vr","ct","Oa","Ba","$o","Vo","qr","Vt","W","An","et","tt","Qi","pi","it","qo","Yr","ms","Yo","_s","Le","jr","jo","ki","Xr","Na","Yt","jt","vs","bs","Zr","Jr","gs","Qr","Ci","Xo","Xt","en","tn","Ha","Ts","Ss","Wa","Ua","Fa","Bi","Zt","Mi","Zo","Es","Pi","Oi","rn","ys","Jt","nn","Qt","xs","Jo","Ga","sn","$a","Fi","Ni","za","Ka","gt","Va","Qo","qa","on","Ds","Ya","ja","Xa","Ja","ei","Hi","Wi","re","St","Ki","tl","il","Ui","Qa","ti","K","Rs","ln","ec","tc","ii","ic","zi","B","X","an","Ls","Ze","sl","ri","ll","al","un","cn","ne","Je","cl","$i","hn","ks","Cs","ni","si","nc","dn","sc","oi","ul","hl","li","dl","Ms","Ps","fl","ai","Os","ac","se","cc","Ae","pn","Bs","Vi","uc","ci","qi","mn","pe","Yi","_n","ji","Xi","Fs","ke","hc","bn","dc","fc","Ws","Hs","ml","mc","ut","_l","bl","vl","gl","vn","Zi","Sl","_c","El","bc","gn","ui","Tl","Sn","gc","Il","ee","En","Us","yl","Tn","Ks","Sc","In","xl","Tt","hi","Ec","yn","Tc","xn","wn","Ji","Dn","Rn","Ln","Ic","Ue","Dl","indexAfterAppend","clampPaneIndex","tabCount","paneIndexAfterClose","closedAt","newCount","rightPaneSeed","leftPane","pickAfterArchive","remaining","removed","shouldSendOnKey","shouldRestoreAfterSend","maximized","copyText","clipboard","deps","execCommand","makeTextarea","writeText","ta","staging","IconBtn","firstChild","_$addEventListener","onClick","icon","_p$","_v$","active","_v$2","_v$3","_$setAttribute","_$style","undefined","CopyBtn","done","setDone","failed","setFailed","copy","preventDefault","stopPropagation","then","result","setTimeout","$$click","_c$","_$memo","Modal","_el$5","_el$7","_el$8","nextSibling","target","currentTarget","onClose","_$delegateEvents","EMPTY","BASIC","classesFor","applySgr","params","SGR","ansiRuns","runs","flush","csi","osc","stripAnsi","hasAnsi","fmtDur","truncate","relTime","iso","abs","unit","MAX","cache","highlightedHtml","cacheHighlighted","oldest","BashElapsed","Date","getTime","setNow","setInterval","clearInterval","txt","Math","max","timeoutMs","round","ThinkingTimer","elapsed","AnsiText","_tmpl$5","_el$6","each","length","_tmpl$6","HighlightedCode","lang","setHtml","trim","highlightLangChunks","acc","chunk","_el$0","_el$9","_tmpl$7","THEMES","api","token","headers","opts","detail","mdCache","renderMarkdownCached","mdCache$1","DEFAULT_ALPHA","DEFAULT_DIM","clamp01","previewLayers","base","surfaceAlpha","backgroundDim","veilColour","surface","dim","backgroundImageValue","image","TodoEditor","stored","Number","localStorage","getItem","todoHeight","setTodoHeight","isFinite","heightStyle","height","trackHeight","ResizeObserver","offsetHeight","setItem","String","observe","disconnect","preview","$$input","onDraft","_$use","_$p","draft","CodePreview","split","pop","truncated","NumberField","_el$1","onValue","hint","ThemePreview","layers","_el$10","_tmpl$0","_el$13","_el$14","_el$15","_el$16","_el$17","_el$18","_el$19","_el$20","_el$21","_el$22","_el$23","backgroundImage","_el$11","_tmpl$8","_$setStyleProperty","_el$12","_tmpl$9","bgDark","_v$4","bgDarkest","_v$5","panel","_v$6","_v$7","_v$8","bgMid","_v$9","raised","_v$0","_v$1","_v$10","_v$11","_v$12","_v$13","ok","_v$14","warn","_v$15","flash","setFlash","flashTimer","flashHint","setFlash$1","msg","AUTHORS","HARNESS_AUTH","TONE_OF","toneOf","color","authorOf","fmtTs","rawOf","fmtK","oneLine","authorBucketOf","actorKeyOf","groupedWith","shellOutcome","outcomeMarker","outcome","shellHint","outputLang","first","formatToolOutput","pretty","FreeTextAnswer","val","setVal","submit","answered","onOption","$$keydown","isComposing","disabled","ToolRow","grouped","resEv","equals","staleDone","agentActive","argStr","cmdText","JSON","stringify","effTimeout","codeBlock","argsBlock","resultBlock","durationMs","derived","cmd","isBg","background","bgJob","match","slice","bits","push","offset","limit","replace_all","_tmpl$1","patchLines","test","files","MAX_PATCH_LINES","_tmpl$10","startsWith","_tmpl$11","_c$2","_tmpl$12","_el$25","_el$26","_tmpl$13","host","URL","pathname","_el$28","_el$30","_tmpl$15","_el$29","_tmpl$14","action","mdBody","replace","_el$31","_tmpl$16","_el$32","_tmpl$17","Array","isArray","_el$34","_tmpl$18","_el$36","_el$37","_tmpl$19","_el$39","_tmpl$21","_el$40","_el$41","_el$44","_el$45","open","onResize","_el$42","_tmpl$20","_c$3","MessageRow","nextGrouped","type","_el$46","_tmpl$22","_el$49","fromBranch","newBranch","branch","_el$50","_tmpl$23","_el$51","hasCard","step","chars","_el$52","_tmpl$26","_el$53","_el$54","_el$55","_tmpl$24","_el$56","_tmpl$25","_el$57","_el$58","_tmpl$27","_el$61","by","from","to","_el$62","_tmpl$28","_el$63","_c$4","reason","event","_el$64","_tmpl$29","_el$65","_el$69","_el$70","_el$71","_el$74","failures","lastTool","lastError","_el$75","_tmpl$30","_el$76","_el$80","_el$81","attempt","waitMs","secs","_el$82","jobId","_el$83","_tmpl$31","_el$88","_el$89","_el$90","tokensBefore","tokensAfter","mode","_el$91","_tmpl$32","_el$97","_el$98","_el$99","messages","_el$100","_tmpl$37","_el$101","_el$102","_c$5","_c$6","_el$111","_tmpl$38","_el$103","_tmpl$36","_el$104","_el$107","_el$105","_c$7","cancelled","showBranch","_el$108","_tmpl$33","onCancel","_el$109","_tmpl$34","onEdit","_el$110","_tmpl$35","SwitchContent","orphan","answeredIds","onAnswered","imgs","images","_el$112","_el$113","_tmpl$39","_el$114","_tmpl$40","_el$115","_tmpl$41","_el$117","_el$118","interrupted","_tmpl$42","final","_el$120","_tmpl$43","_el$121","_el$122","_tmpl$45","_el$123","_el$124","_el$125","_el$126","_tmpl$44","alts","alternatives","_el$128","_tmpl$47","_el$129","_el$132","_el$133","_el$134","_tmpl$46","decision","rationale","callId","has","_el$136","_tmpl$50","_el$139","_tmpl$48","_el$141","_tmpl$49","_el$142","_tmpl$51","encodeURIComponent","method","catch","question","_el$143","_tmpl$56","_el$146","goalStatus","_el$147","_tmpl$52","_el$149","recent","_el$150","_tmpl$53","_el$152","problems","_el$153","_tmpl$54","_el$155","_el$156","_tmpl$55","_el$158","doing","_el$159","_tmpl$57","_el$160","message","summary","_el$172","_tmpl$61","_el$175","_el$176","_el$180","_el$181","_c$9","summarized","dropped","_tmpl$60","_el$183","_el$162","_tmpl$59","_el$164","_el$165","_el$169","_el$170","_c$8","_tmpl$58","_el$184","_tmpl$62","PROVIDER_PRESETS","slotForSelection","auto","ThemeEditor","editingId","setEditingId","some","activeId","editing","find","hexDraft","setHexDraft","filePick","onChange","setColour","duplicatePreset","activeCustom","paintedId","activePreset","getComputedStyle","documentElement","getPropertyValue","concat","onPick","importFile","file","size","fetch","json","backgroundImageBytes","bytes","ex","_el$38","click","_ref$","_el$24","_el$27","_el$33","ConfigModal","rowOf","keys","apiKeys","apiKey","baseUrl","model","setProviders","Object","entries","cfg","setDefaultProvider","cfgDefaultProvider","providerNames","names","Set","includes","staleDefaultProvider","intervalMin","setIntervalMin","progressIntervalMs","minChars","setMinChars","progressMinChars","ctxBudgetK","setCtxBudgetK","contextTokenBudget","ctxWinK","setCtxWinK","contextWindowTokens","maxDepth","setMaxDepth","maxSpawnDepth","shortContext","setShortContext","apiPassword","setApiPassword","apiPasswordDirty","setApiPasswordDirty","tasks","setTasks","mcpServers","setMcpServers","mcpHeadersText","setMcpHeadersText","fromEntries","mcpHeaderErr","setMcpHeaderErr","mcpAuthKind","setMcpAuthKind","only","mcpAuthValue","setMcpAuthValue","mcpHeaderName","setMcpHeaderName","mcpStatus","setMcpStatus","urlProbeTimers","probeOAuth","tools","needsOAuth","mcpStates","setMcpStates","mcpOAuth","setMcpOAuth","oauthState","required","authorized","refreshMcpStates","states","refreshMcpOAuth","startMcpOAuth","srv","alreadyAuthorized","window","deadline","Promise","onSaved","flow","phase","section","forEach","setErr","setSection","pickThemeCard","slot","setSysDarkTheme","setSysLightTheme","setFixedTheme","themeCardChosen","dark","light","archived","setArchived","refreshArchived","archivedTop","SECTIONS","customThemes","fixedTheme","storedAppearance","fixed","draftOf","applyDraft","merged","setAuto","setDark","setLight","setActive","chosen","themeAuto","setThemeAuto","sysDarkTheme","sysLightTheme","setCustomThemes","setThemes","revertAppearance","presetPalette","saveProviders","saveState","setSaveState","failSave","save","cleanTasks","prompt","schedule","forked","cleanMcp","seenMcp","transport","command","add","enabled","password","all","resolve","savedNames","newlyNeeding","needing","announcedOAuth","commitAppearance","assign","_el$43","_el$47","_el$48","_el$68","_el$77","_el$79","_el$84","_el$86","_el$92","_el$93","_el$95","_el$96","_el$106","_el$116","_el$119","sec","_v$17","_v$18","_v$19","_el$127","_el$130","_el$131","_el$135","_el$137","checked","_el$72","_el$138","group","_el$140","_el$144","_el$145","_v$20","_v$21","_v$22","_el$148","_v$23","_v$24","_v$25","saved","adopted","stripped","retry","alive","upd","_el$151","_el$154","_el$157","_el$161","_el$163","clearTimeout","Authorization","hname","_el$166","_el$167","_el$168","parse","Error","_el$171","_el$173","_el$174","_v$26","_v$27","st2","_el$177","_el$178","_el$179","_el$182","_el$185","_el$186","t2","_el$187","_el$188","description","_el$189","_el$190","_el$191","_el$192","_el$193","_el$194","_el$195","_el$196","_el$197","_el$198","_el$200","_el$201","_el$202","_el$203","_el$204","_el$205","_el$206","_el$207","sessions","subs","archivedAt","toISOString","workspace","ids","confirm","_el$208","_el$209","_el$210","_el$211","version","btn","textContent","beforeUptime","reloaded","uptimeSeconds","location","reload","skills","_el$213","hasSelection","setOpen","setBody","toggle","_el$214","_el$215","_el$216","_el$217","_el$218","_el$220","_el$219","classList","features","imageResize","available","tool","maxEdge","pty","hasPassword","_v$16","IMAGE_EXT","VIDEO_EXT","AUDIO_EXT","ficon","ext","mk","mediaKindOf","fileUi","fileUiFor","FilesPanel","setKids","Map","expanded","setExpandedRaw","setPreviewRaw","setPreview","setExpanded","media","setMediaRaw","setMedia","viewMode","setViewModeRaw","setViewMode","ignoreMode","setIgnoreMode","cycleIgnoreMode","order","indexOf","ignoreFilter","ignored","showHidden","setShowHidden","toggleHidden","targets","fetchDirWith","results","mergeKids","parseEntries","parentPath","dir","fetchDir","hidden","URLSearchParams","toString","old","get","byPath","kept","fresh","kidsFor","toggleDir","delete","hlHtml","setHlHtml","hlPending","setHlPending","editBuf","setEditBuf","saving","setSaving","isMd","hlRun","startHighlighting","run","highlightChunks","openFileWith","binary","saveFile","pv","baseContent","payload","conflict","take","isEditable","wsName","refreshing","setRefreshing","refreshTree","\"class\"","REASONING_EFFORT_OPTIONS","NARROW_PX","imeInProgress","FEED_TYPES","NOTE_FEED_TYPES","RENDERED_TYPES","RENDERED_NOTE_EVENTS","hashTok","hash","decodeURIComponent","history","replaceState","search","wsTokenQuery","App","setAgents","setSelected","timelineId","setTimelineId","masterSessionIndex","setMasterSessionIndex","sessionsByAgent","setSessionsByAgent","sessionTitles","setSessionTitles","indexFetched","indexInFlight","refreshSessionIndex","force","byAgent","titles","setEvents","eventsTotal","setEventsTotal","branches","setBranches","metrics","setMetrics","drafts","setDraft","saveDraft","setCfg","showNew","setShowNew","activeBgImage","previewTheme","sysPrefersLight","paintedThemeId","showCfg","setShowCfg","setupNudged","needsSetup","requestAnimationFrame","loadCfg","setFeatures","isNarrow","innerWidth","narrow","setNarrow","removeEventListener","lastContentHeight","unskipAnchor","unskipAnchorAt","feedRo","feedRoEl","feedRoRaf","feedRoLastBox","restoreAfterBoxChange","feedEl","lastSampleHeight","lastSampleViewport","clientHeight","atBottom","pinToTail","anchorRow","querySelector","sel","delta","getBoundingClientRect","scrollTop","publishGap","tailSample","resyncAfterUnskip","anchor","RESYNC_MAX_DELTA_PX","scheduleRestore","attachFeedObserver","contentRect","unobserve","cancelAnimationFrame","firstVisibleRow","querySelectorAll","feedTop","lo","found","mid","bottom","eid","dataset","CSS","escape","showRight","setShowRight","setRight","toggleRight","closeRight","showLeft","setShowLeft","closeLeft","setPreviewTheme","sysMql","matchMedia","setSysPrefersLight","matches","resolved","previewId","customIds","presetIds","custom","repaired","appearance","modelProvider","setModelProvider","modelDraft","setModelDraft","effortDraft","setEffortDraft","reasoningEffort","models","setModels","providerList","loadModels","prov","modalityBadge","audio","video","side","modalities","output","modelSpec","badge","contextLength","price","toFixed","pricing","pin","pout","completion","_prevModelAgent","providerTouched","curProv","curDraft","composerMaximized","setComposerMaximized","setAtBottom","missed","setMissed","gapToTailPx","setGapToTailPx","compacting","setCompacting","liveIsCompact","liveText","liveBody","CAP","setLive","chatEvents","olderDone","loadingFeed","loadingOlder","liveByAgent","setLiveByAgent","settleLiveBuffer","setLiveText","thinkStartedAt","setThinkStartedAt","liveStartedAt","liveReasoning","setLiveReasoning","liveRenderTimer","rsn","pendingPrompts","pendingPromptIds","pendingKey","pendingFor","writePending","pendingPromptQueue","session","have","promptId","missing","onVisible","visibilityState","nearBottom","scrollBottom","markReadIfFollowing","queuedCount","fromServer","pendingCount","isSelLive","isTimelineLive","setEditing","pendingBySession","pendingMsgs","setPendingMsgs","reverse","notifs","setNotifs","setHideGhosts","showNotifs","setShowNotifs","unreadCount","read","markSessionRead","changed","subtreeUnread","total","notifSeq","addNotif","maybeNotify","who","eventId","jumpToEvent","scrollIntoView","behavior","block","remove","pairInfo","resFor","awaiting","orphanCalls","call","shift","setLocallyAnswered","markAnswered","clearLocallyAnswered","answeredQuestionIds","timeline","echo","echoEv","renderedTypes","renderedNoteEvents","rowIndex","WeakMap","neighbourOf","echoCache","sent","clear","seq","authLocked","setAuthLocked","onUnauthorized","todoDraft","setTodoDraft","todoViewMode","setTodoViewMode","todoDirty","setTodoDirty","todoSeededFor","serverTodo","todo","saveTodo","notify","getElementById","refreshAgents","todoStats","toLowerCase","mergeAgentSnapshots","prevById","agentSetChanged","refreshMetrics","loadTasks","agentTasks","expandedSubs","setExpandedSubs","setCollapsedSubs","subsCollapsed","toggleCollapse","cleared","chatGroupKey","wsCollapsed","setWsCollapsed","VERSION","chatCollapsed","treeRows","toggleWsGroup","groupKey","isCollapsed","alsoClear","basenameOf","wsCountLabel","wsChatCounts","sidebarRows","branchFilter","setBranchFilter","evCache","cacheKey","stabilize","setLoadingOlder","setLoadingFeed","setOlderDone","feedGeneration","lastBranchesGen","mergeEvents","incoming","stable","newest","allNewer","every","added","values","sort","backfillUntilScrollable","measurable","before","loadOlder","prevH","prevTop","bf","tid","page","eventsUrl","sessionQuery","sessQ","loadEvents","sessionId","genAtStart","needsBranches","sk","setAgentSkills","viewport","timelineCache","scrollMemory","TIMELINE_CACHE_MAX_BYTES","approxEventBytes","latestSessionOf","select","forceSession","prevId","prevTid","prevEvents","prevTotal","outKey","SCROLL_MEMORY_MAX","reduce","totalBytes","TIMELINE_CACHE_MAX","lastSample","navigate","cached","ctx","restore","connected","setConnected","timer","pendingRefresh","feedNeedsRead","onTabVisible","firstConnect","runFeedRefreshRef","catchUpAfterReconnect","got","gap","connectWs","proto","protocol","sock","WebSocket","onopen","onclose","onerror","FEED_IRRELEVANT","onmessage","send","snapshot","findIndex","ed","holder","heldSeq","arriving","runFeedRefresh","beforeId","beforeLen","pathId","linkable","pushState","sid","anyOverlayOpen","tagName","isContentEditable","blur","focus","toggleTerm","min","termOpen","setTermOpen","termTabs","setTermTabs","paneL","setPaneL","paneR","setPaneR","splitView","setSplitView","focusedPane","setFocusedPane","termHeight","setTermHeight","innerHeight","liveTerms","paneHosts","activeTab","focusTab","focused","mineIdx","otherIdx","setMine","setOther","addFromSelected","addTab","terminal","closeTab","tab","term","disposeAllTerms","ensureSession","parentElement","appendChild","fit","createElement","Terminal","cursorBlink","fontSize","fontFamily","FitAddon","loadAddon","write","onData","readyState","OPEN","last","cols","pendingRetry","resizeTimer","pushResize","scheduleRetry","measureEl","mountPane","replaceChildren","other","_termFollowAgent","startGrip","startY","clientY","startH","move","up","toggleSplit","setPaneHost","loadPersonas","terminals","SLASH_COMMANDS","desc","setPersonas","mentionFork","setMentionFork","mentionQuery","mentionMatches","NO_ARG_COMMANDS","agentSkills","cmdIdx","setCmdIdx","suggestions","cmdName","argPart","exact","composerEl","composerMirror","composerMirrorHost","composerMirrorStyleAdded","measureComposerContent","position","visibility","pointerEvents","left","whiteSpace","overflowWrap","wordBreak","mirror","setProperty","clientWidth","endsWith","cssText","autosizeComposer","contentH","wanted","MAX_COMPOSER_H","resyncBudget","RESYNC_BUDGET_PER_GESTURE","pendingImages","setPendingImages","addImages","reader","FileReader","onload","readAsDataURL","sendText","targetId","echoKey","random","console","sp","isPersona","knownAgent","persona","executeSlash","post","ran","rightbarEl","rightbarTop","act","archiveSelected","stopChildren","stopped","forkSelected","goalDraft","setGoalDraft","goalHeight","setGoalHeight","goalPreviewHeight","setGoalPreviewHeight","goalPreviewStyle","resize","trackGoalPreviewHeight","stop","goalHeightStyle","trackGoalHeight","goalVerifyDraft","setGoalVerifyDraft","_goalDirty","setGoalDirty","goalNotify","setGoalNotify","goalSeededFor","goal","setGoal","verify","wsHeader","wsCollapsedGroup","collapsedVia","headerOnly","isSub","chatCollapsedGroup","hasChildren","isChat","off","sessionTitle","workspaceMissing","running","named","firstVisible","rssMb","heapUsedMb","heapTotalMb","externalMb","loadavg1","uptimeSec","harness","_el$35","stats","turns","toolCalls","statusReason","wasFollowing","performance","follow","back","_el$59","stick","_el$66","_el$67","$$dblclick","$$pointerdown","_v$28","_v$29","_ref$2","_el$87","_el$94","_v$30","_v$31","im","_v$32","_v$33","_v$34","sugg","shiftKey","clipboardData","_ref$3","_aid","aid","_el$232","_tmpl$79","_el$233","effortSupported","effortOptions","_el$234","alert","autoContinue","_tmpl$80","_tmpl$63","_el$236","_tmpl$81","_v$39","_v$40","_tmpl$82","_tmpl$64","_v$35","_v$36","audit","verdict","feedback","_tmpl$65","_tmpl$67","_tmpl$66","_tmpl$68","_v$37","_v$38","_tmpl$69","_tmpl$70","latestProgress","_tmpl$83","_el$239","_tmpl$88","_el$240","_el$242","_el$255","_el$243","_tmpl$84","_el$245","_el$246","_tmpl$85","_el$248","_el$249","_tmpl$86","_el$251","_el$252","_tmpl$87","_el$254","_tmpl$71","_tmpl$74","_el$199","_tmpl$89","ctxVals","cv","modelMeta","effectiveWindow","pct","usedTokens","compactAt","derivedBudget","usingDerived","compactAtIsManual","fmtPct","isInteger","_el$257","_tmpl$93","_el$258","_el$260","_el$263","_el$268","_el$270","_el$271","_el$272","_el$277","_el$279","_el$264","_tmpl$90","_el$265","_el$266","_tmpl$91","_el$267","_v$41","_v$42","_el$273","_tmpl$92","_el$276","autoCompact","inputTokens","outputTokens","compactions","costUsd","_el$212","_tmpl$72","costFmt","cachedInputTokens","_tmpl$73","_tmpl$76","_el$221","_el$223","_tmpl$75","_el$225","_el$280","_tmpl$94","_el$281","_el$282","_el$283","changing","_v$43","_v$44","_el$226","_tmpl$78","_el$228","_tmpl$77","_el$231","_tmpl$95","_el$285","_tmpl$97","_el$286","_el$287","_el$288","_el$291","_el$292","_el$293","_tmpl$96","_v$45","_v$46","_tmpl$98","_el$295","_tmpl$100","_el$297","_el$298","_el$299","_el$300","_el$301","_tmpl$99","_v$47","_v$48","_v$49","NewAgentModal","onCreated","afterCount","setTail","_el$302","_tmpl$102","_el$303","_el$311","_el$312","_el$304","_tmpl$101","_el$305","_el$306","_el$307","_el$308","_el$310","usd","toLocaleString","setDir","setEntries","setName","setProvider","setModel","browse","setParent","_el$313","_tmpl$104","_el$314","_el$317","_el$318","_el$319","_el$320","_el$321","_el$322","_el$324","_el$325","_el$327","_el$330","_el$332","_el$333","_tmpl$105","_el$335","_el$331","_tmpl$103"],"ignoreList":[0,1,23,24],"sources":["../../node_modules/.pnpm/solid-js@1.9.17/node_modules/solid-js/dist/solid.js","../../node_modules/.pnpm/solid-js@1.9.17/node_modules/solid-js/web/dist/web.js","../../frontend/md.js","../../frontend/lib/live-buffer.ts","../../frontend/lib/timeline-order.ts","../../frontend/lib/timeline.ts","../../frontend/lib/goal-timeline.ts","../../frontend/components/card.tsx","../../frontend/lib/theme-merge.ts","../../frontend/lib/bg-srcset.ts","../../frontend/lib/sidebar-tree.ts","../../frontend/lib/question-answered.ts","../../frontend/lib/pending-echo.ts","../../frontend/lib/session-index.ts","../../frontend/lib/textarea-size.ts","../../frontend/lib/session-scope.ts","../../frontend/lib/terminal-theme.ts","../../frontend/lib/model-selection.ts","../../frontend/lib/composer-ime.ts","../../frontend/lib/scroll-policy.ts","../../frontend/lib/composer-size.ts","../../frontend/lib/agent-label.ts","../../frontend/lib/theme-store.ts","../../node_modules/.pnpm/@xterm+xterm@6.0.0/node_modules/@xterm/xterm/lib/xterm.mjs","../../node_modules/.pnpm/@xterm+addon-fit@0.11.0/node_modules/@xterm/addon-fit/lib/addon-fit.mjs","../../frontend/lib/term-tabs.ts","../../frontend/lib/archive-target.ts","../../frontend/lib/composer-keys.ts","../../frontend/lib/clipboard.ts","../../frontend/components/chrome.tsx","../../frontend/lib/ansi.ts","../../frontend/lib/format.ts","../../frontend/lib/highlight-cache.ts","../../frontend/components/code.tsx","../../frontend/lib/themes-presets.ts","../../frontend/lib/api.ts","../../frontend/lib/markdown.ts","../../frontend/lib/theme-preview.ts","../../frontend/components/settings-parts.tsx","../../frontend/lib/flash.ts","../../frontend/lib/timeline-row.ts","../../frontend/lib/row-grouping.ts","../../frontend/lib/shell-outcome.ts","../../frontend/lib/tool-output-lang.ts","../../frontend/components/rows.tsx","../../frontend/lib/provider-presets.ts","../../frontend/lib/theme-slots.ts","../../frontend/components/ConfigModal.tsx","../../frontend/lib/file-tree.ts","../../frontend/components/FilesPanel.tsx","../../frontend/App.tsx","../../frontend/index.tsx"],"sourcesContent":["let taskIdCounter = 1,\n isCallbackScheduled = false,\n isPerformingWork = false,\n taskQueue = [],\n currentTask = null,\n shouldYieldToHost = null,\n yieldInterval = 5,\n deadline = 0,\n maxYieldInterval = 300,\n maxDeadline = 0,\n scheduleCallback = null,\n scheduledCallback = null;\nconst maxSigned31BitInt = 1073741823;\nfunction setupScheduler() {\n const channel = new MessageChannel(),\n port1 = channel.port1,\n port = channel.port2;\n if (typeof port1.unref === \"function\") port1.unref();\n if (typeof port.unref === \"function\") port.unref();\n scheduleCallback = () => port.postMessage(null);\n port1.onmessage = () => {\n if (scheduledCallback !== null) {\n const currentTime = performance.now();\n deadline = currentTime + yieldInterval;\n maxDeadline = currentTime + maxYieldInterval;\n try {\n const hasMoreWork = scheduledCallback(currentTime);\n if (!hasMoreWork) {\n scheduledCallback = null;\n } else port.postMessage(null);\n } catch (error) {\n port.postMessage(null);\n throw error;\n }\n }\n };\n if (navigator && navigator.scheduling && navigator.scheduling.isInputPending) {\n const scheduling = navigator.scheduling;\n shouldYieldToHost = () => {\n const currentTime = performance.now();\n if (currentTime >= deadline) {\n if (scheduling.isInputPending()) {\n return true;\n }\n return currentTime >= maxDeadline;\n } else {\n return false;\n }\n };\n } else {\n shouldYieldToHost = () => performance.now() >= deadline;\n }\n}\nfunction enqueue(taskQueue, task) {\n function findIndex() {\n let m = 0;\n let n = taskQueue.length - 1;\n while (m <= n) {\n const k = n + m >> 1;\n const cmp = task.expirationTime - taskQueue[k].expirationTime;\n if (cmp > 0) m = k + 1;else if (cmp < 0) n = k - 1;else return k;\n }\n return m;\n }\n taskQueue.splice(findIndex(), 0, task);\n}\nfunction requestCallback(fn, options) {\n if (!scheduleCallback) setupScheduler();\n let startTime = performance.now(),\n timeout = maxSigned31BitInt;\n if (options && options.timeout) timeout = options.timeout;\n const newTask = {\n id: taskIdCounter++,\n fn,\n startTime,\n expirationTime: startTime + timeout\n };\n enqueue(taskQueue, newTask);\n if (!isCallbackScheduled && !isPerformingWork) {\n isCallbackScheduled = true;\n scheduledCallback = flushWork;\n scheduleCallback();\n }\n return newTask;\n}\nfunction cancelCallback(task) {\n task.fn = null;\n}\nfunction flushWork(initialTime) {\n isCallbackScheduled = false;\n isPerformingWork = true;\n try {\n return workLoop(initialTime);\n } finally {\n currentTask = null;\n isPerformingWork = false;\n }\n}\nfunction workLoop(initialTime) {\n let currentTime = initialTime;\n currentTask = taskQueue[0] || null;\n while (currentTask !== null) {\n if (currentTask.expirationTime > currentTime && shouldYieldToHost()) {\n break;\n }\n const callback = currentTask.fn;\n if (callback !== null) {\n currentTask.fn = null;\n const didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n callback(didUserCallbackTimeout);\n currentTime = performance.now();\n if (currentTask === taskQueue[0]) {\n taskQueue.shift();\n }\n } else taskQueue.shift();\n currentTask = taskQueue[0] || null;\n }\n return currentTask !== null;\n}\n\nconst sharedConfig = {\n context: undefined,\n registry: undefined,\n effects: undefined,\n done: false,\n getContextId() {\n return getContextId(this.context.count);\n },\n getNextContextId() {\n return getContextId(this.context.count++);\n }\n};\nfunction getContextId(count) {\n const num = String(count),\n len = num.length - 1;\n return sharedConfig.context.id + (len ? String.fromCharCode(96 + len) : \"\") + num;\n}\nfunction setHydrateContext(context) {\n sharedConfig.context = context;\n}\nfunction nextHydrateContext() {\n return {\n ...sharedConfig.context,\n id: sharedConfig.getNextContextId(),\n count: 0\n };\n}\n\nconst IS_DEV = false;\nconst equalFn = (a, b) => a === b;\nconst $PROXY = Symbol(\"solid-proxy\");\nconst SUPPORTS_PROXY = typeof Proxy === \"function\";\nconst $TRACK = Symbol(\"solid-track\");\nconst $DEVCOMP = Symbol(\"solid-dev-component\");\nconst signalOptions = {\n equals: equalFn\n};\nlet ERROR = null;\nlet runEffects = runQueue;\nconst STALE = 1;\nconst PENDING = 2;\nconst UNOWNED = {\n owned: null,\n cleanups: null,\n context: null,\n owner: null\n};\nconst NO_INIT = {};\nvar Owner = null;\nlet Transition = null;\nlet Scheduler = null;\nlet ExternalSourceConfig = null;\nlet Listener = null;\nlet Updates = null;\nlet Effects = null;\nlet ExecCount = 0;\nfunction createRoot(fn, detachedOwner) {\n const listener = Listener,\n owner = Owner,\n unowned = fn.length === 0,\n current = detachedOwner === undefined ? owner : detachedOwner,\n root = unowned ? UNOWNED : {\n owned: null,\n cleanups: null,\n context: current ? current.context : null,\n owner: current\n },\n updateFn = unowned ? fn : () => fn(() => untrack(() => cleanNode(root)));\n Owner = root;\n Listener = null;\n try {\n return runUpdates(updateFn, true);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n}\nfunction createSignal(value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const s = {\n value,\n observers: null,\n observerSlots: null,\n comparator: options.equals || undefined\n };\n const setter = value => {\n if (typeof value === \"function\") {\n if (Transition && Transition.running && Transition.sources.has(s)) value = value(s.tValue);else value = value(s.value);\n }\n return writeSignal(s, value);\n };\n return [readSignal.bind(s), setter];\n}\nfunction createComputed(fn, value, options) {\n const c = createComputation(fn, value, true, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);else updateComputation(c);\n}\nfunction createRenderEffect(fn, value, options) {\n const c = createComputation(fn, value, false, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);else updateComputation(c);\n}\nfunction createEffect(fn, value, options) {\n runEffects = runUserEffects;\n const c = createComputation(fn, value, false, STALE),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n if (!options || !options.render) c.user = true;\n Effects ? Effects.push(c) : updateComputation(c);\n}\nfunction createReaction(onInvalidate, options) {\n let fn;\n const c = createComputation(() => {\n fn ? fn() : untrack(onInvalidate);\n fn = undefined;\n }, undefined, false, 0),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n c.user = true;\n return tracking => {\n fn = tracking;\n updateComputation(c);\n };\n}\nfunction createMemo(fn, value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const c = createComputation(fn, value, true, 0);\n c.observers = null;\n c.observerSlots = null;\n c.comparator = options.equals || undefined;\n if (Scheduler && Transition && Transition.running) {\n c.tState = STALE;\n Updates.push(c);\n } else updateComputation(c);\n return readSignal.bind(c);\n}\nfunction isPromise(v) {\n return v && typeof v === \"object\" && \"then\" in v;\n}\nfunction createResource(pSource, pFetcher, pOptions) {\n let source;\n let fetcher;\n let options;\n if (typeof pFetcher === \"function\") {\n source = pSource;\n fetcher = pFetcher;\n options = pOptions || {};\n } else {\n source = true;\n fetcher = pSource;\n options = pFetcher || {};\n }\n let pr = null,\n initP = NO_INIT,\n id = null,\n loadedUnderTransition = false,\n scheduled = false,\n resolved = \"initialValue\" in options,\n dynamic = typeof source === \"function\" && createMemo(source);\n const contexts = new Set(),\n [value, setValue] = (options.storage || createSignal)(options.initialValue),\n [error, setError] = createSignal(undefined),\n [track, trigger] = createSignal(undefined, {\n equals: false\n }),\n [state, setState] = createSignal(resolved ? \"ready\" : \"unresolved\");\n if (Owner) onCleanup(() => {\n for (const c of contexts.keys()) c.decrement();\n contexts.clear();\n if (Transition && pr) Transition.promises.delete(pr);\n pr = null;\n });\n if (sharedConfig.context) {\n id = sharedConfig.getNextContextId();\n if (options.ssrLoadFrom === \"initial\") initP = options.initialValue;else if (sharedConfig.load && sharedConfig.has(id)) initP = sharedConfig.load(id);\n }\n function loadEnd(p, v, error, key) {\n if (pr === p) {\n pr = null;\n key !== undefined && (resolved = true);\n if ((p === initP || v === initP) && options.onHydrated) queueMicrotask(() => options.onHydrated(key, {\n value: v\n }));\n initP = NO_INIT;\n if (Transition && p && loadedUnderTransition) {\n Transition.promises.delete(p);\n loadedUnderTransition = false;\n runUpdates(() => {\n Transition.running = true;\n completeLoad(v, error);\n }, false);\n } else completeLoad(v, error);\n }\n return v;\n }\n function completeLoad(v, err) {\n runUpdates(() => {\n if (err === undefined) setValue(() => v);\n setState(err !== undefined ? \"errored\" : resolved ? \"ready\" : \"unresolved\");\n setError(err);\n for (const c of contexts.keys()) c.decrement();\n contexts.clear();\n }, false);\n }\n function read() {\n const c = SuspenseContext && useContext(SuspenseContext),\n v = value(),\n err = error();\n if (err !== undefined && !pr) throw err;\n if (Listener && !Listener.user && c) {\n createComputed(() => {\n track();\n if (pr) {\n if (c.resolved && Transition && loadedUnderTransition) Transition.promises.add(pr);else if (!contexts.has(c)) {\n c.increment();\n contexts.add(c);\n }\n }\n });\n }\n return v;\n }\n function load(refetching = true) {\n if (refetching !== false && scheduled) return;\n scheduled = false;\n const lookup = dynamic ? dynamic() : source;\n loadedUnderTransition = Transition && Transition.running;\n if (lookup == null || lookup === false) {\n loadEnd(pr, untrack(value));\n return;\n }\n if (Transition && pr) Transition.promises.delete(pr);\n let error;\n const p = initP !== NO_INIT ? initP : untrack(() => {\n try {\n return fetcher(lookup, {\n value: value(),\n refetching\n });\n } catch (fetcherError) {\n error = fetcherError;\n }\n });\n if (error !== undefined) {\n loadEnd(pr, undefined, castError(error), lookup);\n return;\n } else if (!isPromise(p)) {\n loadEnd(pr, p, undefined, lookup);\n return p;\n }\n pr = p;\n if (\"v\" in p) {\n if (p.s === 1) loadEnd(pr, p.v, undefined, lookup);else loadEnd(pr, undefined, castError(p.v), lookup);\n return p;\n }\n scheduled = true;\n queueMicrotask(() => scheduled = false);\n runUpdates(() => {\n setState(resolved ? \"refreshing\" : \"pending\");\n trigger();\n }, false);\n return p.then(v => loadEnd(p, v, undefined, lookup), e => loadEnd(p, undefined, castError(e), lookup));\n }\n Object.defineProperties(read, {\n state: {\n get: () => state()\n },\n error: {\n get: () => error()\n },\n loading: {\n get() {\n const s = state();\n return s === \"pending\" || s === \"refreshing\";\n }\n },\n latest: {\n get() {\n if (!resolved) return read();\n const err = error();\n if (err && !pr) throw err;\n return value();\n }\n }\n });\n let owner = Owner;\n if (dynamic) createComputed(() => (owner = Owner, load(false)));else load(false);\n return [read, {\n refetch: info => runWithOwner(owner, () => load(info)),\n mutate: setValue\n }];\n}\nfunction createDeferred(source, options) {\n let t,\n timeout = options ? options.timeoutMs : undefined;\n const node = createComputation(() => {\n if (!t || !t.fn) t = requestCallback(() => setDeferred(() => node.value), timeout !== undefined ? {\n timeout\n } : undefined);\n return source();\n }, undefined, true);\n const [deferred, setDeferred] = createSignal(Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, options);\n updateComputation(node);\n setDeferred(() => Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value);\n return deferred;\n}\nfunction createSelector(source, fn = equalFn, options) {\n const subs = new Map();\n const node = createComputation(p => {\n const v = source();\n for (const [key, val] of subs.entries()) if (fn(key, v) !== fn(key, p)) {\n for (const c of val.values()) {\n if (Transition && Transition.running) c.tState = STALE;else c.state = STALE;\n if (c.pure) Updates.push(c);else Effects.push(c);\n }\n }\n return v;\n }, undefined, true, STALE);\n updateComputation(node);\n return key => {\n const listener = Listener;\n if (listener) {\n let l;\n if (l = subs.get(key)) l.add(listener);else subs.set(key, l = new Set([listener]));\n onCleanup(() => {\n l.delete(listener);\n !l.size && subs.delete(key);\n });\n }\n return fn(key, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value);\n };\n}\nfunction batch(fn) {\n return runUpdates(fn, false);\n}\nfunction untrack(fn) {\n if (!ExternalSourceConfig && Listener === null) return fn();\n const listener = Listener;\n Listener = null;\n try {\n if (ExternalSourceConfig) return ExternalSourceConfig.untrack(fn);\n return fn();\n } finally {\n Listener = listener;\n }\n}\nfunction on(deps, fn, options) {\n const isArray = Array.isArray(deps);\n let prevInput;\n let defer = options && options.defer;\n return prevValue => {\n let input;\n if (isArray) {\n input = Array(deps.length);\n for (let i = 0; i < deps.length; i++) input[i] = deps[i]();\n } else input = deps();\n if (defer) {\n defer = false;\n return prevValue;\n }\n const result = untrack(() => fn(input, prevInput, prevValue));\n prevInput = input;\n return result;\n };\n}\nfunction onMount(fn) {\n createEffect(() => untrack(fn));\n}\nfunction onCleanup(fn) {\n if (Owner === null) ;else if (Owner.cleanups === null) Owner.cleanups = [fn];else Owner.cleanups.push(fn);\n return fn;\n}\nfunction catchError(fn, handler) {\n ERROR || (ERROR = Symbol(\"error\"));\n Owner = createComputation(undefined, undefined, true);\n Owner.context = {\n ...Owner.context,\n [ERROR]: [handler]\n };\n if (Transition && Transition.running) Transition.sources.add(Owner);\n try {\n return fn();\n } catch (err) {\n handleError(err);\n } finally {\n Owner = Owner.owner;\n }\n}\nfunction getListener() {\n return Listener;\n}\nfunction getOwner() {\n return Owner;\n}\nfunction runWithOwner(o, fn) {\n const prev = Owner;\n const prevListener = Listener;\n Owner = o;\n Listener = null;\n try {\n return runUpdates(fn, true);\n } catch (err) {\n handleError(err);\n } finally {\n Owner = prev;\n Listener = prevListener;\n }\n}\nfunction enableScheduling(scheduler = requestCallback) {\n Scheduler = scheduler;\n}\nfunction startTransition(fn) {\n if (Transition && Transition.running) {\n fn();\n return Transition.done;\n }\n const l = Listener;\n const o = Owner;\n return Promise.resolve().then(() => {\n Listener = l;\n Owner = o;\n let t;\n if (Scheduler || SuspenseContext) {\n t = Transition || (Transition = {\n sources: new Set(),\n effects: [],\n promises: new Set(),\n disposed: new Set(),\n queue: new Set(),\n running: true\n });\n t.done || (t.done = new Promise(res => t.resolve = res));\n t.running = true;\n }\n runUpdates(fn, false);\n Listener = Owner = null;\n return t ? t.done : undefined;\n });\n}\nconst [transPending, setTransPending] = /*@__PURE__*/createSignal(false);\nfunction useTransition() {\n return [transPending, startTransition];\n}\nfunction resumeEffects(e) {\n Effects.push.apply(Effects, e);\n e.length = 0;\n}\nfunction createContext(defaultValue, options) {\n const id = Symbol(\"context\");\n return {\n id,\n Provider: createProvider(id),\n defaultValue\n };\n}\nfunction useContext(context) {\n let value;\n return Owner && Owner.context && (value = Owner.context[context.id]) !== undefined ? value : context.defaultValue;\n}\nfunction children(fn) {\n const children = createMemo(fn);\n const memo = createMemo(() => resolveChildren(children()));\n memo.toArray = () => {\n const c = memo();\n return Array.isArray(c) ? c : c != null ? [c] : [];\n };\n return memo;\n}\nlet SuspenseContext;\nfunction getSuspenseContext() {\n return SuspenseContext || (SuspenseContext = createContext());\n}\nfunction enableExternalSource(factory, untrack = fn => fn()) {\n if (ExternalSourceConfig) {\n const {\n factory: oldFactory,\n untrack: oldUntrack\n } = ExternalSourceConfig;\n ExternalSourceConfig = {\n factory: (fn, trigger) => {\n const oldSource = oldFactory(fn, trigger);\n const source = factory(x => oldSource.track(x), trigger);\n return {\n track: x => source.track(x),\n dispose() {\n source.dispose();\n oldSource.dispose();\n }\n };\n },\n untrack: fn => oldUntrack(() => untrack(fn))\n };\n } else {\n ExternalSourceConfig = {\n factory,\n untrack\n };\n }\n}\nfunction readSignal() {\n const runningTransition = Transition && Transition.running;\n if (this.sources && (runningTransition ? this.tState : this.state)) {\n if ((runningTransition ? this.tState : this.state) === STALE) updateComputation(this);else {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(this), false);\n Updates = updates;\n }\n }\n if (Listener) {\n const observers = this.observers;\n if (!observers || observers[observers.length - 1] !== Listener) {\n const sSlot = observers ? observers.length : 0;\n if (!Listener.sources) {\n Listener.sources = [this];\n Listener.sourceSlots = [sSlot];\n } else {\n Listener.sources.push(this);\n Listener.sourceSlots.push(sSlot);\n }\n if (!observers) {\n this.observers = [Listener];\n this.observerSlots = [Listener.sources.length - 1];\n } else {\n observers.push(Listener);\n this.observerSlots.push(Listener.sources.length - 1);\n }\n }\n }\n if (runningTransition && Transition.sources.has(this)) return this.tValue;\n return this.value;\n}\nfunction writeSignal(node, value, isComp) {\n let current = Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value;\n if (!node.comparator || !node.comparator(current, value)) {\n if (Transition) {\n const TransitionRunning = Transition.running;\n if (TransitionRunning || !isComp && Transition.sources.has(node)) {\n Transition.sources.add(node);\n node.tValue = value;\n }\n if (!TransitionRunning) node.value = value;\n } else node.value = value;\n if (node.observers && node.observers.length) {\n runUpdates(() => {\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n const TransitionRunning = Transition && Transition.running;\n if (TransitionRunning && Transition.disposed.has(o)) continue;\n if (TransitionRunning ? !o.tState : !o.state) {\n if (o.pure) Updates.push(o);else Effects.push(o);\n if (o.observers) markDownstream(o);\n }\n if (!TransitionRunning) o.state = STALE;else o.tState = STALE;\n }\n if (Updates.length > 10e5) {\n Updates = [];\n if (IS_DEV) ;\n throw new Error();\n }\n }, false);\n }\n }\n return value;\n}\nfunction updateComputation(node) {\n if (!node.fn) return;\n cleanNode(node);\n const time = ExecCount;\n runComputation(node, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, time);\n if (Transition && !Transition.running && Transition.sources.has(node)) {\n queueMicrotask(() => {\n runUpdates(() => {\n Transition && (Transition.running = true);\n Listener = Owner = node;\n runComputation(node, node.tValue, time);\n Listener = Owner = null;\n }, false);\n });\n }\n}\nfunction runComputation(node, value, time) {\n let nextValue;\n const owner = Owner,\n listener = Listener;\n Listener = Owner = node;\n try {\n nextValue = node.fn(value);\n } catch (err) {\n if (node.pure) {\n if (Transition && Transition.running) {\n node.tState = STALE;\n node.tOwned && node.tOwned.forEach(cleanNode);\n node.tOwned = undefined;\n } else {\n node.state = STALE;\n node.owned && node.owned.forEach(cleanNode);\n node.owned = null;\n }\n }\n node.updatedAt = time + 1;\n return handleError(err);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n if (!node.updatedAt || node.updatedAt <= time) {\n if (node.updatedAt != null && \"observers\" in node) {\n writeSignal(node, nextValue, true);\n } else if (Transition && Transition.running && node.pure) {\n if (!Transition.sources.has(node)) node.value = nextValue;\n Transition.sources.add(node);\n node.tValue = nextValue;\n } else node.value = nextValue;\n node.updatedAt = time;\n }\n}\nfunction createComputation(fn, init, pure, state = STALE, options) {\n const c = {\n fn,\n state: state,\n updatedAt: null,\n owned: null,\n sources: null,\n sourceSlots: null,\n cleanups: null,\n value: init,\n owner: Owner,\n context: Owner ? Owner.context : null,\n pure\n };\n if (Transition && Transition.running) {\n c.state = 0;\n c.tState = state;\n }\n if (Owner === null) ;else if (Owner !== UNOWNED) {\n if (Transition && Transition.running && Owner.pure) {\n if (!Owner.tOwned) Owner.tOwned = [c];else Owner.tOwned.push(c);\n } else {\n if (!Owner.owned) Owner.owned = [c];else Owner.owned.push(c);\n }\n }\n if (ExternalSourceConfig && c.fn) {\n const sourceFn = c.fn;\n const [track, trigger] = createSignal(undefined, {\n equals: false\n });\n const ordinary = ExternalSourceConfig.factory(sourceFn, trigger);\n onCleanup(() => ordinary.dispose());\n let inTransition;\n let trackedOrdinary = false;\n const triggerInTransition = () => startTransition(trigger).then(() => {\n if (inTransition) {\n inTransition.dispose();\n inTransition = undefined;\n if (!trackedOrdinary) trigger();\n }\n });\n c.fn = x => {\n track();\n if (Transition && Transition.running) {\n if (!inTransition) inTransition = ExternalSourceConfig.factory(sourceFn, triggerInTransition);\n return inTransition.track(x);\n }\n trackedOrdinary = true;\n return ordinary.track(x);\n };\n }\n return c;\n}\nfunction runTop(node) {\n const runningTransition = Transition && Transition.running;\n if ((runningTransition ? node.tState : node.state) === 0) return;\n if ((runningTransition ? node.tState : node.state) === PENDING) return lookUpstream(node);\n if (node.suspense && untrack(node.suspense.inFallback)) return node.suspense.effects.push(node);\n const ancestors = [node];\n while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {\n if (runningTransition && Transition.disposed.has(node)) return;\n if (runningTransition ? node.tState : node.state) ancestors.push(node);\n }\n for (let i = ancestors.length - 1; i >= 0; i--) {\n node = ancestors[i];\n if (runningTransition) {\n let top = node,\n prev = ancestors[i + 1];\n while ((top = top.owner) && top !== prev) {\n if (Transition.disposed.has(top)) return;\n }\n }\n if ((runningTransition ? node.tState : node.state) === STALE) {\n updateComputation(node);\n } else if ((runningTransition ? node.tState : node.state) === PENDING) {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(node, ancestors[0]), false);\n Updates = updates;\n }\n }\n}\nfunction runUpdates(fn, init) {\n if (Updates) return fn();\n let wait = false;\n if (!init) Updates = [];\n if (Effects) wait = true;else Effects = [];\n ExecCount++;\n try {\n const res = fn();\n completeUpdates(wait);\n return res;\n } catch (err) {\n if (!wait) Effects = null;\n Updates = null;\n handleError(err);\n }\n}\nfunction completeUpdates(wait) {\n if (Updates) {\n if (Scheduler && Transition && Transition.running) scheduleQueue(Updates);else runQueue(Updates);\n Updates = null;\n }\n if (wait) return;\n let res;\n if (Transition) {\n if (!Transition.promises.size && !Transition.queue.size) {\n const sources = Transition.sources;\n const disposed = Transition.disposed;\n Effects.push.apply(Effects, Transition.effects);\n res = Transition.resolve;\n for (const e of Effects) {\n \"tState\" in e && (e.state = e.tState);\n delete e.tState;\n }\n Transition = null;\n runUpdates(() => {\n for (const d of disposed) cleanNode(d);\n for (const v of sources) {\n v.value = v.tValue;\n if (v.owned) {\n for (let i = 0, len = v.owned.length; i < len; i++) cleanNode(v.owned[i]);\n }\n if (v.tOwned) v.owned = v.tOwned;\n delete v.tValue;\n delete v.tOwned;\n v.tState = 0;\n }\n setTransPending(false);\n }, false);\n } else if (Transition.running) {\n Transition.running = false;\n Transition.effects.push.apply(Transition.effects, Effects);\n Effects = null;\n setTransPending(true);\n return;\n }\n }\n const e = Effects;\n Effects = null;\n if (e.length) runUpdates(() => runEffects(e), false);\n if (res) res();\n}\nfunction runQueue(queue) {\n for (let i = 0; i < queue.length; i++) runTop(queue[i]);\n}\nfunction scheduleQueue(queue) {\n for (let i = 0; i < queue.length; i++) {\n const item = queue[i];\n const tasks = Transition.queue;\n if (!tasks.has(item)) {\n tasks.add(item);\n Scheduler(() => {\n tasks.delete(item);\n runUpdates(() => {\n Transition.running = true;\n runTop(item);\n }, false);\n Transition && (Transition.running = false);\n });\n }\n }\n}\nfunction runUserEffects(queue) {\n let i,\n userLength = 0;\n for (i = 0; i < queue.length; i++) {\n const e = queue[i];\n if (!e.user) runTop(e);else queue[userLength++] = e;\n }\n if (sharedConfig.context) {\n if (sharedConfig.count) {\n sharedConfig.effects || (sharedConfig.effects = []);\n sharedConfig.effects.push(...queue.slice(0, userLength));\n return;\n }\n setHydrateContext();\n }\n if (sharedConfig.effects && (sharedConfig.done || !sharedConfig.count)) {\n queue = [...sharedConfig.effects, ...queue];\n userLength += sharedConfig.effects.length;\n delete sharedConfig.effects;\n }\n for (i = 0; i < userLength; i++) runTop(queue[i]);\n}\nfunction lookUpstream(node, ignore) {\n const runningTransition = Transition && Transition.running;\n if (runningTransition) node.tState = 0;else node.state = 0;\n for (let i = 0; i < node.sources.length; i += 1) {\n const source = node.sources[i];\n if (source.sources) {\n const state = runningTransition ? source.tState : source.state;\n if (state === STALE) {\n if (source !== ignore && (!source.updatedAt || source.updatedAt < ExecCount)) runTop(source);\n } else if (state === PENDING) lookUpstream(source, ignore);\n }\n }\n}\nfunction markDownstream(node) {\n const runningTransition = Transition && Transition.running;\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n if (runningTransition ? !o.tState : !o.state) {\n if (runningTransition) o.tState = PENDING;else o.state = PENDING;\n if (o.pure) Updates.push(o);else Effects.push(o);\n o.observers && markDownstream(o);\n }\n }\n}\nfunction cleanNode(node) {\n let i;\n if (node.sources) {\n while (node.sources.length) {\n const source = node.sources.pop(),\n index = node.sourceSlots.pop(),\n obs = source.observers;\n if (obs && obs.length) {\n const n = obs.pop(),\n s = source.observerSlots.pop();\n if (index < obs.length) {\n n.sourceSlots[s] = index;\n obs[index] = n;\n source.observerSlots[index] = s;\n }\n }\n }\n }\n if (node.tOwned) {\n for (i = node.tOwned.length - 1; i >= 0; i--) cleanNode(node.tOwned[i]);\n delete node.tOwned;\n }\n if (Transition && Transition.running && node.pure) {\n reset(node, true);\n } else if (node.owned) {\n for (i = node.owned.length - 1; i >= 0; i--) cleanNode(node.owned[i]);\n node.owned = null;\n }\n if (node.cleanups) {\n for (i = node.cleanups.length - 1; i >= 0; i--) node.cleanups[i]();\n node.cleanups = null;\n }\n if (Transition && Transition.running) node.tState = 0;else node.state = 0;\n}\nfunction reset(node, top) {\n if (!top) {\n node.tState = 0;\n Transition.disposed.add(node);\n }\n if (node.owned) {\n for (let i = 0; i < node.owned.length; i++) reset(node.owned[i]);\n }\n}\nfunction castError(err) {\n if (err instanceof Error) return err;\n return new Error(typeof err === \"string\" ? err : \"Unknown error\", {\n cause: err\n });\n}\nfunction runErrors(err, fns, owner) {\n try {\n for (const f of fns) f(err);\n } catch (e) {\n handleError(e, owner && owner.owner || null);\n }\n}\nfunction handleError(err, owner = Owner) {\n const fns = ERROR && owner && owner.context && owner.context[ERROR];\n const error = castError(err);\n if (!fns) throw error;\n if (Effects) Effects.push({\n fn() {\n runErrors(error, fns, owner);\n },\n state: STALE\n });else runErrors(error, fns, owner);\n}\nfunction resolveChildren(children) {\n if (typeof children === \"function\" && !children.length) return resolveChildren(children());\n if (Array.isArray(children)) {\n const results = [];\n for (let i = 0; i < children.length; i++) {\n const result = resolveChildren(children[i]);\n if (Array.isArray(result)) {\n if (result.length < 32768) results.push.apply(results, result);else for (let j = 0; j < result.length; j++) results.push(result[j]);\n } else {\n results.push(result);\n }\n }\n return results;\n }\n return children;\n}\nfunction createProvider(id, options) {\n return function provider(props) {\n let res;\n createRenderEffect(() => res = untrack(() => {\n Owner.context = {\n ...Owner.context,\n [id]: props.value\n };\n return children(() => props.children);\n }), undefined);\n return res;\n };\n}\nfunction onError(fn) {\n ERROR || (ERROR = Symbol(\"error\"));\n if (Owner === null) ;else if (Owner.context === null || !Owner.context[ERROR]) {\n Owner.context = {\n ...Owner.context,\n [ERROR]: [fn]\n };\n mutateContext(Owner, ERROR, [fn]);\n } else Owner.context[ERROR].push(fn);\n}\nfunction mutateContext(o, key, value) {\n if (o.owned) {\n for (let i = 0; i < o.owned.length; i++) {\n if (o.owned[i].context === o.context) mutateContext(o.owned[i], key, value);\n if (!o.owned[i].context) {\n o.owned[i].context = o.context;\n mutateContext(o.owned[i], key, value);\n } else if (!o.owned[i].context[key]) {\n o.owned[i].context[key] = value;\n mutateContext(o.owned[i], key, value);\n }\n }\n }\n}\n\nfunction observable(input) {\n return {\n subscribe(observer) {\n if (!(observer instanceof Object) || observer == null) {\n throw new TypeError(\"Expected the observer to be an object.\");\n }\n const handler = typeof observer === \"function\" ? observer : observer.next && observer.next.bind(observer);\n if (!handler) {\n return {\n unsubscribe() {}\n };\n }\n const dispose = createRoot(disposer => {\n createEffect(() => {\n const v = input();\n untrack(() => handler(v));\n });\n return disposer;\n });\n if (getOwner()) onCleanup(dispose);\n return {\n unsubscribe() {\n dispose();\n }\n };\n },\n [Symbol.observable || \"@@observable\"]() {\n return this;\n }\n };\n}\nfunction from(producer, initalValue = undefined) {\n const [s, set] = createSignal(initalValue, {\n equals: false\n });\n if (\"subscribe\" in producer) {\n const unsub = producer.subscribe(v => set(() => v));\n onCleanup(() => \"unsubscribe\" in unsub ? unsub.unsubscribe() : unsub());\n } else {\n const clean = producer(set);\n onCleanup(clean);\n }\n return s;\n}\n\nconst FALLBACK = Symbol(\"fallback\");\nfunction dispose(d) {\n for (let i = 0; i < d.length; i++) d[i]();\n}\nfunction mapArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n len = 0,\n indexes = mapFn.length > 1 ? [] : null;\n onCleanup(() => dispose(disposers));\n return () => {\n let newItems = list() || [],\n newLen = newItems.length,\n i,\n j;\n newItems[$TRACK];\n return untrack(() => {\n let newIndices, newIndicesNext, temp, tempdisposers, tempIndexes, start, end, newEnd, item;\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n indexes && (indexes = []);\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n }\n else if (len === 0) {\n mapped = new Array(newLen);\n for (j = 0; j < newLen; j++) {\n items[j] = newItems[j];\n mapped[j] = createRoot(mapper);\n }\n len = newLen;\n } else {\n temp = new Array(newLen);\n tempdisposers = new Array(newLen);\n indexes && (tempIndexes = new Array(newLen));\n for (start = 0, end = Math.min(len, newLen); start < end && items[start] === newItems[start]; start++);\n for (end = len - 1, newEnd = newLen - 1; end >= start && newEnd >= start && items[end] === newItems[newEnd]; end--, newEnd--) {\n temp[newEnd] = mapped[end];\n tempdisposers[newEnd] = disposers[end];\n indexes && (tempIndexes[newEnd] = indexes[end]);\n }\n newIndices = new Map();\n newIndicesNext = new Array(newEnd + 1);\n for (j = newEnd; j >= start; j--) {\n item = newItems[j];\n i = newIndices.get(item);\n newIndicesNext[j] = i === undefined ? -1 : i;\n newIndices.set(item, j);\n }\n for (i = start; i <= end; i++) {\n item = items[i];\n j = newIndices.get(item);\n if (j !== undefined && j !== -1) {\n temp[j] = mapped[i];\n tempdisposers[j] = disposers[i];\n indexes && (tempIndexes[j] = indexes[i]);\n j = newIndicesNext[j];\n newIndices.set(item, j);\n } else disposers[i]();\n }\n for (j = start; j < newLen; j++) {\n if (j in temp) {\n mapped[j] = temp[j];\n disposers[j] = tempdisposers[j];\n if (indexes) {\n indexes[j] = tempIndexes[j];\n indexes[j](j);\n }\n } else mapped[j] = createRoot(mapper);\n }\n mapped = mapped.slice(0, len = newLen);\n items = newItems.slice(0);\n }\n return mapped;\n });\n function mapper(disposer) {\n disposers[j] = disposer;\n if (indexes) {\n const [s, set] = createSignal(j);\n indexes[j] = set;\n return mapFn(newItems[j], s);\n }\n return mapFn(newItems[j]);\n }\n };\n}\nfunction indexArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n signals = [],\n len = 0,\n i;\n onCleanup(() => dispose(disposers));\n return () => {\n const newItems = list() || [],\n newLen = newItems.length;\n newItems[$TRACK];\n return untrack(() => {\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n signals = [];\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n return mapped;\n }\n if (items[0] === FALLBACK) {\n disposers[0]();\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n }\n for (i = 0; i < newLen; i++) {\n if (i < items.length && items[i] !== newItems[i]) {\n signals[i](() => newItems[i]);\n } else if (i >= items.length) {\n mapped[i] = createRoot(mapper);\n }\n }\n for (; i < items.length; i++) {\n disposers[i]();\n }\n len = signals.length = disposers.length = newLen;\n items = newItems.slice(0);\n return mapped = mapped.slice(0, len);\n });\n function mapper(disposer) {\n disposers[i] = disposer;\n const [s, set] = createSignal(newItems[i]);\n signals[i] = set;\n return mapFn(s, i);\n }\n };\n}\n\nlet hydrationEnabled = false;\nfunction enableHydration() {\n hydrationEnabled = true;\n}\nfunction createComponent(Comp, props) {\n if (hydrationEnabled) {\n if (sharedConfig.context) {\n const c = sharedConfig.context;\n setHydrateContext(nextHydrateContext());\n const r = untrack(() => Comp(props || {}));\n setHydrateContext(c);\n return r;\n }\n }\n return untrack(() => Comp(props || {}));\n}\nfunction trueFn() {\n return true;\n}\nconst propTraps = {\n get(_, property, receiver) {\n if (property === $PROXY) return receiver;\n return _.get(property);\n },\n has(_, property) {\n if (property === $PROXY) return true;\n return _.has(property);\n },\n set: trueFn,\n deleteProperty: trueFn,\n getOwnPropertyDescriptor(_, property) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n return _.get(property);\n },\n set: trueFn,\n deleteProperty: trueFn\n };\n },\n ownKeys(_) {\n return _.keys();\n }\n};\nfunction resolveSource(s) {\n return !(s = typeof s === \"function\" ? s() : s) ? {} : s;\n}\nfunction resolveSources() {\n for (let i = 0, length = this.length; i < length; ++i) {\n const v = this[i]();\n if (v !== undefined) return v;\n }\n}\nfunction mergeProps(...sources) {\n let proxy = false;\n for (let i = 0; i < sources.length; i++) {\n const s = sources[i];\n proxy = proxy || !!s && $PROXY in s;\n sources[i] = typeof s === \"function\" ? (proxy = true, createMemo(s)) : s;\n }\n if (SUPPORTS_PROXY && proxy) {\n return new Proxy({\n get(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n const v = resolveSource(sources[i])[property];\n if (v !== undefined) return v;\n }\n },\n has(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n if (property in resolveSource(sources[i])) return true;\n }\n return false;\n },\n keys() {\n const keys = [];\n for (let i = 0; i < sources.length; i++) keys.push(...Object.keys(resolveSource(sources[i])));\n return [...new Set(keys)];\n }\n }, propTraps);\n }\n const sourcesMap = {};\n const defined = Object.create(null);\n for (let i = sources.length - 1; i >= 0; i--) {\n const source = sources[i];\n if (!source) continue;\n const sourceKeys = Object.getOwnPropertyNames(source);\n for (let i = sourceKeys.length - 1; i >= 0; i--) {\n const key = sourceKeys[i];\n if (key === \"__proto__\" || key === \"constructor\") continue;\n const desc = Object.getOwnPropertyDescriptor(source, key);\n if (!defined[key]) {\n defined[key] = desc.get ? {\n enumerable: true,\n configurable: true,\n get: resolveSources.bind(sourcesMap[key] = [desc.get.bind(source)])\n } : desc.value !== undefined ? desc : undefined;\n } else {\n const sources = sourcesMap[key];\n if (sources) {\n if (desc.get) sources.push(desc.get.bind(source));else if (desc.value !== undefined) sources.push(() => desc.value);\n }\n }\n }\n }\n const target = {};\n const definedKeys = Object.keys(defined);\n for (let i = definedKeys.length - 1; i >= 0; i--) {\n const key = definedKeys[i],\n desc = defined[key];\n if (desc && desc.get) Object.defineProperty(target, key, desc);else target[key] = desc ? desc.value : undefined;\n }\n return target;\n}\nfunction splitProps(props, ...keys) {\n const len = keys.length;\n if (SUPPORTS_PROXY && $PROXY in props) {\n const blocked = len > 1 ? keys.flat() : keys[0];\n const claimed = new Set();\n const res = keys.map(k => {\n const owned = k.filter(property => !claimed.has(property) && (claimed.add(property), true));\n return new Proxy({\n get(property) {\n return owned.includes(property) ? props[property] : undefined;\n },\n has(property) {\n return owned.includes(property) && property in props;\n },\n keys() {\n return owned.filter(property => property in props);\n }\n }, propTraps);\n });\n res.push(new Proxy({\n get(property) {\n return blocked.includes(property) ? undefined : props[property];\n },\n has(property) {\n return blocked.includes(property) ? false : property in props;\n },\n keys() {\n return Object.keys(props).filter(k => !blocked.includes(k));\n }\n }, propTraps));\n return res;\n }\n const objects = [];\n for (let i = 0; i <= len; i++) {\n objects[i] = {};\n }\n for (const propName of Object.getOwnPropertyNames(props)) {\n let keyIndex = len;\n for (let i = 0; i < keys.length; i++) {\n if (keys[i].includes(propName)) {\n keyIndex = i;\n break;\n }\n }\n const desc = Object.getOwnPropertyDescriptor(props, propName);\n const isDefaultDesc = !desc.get && !desc.set && desc.enumerable && desc.writable && desc.configurable;\n isDefaultDesc ? objects[keyIndex][propName] = desc.value : Object.defineProperty(objects[keyIndex], propName, desc);\n }\n return objects;\n}\nfunction lazy(fn) {\n let comp;\n let p;\n const load = () => {\n if (!p) {\n const cur = p = fn();\n cur.then(mod => {\n comp = () => mod.default;\n }, () => {\n if (p === cur) p = undefined;\n });\n }\n return p;\n };\n const wrap = props => {\n const ctx = sharedConfig.context;\n if (ctx) {\n const [s, set] = createSignal();\n sharedConfig.count || (sharedConfig.count = 0);\n sharedConfig.count++;\n load().then(mod => {\n !sharedConfig.done && setHydrateContext(ctx);\n sharedConfig.count--;\n set(() => mod.default);\n setHydrateContext();\n }, err => {\n !sharedConfig.done && setHydrateContext(ctx);\n sharedConfig.count--;\n set(() => () => {\n throw err;\n });\n setHydrateContext();\n });\n comp = s;\n } else if (!comp) {\n const [s] = createResource(() => load().then(mod => mod.default));\n comp = s;\n onCleanup(() => comp = undefined);\n }\n let Comp;\n return createMemo(() => (Comp = comp?.()) ? untrack(() => {\n if (IS_DEV) ;\n if (!ctx || sharedConfig.done) return Comp(props);\n const c = sharedConfig.context;\n setHydrateContext(ctx);\n const r = Comp(props);\n setHydrateContext(c);\n return r;\n }) : \"\");\n };\n wrap.preload = () => load();\n return wrap;\n}\nlet counter = 0;\nfunction createUniqueId() {\n const ctx = sharedConfig.context;\n return ctx ? sharedConfig.getNextContextId() : `cl-${counter++}`;\n}\n\nconst narrowedError = name => `Stale read from <${name}>.`;\nfunction For(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(mapArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Index(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(indexArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Show(props) {\n const keyed = props.keyed;\n const conditionValue = createMemo(() => props.when, undefined, undefined);\n const condition = keyed ? conditionValue : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n return createMemo(() => {\n const c = condition();\n if (c) {\n const child = props.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn ? untrack(() => child(keyed ? c : () => {\n if (!untrack(condition)) throw narrowedError(\"Show\");\n return conditionValue();\n })) : child;\n }\n return props.fallback;\n }, undefined, undefined);\n}\nfunction Switch(props) {\n const chs = children(() => props.children);\n const switchFunc = createMemo(() => {\n const ch = chs();\n const mps = Array.isArray(ch) ? ch : [ch];\n let func = () => undefined;\n for (let i = 0; i < mps.length; i++) {\n const index = i;\n const mp = mps[i];\n const prevFunc = func;\n const conditionValue = createMemo(() => prevFunc() ? undefined : mp.when, undefined, undefined);\n const condition = mp.keyed ? conditionValue : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n func = () => prevFunc() || (condition() ? [index, conditionValue, mp] : undefined);\n }\n return func;\n });\n return createMemo(() => {\n const sel = switchFunc()();\n if (!sel) return props.fallback;\n const [index, conditionValue, mp] = sel;\n const child = mp.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn ? untrack(() => child(mp.keyed ? conditionValue() : () => {\n if (untrack(switchFunc)()?.[0] !== index) throw narrowedError(\"Match\");\n return conditionValue();\n })) : child;\n }, undefined, undefined);\n}\nfunction Match(props) {\n return props;\n}\nlet Errors;\nfunction resetErrorBoundaries() {\n Errors && [...Errors].forEach(fn => fn());\n}\nfunction ErrorBoundary(props) {\n let err;\n if (sharedConfig.context && sharedConfig.load) err = sharedConfig.load(sharedConfig.getContextId());\n const [errored, setErrored] = createSignal(err, undefined);\n Errors || (Errors = new Set());\n Errors.add(setErrored);\n onCleanup(() => Errors.delete(setErrored));\n return createMemo(() => {\n let e;\n if (e = errored()) {\n const f = props.fallback;\n return typeof f === \"function\" && f.length ? untrack(() => f(e, () => setErrored())) : f;\n }\n return catchError(() => props.children, setErrored);\n }, undefined, undefined);\n}\n\nconst suspenseListEquals = (a, b) => a.showContent === b.showContent && a.showFallback === b.showFallback;\nconst SuspenseListContext = /* #__PURE__ */createContext();\nfunction SuspenseList(props) {\n let [wrapper, setWrapper] = createSignal(() => ({\n inFallback: false\n })),\n show;\n const listContext = useContext(SuspenseListContext);\n const [registry, setRegistry] = createSignal([]);\n if (listContext) {\n show = listContext.register(createMemo(() => wrapper()().inFallback));\n }\n const resolved = createMemo(prev => {\n const reveal = props.revealOrder,\n tail = props.tail,\n {\n showContent = true,\n showFallback = true\n } = show ? show() : {},\n reg = registry(),\n reverse = reveal === \"backwards\";\n if (reveal === \"together\") {\n const all = reg.every(inFallback => !inFallback());\n const res = reg.map(() => ({\n showContent: all && showContent,\n showFallback\n }));\n res.inFallback = !all;\n return res;\n }\n let stop = false;\n let inFallback = prev.inFallback;\n const res = [];\n for (let i = 0, len = reg.length; i < len; i++) {\n const n = reverse ? len - i - 1 : i,\n s = reg[n]();\n if (!stop && !s) {\n res[n] = {\n showContent,\n showFallback\n };\n } else {\n const next = !stop;\n if (next) inFallback = true;\n res[n] = {\n showContent: next,\n showFallback: !tail || next && tail === \"collapsed\" ? showFallback : false\n };\n stop = true;\n }\n }\n if (!stop) inFallback = false;\n res.inFallback = inFallback;\n return res;\n }, {\n inFallback: false\n });\n setWrapper(() => resolved);\n return createComponent(SuspenseListContext.Provider, {\n value: {\n register: inFallback => {\n let index;\n setRegistry(registry => {\n index = registry.length;\n return [...registry, inFallback];\n });\n return createMemo(() => resolved()[index], undefined, {\n equals: suspenseListEquals\n });\n }\n },\n get children() {\n return props.children;\n }\n });\n}\nfunction Suspense(props) {\n let counter = 0,\n show,\n ctx,\n p,\n flicker,\n error;\n const [inFallback, setFallback] = createSignal(false),\n SuspenseContext = getSuspenseContext(),\n store = {\n increment: () => {\n if (++counter === 1) setFallback(true);\n },\n decrement: () => {\n if (--counter === 0) setFallback(false);\n },\n inFallback,\n effects: [],\n resolved: false\n },\n owner = getOwner();\n if (sharedConfig.context && sharedConfig.load) {\n const key = sharedConfig.getContextId();\n let ref = sharedConfig.load(key);\n if (ref) {\n if (typeof ref !== \"object\" || ref.s !== 1) p = ref;else sharedConfig.gather(key);\n }\n if (p && p !== \"$$f\") {\n const [s, set] = createSignal(undefined, {\n equals: false\n });\n flicker = s;\n p.then(() => {\n if (sharedConfig.done) return set();\n sharedConfig.gather(key);\n setHydrateContext(ctx);\n set();\n setHydrateContext();\n }, err => {\n error = err;\n set();\n });\n }\n }\n const listContext = useContext(SuspenseListContext);\n if (listContext) show = listContext.register(store.inFallback);\n let dispose;\n onCleanup(() => dispose && dispose());\n return createComponent(SuspenseContext.Provider, {\n value: store,\n get children() {\n return createMemo(() => {\n if (error) throw error;\n ctx = sharedConfig.context;\n if (flicker) {\n flicker();\n return flicker = undefined;\n }\n if (ctx && p === \"$$f\") setHydrateContext();\n const rendered = createMemo(() => props.children);\n return createMemo(prev => {\n const inFallback = store.inFallback(),\n {\n showContent = true,\n showFallback = true\n } = show ? show() : {};\n if ((!inFallback || p && p !== \"$$f\") && showContent) {\n store.resolved = true;\n dispose && dispose();\n dispose = ctx = p = undefined;\n resumeEffects(store.effects);\n return rendered();\n }\n if (!showFallback) return;\n if (dispose) return prev;\n return createRoot(disposer => {\n dispose = disposer;\n if (ctx) {\n setHydrateContext({\n id: ctx.id + \"F\",\n count: 0\n });\n ctx = undefined;\n }\n return props.fallback;\n }, owner);\n });\n });\n }\n });\n}\n\nconst DEV = undefined;\n\nexport { $DEVCOMP, $PROXY, $TRACK, DEV, ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, batch, cancelCallback, catchError, children, createComponent, createComputed, createContext, createDeferred, createEffect, createMemo, createReaction, createRenderEffect, createResource, createRoot, createSelector, createSignal, createUniqueId, enableExternalSource, enableHydration, enableScheduling, equalFn, from, getListener, getOwner, indexArray, lazy, mapArray, mergeProps, observable, on, onCleanup, onError, onMount, requestCallback, resetErrorBoundaries, runWithOwner, sharedConfig, splitProps, startTransition, untrack, useContext, useTransition };\n","import { createMemo, sharedConfig, createRenderEffect, createRoot, untrack, splitProps, getOwner, createEffect, runWithOwner, createSignal, onCleanup, enableHydration } from 'solid-js';\nexport { ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, createComponent, createRenderEffect as effect, getOwner, mergeProps, untrack } from 'solid-js';\n\nconst booleans = [\"allowfullscreen\", \"async\", \"alpha\",\n\"autofocus\",\n\"autoplay\", \"checked\", \"controls\", \"default\", \"disabled\", \"formnovalidate\", \"hidden\",\n\"indeterminate\", \"inert\",\n\"ismap\", \"loop\", \"multiple\", \"muted\", \"nomodule\", \"novalidate\", \"open\", \"playsinline\", \"readonly\", \"required\", \"reversed\", \"seamless\",\n\"selected\", \"adauctionheaders\",\n\"browsingtopics\",\n\"credentialless\",\n\"defaultchecked\", \"defaultmuted\", \"defaultselected\", \"defer\", \"disablepictureinpicture\", \"disableremoteplayback\", \"preservespitch\",\n\"shadowrootclonable\", \"shadowrootcustomelementregistry\",\n\"shadowrootdelegatesfocus\", \"shadowrootserializable\",\n\"sharedstoragewritable\"\n];\nconst Properties = /*#__PURE__*/new Set([\n\"className\", \"value\",\n\"readOnly\", \"noValidate\", \"formNoValidate\", \"isMap\", \"noModule\", \"playsInline\", \"adAuctionHeaders\",\n\"allowFullscreen\", \"browsingTopics\",\n\"defaultChecked\", \"defaultMuted\", \"defaultSelected\", \"disablePictureInPicture\", \"disableRemotePlayback\", \"preservesPitch\", \"shadowRootClonable\", \"shadowRootCustomElementRegistry\",\n\"shadowRootDelegatesFocus\", \"shadowRootSerializable\",\n\"sharedStorageWritable\",\n...booleans]);\nconst ChildProperties = /*#__PURE__*/new Set([\"innerHTML\", \"textContent\", \"innerText\", \"children\"]);\nconst Aliases = /*#__PURE__*/Object.assign(Object.create(null), {\n className: \"class\",\n htmlFor: \"for\"\n});\nconst PropAliases = /*#__PURE__*/Object.assign(Object.create(null), {\n class: \"className\",\n novalidate: {\n $: \"noValidate\",\n FORM: 1\n },\n formnovalidate: {\n $: \"formNoValidate\",\n BUTTON: 1,\n INPUT: 1\n },\n ismap: {\n $: \"isMap\",\n IMG: 1\n },\n nomodule: {\n $: \"noModule\",\n SCRIPT: 1\n },\n playsinline: {\n $: \"playsInline\",\n VIDEO: 1\n },\n readonly: {\n $: \"readOnly\",\n INPUT: 1,\n TEXTAREA: 1\n },\n adauctionheaders: {\n $: \"adAuctionHeaders\",\n IFRAME: 1\n },\n allowfullscreen: {\n $: \"allowFullscreen\",\n IFRAME: 1\n },\n browsingtopics: {\n $: \"browsingTopics\",\n IMG: 1\n },\n defaultchecked: {\n $: \"defaultChecked\",\n INPUT: 1\n },\n defaultmuted: {\n $: \"defaultMuted\",\n AUDIO: 1,\n VIDEO: 1\n },\n defaultselected: {\n $: \"defaultSelected\",\n OPTION: 1\n },\n disablepictureinpicture: {\n $: \"disablePictureInPicture\",\n VIDEO: 1\n },\n disableremoteplayback: {\n $: \"disableRemotePlayback\",\n AUDIO: 1,\n VIDEO: 1\n },\n preservespitch: {\n $: \"preservesPitch\",\n AUDIO: 1,\n VIDEO: 1\n },\n shadowrootclonable: {\n $: \"shadowRootClonable\",\n TEMPLATE: 1\n },\n shadowrootdelegatesfocus: {\n $: \"shadowRootDelegatesFocus\",\n TEMPLATE: 1\n },\n shadowrootserializable: {\n $: \"shadowRootSerializable\",\n TEMPLATE: 1\n },\n sharedstoragewritable: {\n $: \"sharedStorageWritable\",\n IFRAME: 1,\n IMG: 1\n }\n});\nfunction getPropAlias(prop, tagName) {\n const a = PropAliases[prop];\n return typeof a === \"object\" ? a[tagName] ? a[\"$\"] : undefined : a;\n}\nconst DelegatedEvents = /*#__PURE__*/new Set([\"beforeinput\", \"click\", \"dblclick\", \"contextmenu\", \"focusin\", \"focusout\", \"input\", \"keydown\", \"keyup\", \"mousedown\", \"mousemove\", \"mouseout\", \"mouseover\", \"mouseup\", \"pointerdown\", \"pointermove\", \"pointerout\", \"pointerover\", \"pointerup\", \"touchend\", \"touchmove\", \"touchstart\"]);\nconst SVGElements = /*#__PURE__*/new Set([\n\"altGlyph\", \"altGlyphDef\", \"altGlyphItem\", \"animate\", \"animateColor\", \"animateMotion\", \"animateTransform\", \"circle\", \"clipPath\", \"color-profile\", \"cursor\", \"defs\", \"desc\", \"ellipse\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \"feDistantLight\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncB\", \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \"feSpotLight\", \"feTile\", \"feTurbulence\", \"filter\", \"font\", \"font-face\", \"font-face-format\", \"font-face-name\", \"font-face-src\", \"font-face-uri\", \"foreignObject\", \"g\", \"glyph\", \"glyphRef\", \"hkern\", \"image\", \"line\", \"linearGradient\", \"marker\", \"mask\", \"metadata\", \"missing-glyph\", \"mpath\", \"path\", \"pattern\", \"polygon\", \"polyline\", \"radialGradient\", \"rect\",\n\"set\", \"stop\",\n\"svg\", \"switch\", \"symbol\", \"text\", \"textPath\",\n\"tref\", \"tspan\", \"use\", \"view\", \"vkern\"]);\nconst SVGNamespace = {\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\"\n};\nconst DOMElements = /*#__PURE__*/new Set([\"html\", \"base\", \"head\", \"link\", \"meta\", \"style\", \"title\", \"body\", \"address\", \"article\", \"aside\", \"footer\", \"header\", \"main\", \"nav\", \"section\", \"body\", \"blockquote\", \"dd\", \"div\", \"dl\", \"dt\", \"figcaption\", \"figure\", \"hr\", \"li\", \"ol\", \"p\", \"pre\", \"ul\", \"a\", \"abbr\", \"b\", \"bdi\", \"bdo\", \"br\", \"cite\", \"code\", \"data\", \"dfn\", \"em\", \"i\", \"kbd\", \"mark\", \"q\", \"rp\", \"rt\", \"ruby\", \"s\", \"samp\", \"small\", \"span\", \"strong\", \"sub\", \"sup\", \"time\", \"u\", \"var\", \"wbr\", \"area\", \"audio\", \"img\", \"map\", \"track\", \"video\", \"embed\", \"iframe\", \"object\", \"param\", \"picture\", \"portal\", \"source\", \"svg\", \"math\", \"canvas\", \"noscript\", \"script\", \"del\", \"ins\", \"caption\", \"col\", \"colgroup\", \"table\", \"tbody\", \"td\", \"tfoot\", \"th\", \"thead\", \"tr\", \"button\", \"datalist\", \"fieldset\", \"form\", \"input\", \"label\", \"legend\", \"meter\", \"optgroup\", \"option\", \"output\", \"progress\", \"select\", \"textarea\", \"details\", \"dialog\", \"menu\", \"summary\", \"details\", \"slot\", \"template\", \"acronym\", \"applet\", \"basefont\", \"bgsound\", \"big\", \"blink\", \"center\", \"content\", \"dir\", \"font\", \"frame\", \"frameset\", \"hgroup\", \"image\", \"keygen\", \"marquee\", \"menuitem\", \"nobr\", \"noembed\", \"noframes\", \"plaintext\", \"rb\", \"rtc\", \"shadow\", \"spacer\", \"strike\", \"tt\", \"xmp\", \"a\", \"abbr\", \"acronym\", \"address\", \"applet\", \"area\", \"article\", \"aside\", \"audio\", \"b\", \"base\", \"basefont\", \"bdi\", \"bdo\", \"bgsound\", \"big\", \"blink\", \"blockquote\", \"body\", \"br\", \"button\", \"canvas\", \"caption\", \"center\", \"cite\", \"code\", \"col\", \"colgroup\", \"content\", \"data\", \"datalist\", \"dd\", \"del\", \"details\", \"dfn\", \"dialog\", \"dir\", \"div\", \"dl\", \"dt\", \"em\", \"embed\", \"fieldset\", \"figcaption\", \"figure\", \"font\", \"footer\", \"form\", \"frame\", \"frameset\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"i\", \"iframe\", \"image\", \"img\", \"input\", \"ins\", \"kbd\", \"keygen\", \"label\", \"legend\", \"li\", \"link\", \"main\", \"map\", \"mark\", \"marquee\", \"menu\", \"menuitem\", \"meta\", \"meter\", \"nav\", \"nobr\", \"noembed\", \"noframes\", \"noscript\", \"object\", \"ol\", \"optgroup\", \"option\", \"output\", \"p\", \"param\", \"picture\", \"plaintext\", \"portal\", \"pre\", \"progress\", \"q\", \"rb\", \"rp\", \"rt\", \"rtc\", \"ruby\", \"s\", \"samp\", \"script\", \"section\", \"select\", \"shadow\", \"slot\", \"small\", \"source\", \"spacer\", \"span\", \"strike\", \"strong\", \"style\", \"sub\", \"summary\", \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"time\", \"title\", \"tr\", \"track\", \"tt\", \"u\", \"ul\", \"var\", \"video\", \"wbr\", \"xmp\", \"input\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\n\"webview\",\n\"isindex\", \"listing\", \"multicol\", \"nextid\", \"noindex\", \"search\"]);\n\nconst memo = fn => createMemo(() => fn());\n\nfunction reconcileArrays(parentNode, a, b) {\n let bLength = b.length,\n aEnd = a.length,\n bEnd = bLength,\n aStart = 0,\n bStart = 0,\n after = a[aEnd - 1].nextSibling,\n map = null;\n while (aStart < aEnd || bStart < bEnd) {\n if (a[aStart] === b[bStart]) {\n aStart++;\n bStart++;\n continue;\n }\n while (a[aEnd - 1] === b[bEnd - 1]) {\n aEnd--;\n bEnd--;\n }\n if (aEnd === aStart) {\n const node = bEnd < bLength ? bStart ? b[bStart - 1].nextSibling : b[bEnd - bStart] : after;\n while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);\n } else if (bEnd === bStart) {\n while (aStart < aEnd) {\n if (!map || !map.has(a[aStart])) a[aStart].remove();\n aStart++;\n }\n } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {\n const node = a[--aEnd].nextSibling;\n parentNode.insertBefore(b[bStart++], a[aStart++].nextSibling);\n parentNode.insertBefore(b[--bEnd], node);\n a[aEnd] = b[bEnd];\n } else {\n if (!map) {\n map = new Map();\n let i = bStart;\n while (i < bEnd) map.set(b[i], i++);\n }\n const index = map.get(a[aStart]);\n if (index != null) {\n if (bStart < index && index < bEnd) {\n let i = aStart,\n sequence = 1,\n t;\n while (++i < aEnd && i < bEnd) {\n if ((t = map.get(a[i])) == null || t !== index + sequence) break;\n sequence++;\n }\n if (sequence > index - bStart) {\n const node = a[aStart];\n while (bStart < index) parentNode.insertBefore(b[bStart++], node);\n } else parentNode.replaceChild(b[bStart++], a[aStart++]);\n } else aStart++;\n } else a[aStart++].remove();\n }\n }\n}\n\nconst $$EVENTS = \"_$DX_DELEGATE\";\nfunction render(code, element, init, options = {}) {\n let disposer;\n createRoot(dispose => {\n disposer = dispose;\n element === document ? code() : insert(element, code(), !init && element.firstChild ? null : undefined, init);\n }, options.owner);\n return () => {\n disposer();\n element.textContent = \"\";\n };\n}\nfunction template(html, isImportNode, isSVG, isMathML) {\n let node;\n const create = () => {\n const t = isMathML ? document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"template\") : document.createElement(\"template\");\n t.innerHTML = html;\n return isSVG ? t.content.firstChild.firstChild : isMathML ? t.firstChild : t.content.firstChild;\n };\n const fn = isImportNode ? () => untrack(() => document.importNode(node || (node = create()), true)) : () => (node || (node = create())).cloneNode(true);\n fn.cloneNode = fn;\n return fn;\n}\nfunction delegateEvents(eventNames, document = window.document) {\n const e = document[$$EVENTS] || (document[$$EVENTS] = new Set());\n for (let i = 0, l = eventNames.length; i < l; i++) {\n const name = eventNames[i];\n if (!e.has(name)) {\n e.add(name);\n document.addEventListener(name, eventHandler);\n }\n }\n}\nfunction clearDelegatedEvents(document = window.document) {\n if (document[$$EVENTS]) {\n for (let name of document[$$EVENTS].keys()) document.removeEventListener(name, eventHandler);\n delete document[$$EVENTS];\n }\n}\nfunction setProperty(node, name, value) {\n if (isHydrating(node)) return;\n if ((name === \"value\" || name === \"defaultValue\") && (node.nodeName === \"INPUT\" || node.nodeName === \"TEXTAREA\")) node[name] = value ?? \"\";else node[name] = value;\n}\nfunction setAttribute(node, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(name);else node.setAttribute(name, value);\n}\nfunction setAttributeNS(node, namespace, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttributeNS(namespace, name);else node.setAttributeNS(namespace, name, value);\n}\nfunction setBoolAttribute(node, name, value) {\n if (isHydrating(node)) return;\n value ? node.setAttribute(name, \"\") : node.removeAttribute(name);\n}\nfunction className(node, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(\"class\");else node.className = value;\n}\nfunction addEventListener(node, name, handler, delegate) {\n if (delegate) {\n if (Array.isArray(handler)) {\n node[`$$${name}`] = handler[0];\n node[`$$${name}Data`] = handler[1];\n } else node[`$$${name}`] = handler;\n } else if (Array.isArray(handler)) {\n const handlerFn = handler[0];\n node.addEventListener(name, handler[0] = e => handlerFn.call(node, handler[1], e));\n } else node.addEventListener(name, handler, typeof handler !== \"function\" && handler);\n}\nfunction classList(node, value, prev = {}) {\n const classKeys = Object.keys(value || {}),\n prevKeys = Object.keys(prev);\n let i, len;\n for (i = 0, len = prevKeys.length; i < len; i++) {\n const key = prevKeys[i];\n if (!key || key === \"undefined\" || value[key]) continue;\n toggleClassKey(node, key, false);\n delete prev[key];\n }\n for (i = 0, len = classKeys.length; i < len; i++) {\n const key = classKeys[i],\n classValue = !!value[key];\n if (!key || key === \"undefined\" || prev[key] === classValue || !classValue) continue;\n toggleClassKey(node, key, true);\n prev[key] = classValue;\n }\n return prev;\n}\nfunction style(node, value, prev) {\n if (!value) return prev ? setAttribute(node, \"style\") : value;\n const nodeStyle = node.style;\n if (typeof value === \"string\") return nodeStyle.cssText = value;\n typeof prev === \"string\" && (nodeStyle.cssText = prev = undefined);\n prev || (prev = {});\n value || (value = {});\n let v, s;\n for (s in prev) {\n value[s] == null && nodeStyle.removeProperty(s);\n delete prev[s];\n }\n for (s in value) {\n v = value[s];\n if (v !== prev[s]) {\n nodeStyle.setProperty(s, v);\n prev[s] = v;\n }\n }\n return prev;\n}\nfunction setStyleProperty(node, name, value) {\n value != null ? node.style.setProperty(name, value) : node.style.removeProperty(name);\n}\nfunction spread(node, props = {}, isSVG, skipChildren) {\n const prevProps = {};\n if (!skipChildren) {\n createRenderEffect(() => prevProps.children = insertExpression(node, props.children, prevProps.children));\n }\n createRenderEffect(() => typeof props.ref === \"function\" && use(props.ref, node));\n createRenderEffect(() => assign(node, props, isSVG, true, prevProps, true));\n return prevProps;\n}\nfunction dynamicProperty(props, key) {\n const src = props[key];\n Object.defineProperty(props, key, {\n get() {\n return src();\n },\n enumerable: true\n });\n return props;\n}\nfunction use(fn, element, arg) {\n return untrack(() => fn(element, arg));\n}\nfunction insert(parent, accessor, marker, initial) {\n if (marker !== undefined && !initial) initial = [];\n if (typeof accessor !== \"function\") return insertExpression(parent, accessor, initial, marker);\n createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);\n}\nfunction assign(node, props, isSVG, skipChildren, prevProps = {}, skipRef = false) {\n props || (props = {});\n for (const prop in prevProps) {\n if (!(prop in props)) {\n if (prop === \"children\") continue;\n prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef, props);\n }\n }\n for (const prop in props) {\n if (prop === \"children\") {\n if (!skipChildren) insertExpression(node, props.children);\n continue;\n }\n const value = props[prop];\n prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef, props);\n }\n}\nfunction hydrate$1(code, element, options = {}) {\n if (globalThis._$HY.done) return render(code, element, [...element.childNodes], options);\n sharedConfig.completed = globalThis._$HY.completed;\n sharedConfig.events = globalThis._$HY.events;\n sharedConfig.load = id => globalThis._$HY.r[id];\n sharedConfig.has = id => id in globalThis._$HY.r;\n sharedConfig.gather = root => gatherHydratable(element, root);\n sharedConfig.registry = new Map();\n sharedConfig.context = {\n id: options.renderId || \"\",\n count: 0\n };\n try {\n gatherHydratable(element, options.renderId);\n return render(code, element, [...element.childNodes], options);\n } finally {\n sharedConfig.context = null;\n }\n}\nfunction getNextElement(template) {\n let node,\n key,\n hydrating = isHydrating();\n if (!hydrating || !(node = sharedConfig.registry.get(key = getHydrationKey()))) {\n return template();\n }\n if (sharedConfig.completed) sharedConfig.completed.add(node);\n sharedConfig.registry.delete(key);\n return node;\n}\nfunction getNextMatch(el, nodeName) {\n while (el && el.localName !== nodeName) el = el.nextSibling;\n return el;\n}\nfunction getNextMarker(start) {\n let end = start,\n count = 0,\n current = [];\n if (isHydrating(start)) {\n while (end) {\n if (end.nodeType === 8) {\n const v = end.nodeValue;\n if (v === \"$\") count++;else if (v === \"/\") {\n if (count === 0) return [end, current];\n count--;\n }\n }\n current.push(end);\n end = end.nextSibling;\n }\n }\n return [end, current];\n}\nfunction runHydrationEvents() {\n if (sharedConfig.events && !sharedConfig.events.queued) {\n queueMicrotask(() => {\n const {\n completed,\n events\n } = sharedConfig;\n if (!events) return;\n events.queued = false;\n while (events.length) {\n const [el, e] = events[0];\n if (!completed.has(el)) return;\n events.shift();\n eventHandler(e);\n }\n if (sharedConfig.done) {\n sharedConfig.events = _$HY.events = null;\n sharedConfig.completed = _$HY.completed = null;\n }\n });\n sharedConfig.events.queued = true;\n }\n}\nfunction isHydrating(node) {\n return !!sharedConfig.context && !sharedConfig.done && (!node || node.isConnected);\n}\nfunction toPropertyName(name) {\n return name.toLowerCase().replace(/-([a-z])/g, (_, w) => w.toUpperCase());\n}\nfunction toggleClassKey(node, key, value) {\n const classNames = key.trim().split(/\\s+/);\n for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);\n}\nfunction assignProp(node, prop, value, prev, isSVG, skipRef, props) {\n let isCE, isProp, isChildProp, propAlias, forceProp;\n if (prop === \"style\") return style(node, value, prev);\n if (prop === \"classList\") return classList(node, value, prev);\n if (value === prev) return prev;\n if (prop === \"ref\") {\n if (!skipRef) value(node);\n } else if (prop.slice(0, 3) === \"on:\") {\n const e = prop.slice(3);\n prev && node.removeEventListener(e, prev, typeof prev !== \"function\" && prev);\n value && node.addEventListener(e, value, typeof value !== \"function\" && value);\n } else if (prop.slice(0, 10) === \"oncapture:\") {\n const e = prop.slice(10);\n prev && node.removeEventListener(e, prev, true);\n value && node.addEventListener(e, value, true);\n } else if (prop.slice(0, 2) === \"on\") {\n const name = prop.slice(2).toLowerCase();\n const delegate = DelegatedEvents.has(name);\n if (!delegate && prev) {\n const h = Array.isArray(prev) ? prev[0] : prev;\n node.removeEventListener(name, h);\n }\n if (delegate || value) {\n addEventListener(node, name, value, delegate);\n delegate && delegateEvents([name]);\n }\n } else if (prop.slice(0, 5) === \"attr:\") {\n setAttribute(node, prop.slice(5), value);\n } else if (prop.slice(0, 5) === \"bool:\") {\n setBoolAttribute(node, prop.slice(5), value);\n } else if ((forceProp = prop.slice(0, 5) === \"prop:\") || (isChildProp = ChildProperties.has(prop)) || !isSVG && ((propAlias = getPropAlias(prop, node.tagName)) || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes(\"-\") || \"is\" in props)) {\n if (forceProp) {\n prop = prop.slice(5);\n isProp = true;\n } else if (isHydrating(node)) return value;\n if (prop === \"class\" || prop === \"className\") className(node, value);else if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else if ((prop === \"value\" || prop === \"defaultValue\") && (node.nodeName === \"INPUT\" || node.nodeName === \"TEXTAREA\"))\n node[propAlias || prop] = value ?? \"\";else node[propAlias || prop] = value;\n } else {\n const ns = isSVG && prop.indexOf(\":\") > -1 && SVGNamespace[prop.split(\":\")[0]];\n if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);\n }\n return value;\n}\nfunction eventHandler(e) {\n if (sharedConfig.registry && sharedConfig.events) {\n if (sharedConfig.events.find(([el, ev]) => ev === e)) return;\n }\n let node = e.target;\n const key = `$$${e.type}`;\n const oriTarget = e.target;\n const oriCurrentTarget = e.currentTarget;\n const retarget = value => Object.defineProperty(e, \"target\", {\n configurable: true,\n value\n });\n const handleNode = () => {\n const handler = node[key];\n if (handler && !node.disabled) {\n const data = node[`${key}Data`];\n data !== undefined ? handler.call(node, data, e) : handler.call(node, e);\n if (e.cancelBubble) return;\n }\n node.host && typeof node.host !== \"string\" && !node.host._$host && node.contains(e.target) && retarget(node.host);\n return true;\n };\n const walkUpTree = () => {\n while (handleNode() && (node = node._$host || node.parentNode || node.host));\n };\n Object.defineProperty(e, \"currentTarget\", {\n configurable: true,\n get() {\n return node || document;\n }\n });\n if (sharedConfig.registry && !sharedConfig.done) sharedConfig.done = _$HY.done = true;\n try {\n if (e.composedPath) {\n const path = e.composedPath();\n retarget(path[0]);\n for (let i = 0; i < path.length - 2; i++) {\n node = path[i];\n if (!handleNode()) break;\n if (node._$host) {\n node = node._$host;\n walkUpTree();\n break;\n }\n if (node.parentNode === oriCurrentTarget) {\n break;\n }\n }\n }\n else walkUpTree();\n retarget(oriTarget);\n } finally {\n e = node = null;\n }\n}\nfunction insertExpression(parent, value, current, marker, unwrapArray) {\n const hydrating = isHydrating(parent);\n if (hydrating) {\n !current && (current = [...parent.childNodes]);\n let cleaned = [];\n for (let i = 0; i < current.length; i++) {\n const node = current[i];\n if (node.nodeType === 8 && node.data.slice(0, 2) === \"!$\") node.remove();else cleaned.push(node);\n }\n current = cleaned;\n }\n while (typeof current === \"function\") current = current();\n if (value === current) return current;\n const t = typeof value,\n multi = marker !== undefined;\n parent = multi && current[0] && current[0].parentNode || parent;\n if (t === \"string\" || t === \"number\") {\n if (hydrating) return current;\n if (t === \"number\") {\n value = value.toString();\n if (value === current) return current;\n }\n if (multi) {\n let node = current[0];\n if (node && node.nodeType === 3) {\n node.data !== value && (node.data = value);\n } else node = document.createTextNode(value);\n current = cleanChildren(parent, current, marker, node);\n } else {\n if (current !== \"\" && typeof current === \"string\") {\n current = parent.firstChild.data = value;\n } else current = parent.textContent = value;\n }\n } else if (value == null || t === \"boolean\") {\n if (hydrating) return current;\n current = cleanChildren(parent, current, marker);\n } else if (t === \"function\") {\n createRenderEffect(() => {\n let v = value();\n while (typeof v === \"function\") v = v();\n current = insertExpression(parent, v, current, marker);\n });\n return () => current;\n } else if (Array.isArray(value)) {\n const array = [];\n const currentArray = current && Array.isArray(current);\n if (normalizeIncomingArray(array, value, current, unwrapArray)) {\n createRenderEffect(() => current = insertExpression(parent, array, current, marker, true));\n return () => current;\n }\n if (hydrating) {\n if (!array.length) return current;\n if (marker === undefined) return current = [...parent.childNodes];\n let node = array[0];\n if (node.parentNode !== parent) return current;\n const nodes = [node];\n while ((node = node.nextSibling) !== marker) nodes.push(node);\n return current = nodes;\n }\n if (array.length === 0) {\n current = cleanChildren(parent, current, marker);\n if (multi) return current;\n } else if (currentArray) {\n if (current.length === 0) {\n appendNodes(parent, array, marker);\n } else reconcileArrays(parent, current, array);\n } else {\n current && cleanChildren(parent);\n appendNodes(parent, array);\n }\n current = array;\n } else if (value.nodeType) {\n if (hydrating && value.parentNode) return current = multi ? [value] : value;\n if (Array.isArray(current)) {\n if (multi) return current = cleanChildren(parent, current, marker, value);\n cleanChildren(parent, current, null, value);\n } else if (current == null || current === \"\" || !parent.firstChild) {\n parent.appendChild(value);\n } else parent.replaceChild(value, parent.firstChild);\n current = value;\n } else ;\n return current;\n}\nfunction normalizeIncomingArray(normalized, array, current, unwrap) {\n let dynamic = false;\n for (let i = 0, len = array.length; i < len; i++) {\n let item = array[i],\n prev = current && current[normalized.length],\n t;\n if (item == null || item === true || item === false) ; else if ((t = typeof item) === \"object\" && item.nodeType) {\n normalized.push(item);\n } else if (Array.isArray(item)) {\n dynamic = normalizeIncomingArray(normalized, item, prev) || dynamic;\n } else if (t === \"function\") {\n if (unwrap) {\n while (typeof item === \"function\") item = item();\n dynamic = normalizeIncomingArray(normalized, Array.isArray(item) ? item : [item], Array.isArray(prev) ? prev : [prev]) || dynamic;\n } else {\n normalized.push(item);\n dynamic = true;\n }\n } else {\n const value = String(item);\n if (prev && prev.nodeType === 3 && prev.data === value) normalized.push(prev);else normalized.push(document.createTextNode(value));\n }\n }\n return dynamic;\n}\nfunction appendNodes(parent, array, marker = null) {\n for (let i = 0, len = array.length; i < len; i++) parent.insertBefore(array[i], marker);\n}\nfunction cleanChildren(parent, current, marker, replacement) {\n if (marker === undefined) return parent.textContent = \"\";\n const node = replacement || document.createTextNode(\"\");\n if (current.length) {\n let inserted = false;\n for (let i = current.length - 1; i >= 0; i--) {\n const el = current[i];\n if (node !== el) {\n const isParent = el.parentNode === parent;\n if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && el.remove();\n } else inserted = true;\n }\n } else parent.insertBefore(node, marker);\n return [node];\n}\nfunction gatherHydratable(element, root) {\n const templates = element.querySelectorAll(`*[data-hk]`);\n for (let i = 0; i < templates.length; i++) {\n const node = templates[i];\n const key = node.getAttribute(\"data-hk\");\n if ((!root || key.startsWith(root)) && !sharedConfig.registry.has(key)) sharedConfig.registry.set(key, node);\n }\n}\nfunction getHydrationKey() {\n return sharedConfig.getNextContextId();\n}\nfunction NoHydration(props) {\n return sharedConfig.context ? undefined : props.children;\n}\nfunction Hydration(props) {\n return props.children;\n}\nconst voidFn = () => undefined;\nconst RequestContext = Symbol();\nfunction innerHTML(parent, content) {\n !sharedConfig.context && (parent.innerHTML = content);\n}\n\nfunction throwInBrowser(func) {\n const err = new Error(`${func.name} is not supported in the browser, returning undefined`);\n console.error(err);\n}\nfunction renderToString(fn, options) {\n throwInBrowser(renderToString);\n}\nfunction renderToStringAsync(fn, options) {\n throwInBrowser(renderToStringAsync);\n}\nfunction renderToStream(fn, options) {\n throwInBrowser(renderToStream);\n}\nfunction ssr(template, ...nodes) {}\nfunction ssrElement(name, props, children, needsId) {}\nfunction ssrClassList(value) {}\nfunction ssrStyle(value) {}\nfunction ssrAttribute(key, value) {}\nfunction ssrHydrationKey() {}\nfunction resolveSSRNode(node) {}\nfunction escape(html) {}\nfunction ssrSpread(props, isSVG, skipChildren) {}\n\nconst isServer = false;\nconst isDev = false;\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\nfunction createElement(tagName, isSVG = false, is = undefined) {\n return isSVG ? document.createElementNS(SVG_NAMESPACE, tagName) : document.createElement(tagName, {\n is\n });\n}\nconst hydrate = (...args) => {\n enableHydration();\n return hydrate$1(...args);\n};\nfunction Portal(props) {\n const {\n useShadow\n } = props,\n marker = document.createTextNode(\"\"),\n mount = () => props.mount || document.body,\n owner = getOwner();\n let content;\n let hydrating = !!sharedConfig.context;\n createEffect(() => {\n if (hydrating) getOwner().user = hydrating = false;\n content || (content = runWithOwner(owner, () => createMemo(() => props.children)));\n const el = mount();\n if (el instanceof HTMLHeadElement) {\n const [clean, setClean] = createSignal(false);\n const cleanup = () => setClean(true);\n createRoot(dispose => insert(el, () => !clean() ? content() : dispose(), null));\n onCleanup(cleanup);\n } else {\n const container = createElement(props.isSVG ? \"g\" : \"div\", props.isSVG),\n renderRoot = useShadow && container.attachShadow ? container.attachShadow({\n mode: \"open\"\n }) : container;\n Object.defineProperty(container, \"_$host\", {\n get() {\n return marker.parentNode;\n },\n configurable: true\n });\n insert(renderRoot, content);\n el.appendChild(container);\n props.ref && props.ref(container);\n onCleanup(() => el.contains(container) && el.removeChild(container));\n }\n }, undefined, {\n render: !hydrating\n });\n return marker;\n}\nfunction createDynamic(component, props) {\n const cached = createMemo(component);\n return createMemo(() => {\n const component = cached();\n switch (typeof component) {\n case \"function\":\n return untrack(() => component(props));\n case \"string\":\n const isSvg = SVGElements.has(component);\n const el = sharedConfig.context ? getNextElement() : createElement(component, isSvg, untrack(() => props.is));\n spread(el, props, isSvg);\n return el;\n }\n });\n}\nfunction Dynamic(props) {\n const [, others] = splitProps(props, [\"component\"]);\n return createDynamic(() => props.component, others);\n}\n\nexport { Aliases, voidFn as Assets, ChildProperties, DOMElements, DelegatedEvents, Dynamic, Hydration, voidFn as HydrationScript, NoHydration, Portal, Properties, RequestContext, SVGElements, SVGNamespace, addEventListener, assign, classList, className, clearDelegatedEvents, createDynamic, delegateEvents, dynamicProperty, escape, voidFn as generateHydrationScript, voidFn as getAssets, getHydrationKey, getNextElement, getNextMarker, getNextMatch, getPropAlias, voidFn as getRequestEvent, hydrate, innerHTML, insert, isDev, isServer, memo, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, runHydrationEvents, setAttribute, setAttributeNS, setBoolAttribute, setProperty, setStyleProperty, spread, ssr, ssrAttribute, ssrClassList, ssrElement, ssrHydrationKey, ssrSpread, ssrStyle, style, template, use, voidFn as useAssets };\n","/**\n * Tiny dependency-free Markdown renderer (plain ES module, no build step).\n * Strategy: escape ALL HTML first, then apply a small set of block/inline\n * rules on the escaped text. Output is XSS-safe because raw <,>,& in input\n * can never survive as markup.\n *\n * Blocks: fenced code (3+ backticks, info string kept as a language class) ·\n * headings #–###### · ul/ol incl. one-level nesting, loose lists & task items ·\n * GFM pipe tables (alignment, escaped pipes) · blockquotes · horizontal rules ·\n * paragraphs.\n * Inline: code spans (protected), images, links, bare autolinks, ***bold-\n * italic***, **bold**, __bold__, *em*, _em_, ~~strike~~.\n *\n * ## Deliberate divergences from CommonMark\n *\n * Written down because \"is this a bug or a choice?\" comes up every time, and an\n * undocumented choice gets re-reported as a defect.\n *\n * - **A newline inside a paragraph is `<br>`.** CommonMark says a soft break is a\n * space. This renders CHAT: an operator typing three short lines means three lines,\n * and collapsing them loses meaning that no amount of spec compliance gives back.\n * - **Not supported, on purpose**: setext headings, indented code blocks, reference\n * links, backslash escapes (other than `\\|` in tables), multi-backtick code spans,\n * and raw HTML passthrough. Each is either rare in chat or an XSS surface, and the\n * escape-first design is what makes the renderer safe to point at model output.\n * - **Tab width in `indentOf` is 2, not CommonMark's 4.** Model output is usually\n * two-space indented, and honouring 4 would stop most real nested lists from\n * nesting at all.\n * - **A row is a table before it is a list item**, so `- a | b` followed by a\n * separator row becomes a table. Rare, and the alternative misparses far more\n * common input.\n */\nconst LIST_ITEM = /^(\\s*)([-*+]|\\d+[.)])\\s+(.*)$/;\n\n/** Public entry: escape everything up front, then structure the lines. */\nexport function renderMarkdown(src) {\n return renderEscaped(escapeHtml(src.replace(/\\r\\n/g, \"\\n\")).split(\"\\n\"));\n}\n\n/**\n * Structure already-escaped lines into HTML. Blockquote recursion calls this\n * directly so inner content is never double-escaped.\n */\nfunction renderEscaped(lines) {\n const out = [];\n let i = 0;\n while (i < lines.length) {\n const line = lines[i];\n // fenced code block. The info string may be any non-whitespace run\n // (`js`, `/subject/why-qa`, `text .txt`…) — the old /\\w*/ pattern rejected\n // slash-y pseudo-paths, which made the line fall through to paragraph\n // handling and HANGED the renderer on such chats.\n const fence = line.match(/^(`{3,})([^\\n]*)$/);\n if (fence && !/^```.+\\`\\`\\`/.test(line)) {\n const ticks = fence[1].length;\n // The INFO STRING is kept as a class, which is what makes syntax highlighting\n // possible at all — it used to be discarded, so every block rendered unhighlighted.\n const info = fence[2].trim().split(/\\s+/)[0] ?? \"\";\n const buf = [];\n i++;\n // A fence closes with AT LEAST as many backticks as opened it. Matching exactly\n // three meant a four-backtick fence never closed and ran to EOF — and the case\n // people write it for is nesting a ``` block inside one.\n const close = new RegExp(\"^`{\" + ticks + \",}\\\\s*$\");\n while (i < lines.length && !close.test(lines[i])) buf.push(lines[i++]);\n i++; // closing fence (may be missing — unclosed fence just runs to EOF)\n // the language class is escaped like any other attribute value\n const cls = info ? ` class=\"language-${info.replace(/[^\\w+#.-]/g, \"\")}\"` : \"\";\n out.push(`<pre><code${cls}>${buf.join(\"\\n\")}</code></pre>`);\n continue;\n }\n // horizontal rule (before list: *** / --- would otherwise look like items)\n if (/^ {0,3}(?:-{3,}|\\*{3,}|_{3,})\\s*$/.test(line)) {\n out.push(\"<hr>\");\n i++;\n continue;\n }\n // heading (# through ###### → h1–h6)\n const h = line.match(/^(#{1,6})\\s+(.*)$/);\n if (h) {\n out.push(`<h${h[1].length}>${inline(h[2])}</h${h[1].length}>`);\n i++;\n continue;\n }\n // blockquote (recursive → nested quotes/lists/tables all work);\n // escapeHtml turned \">\" into \">\", so match the escaped marker\n if (/^\\s*>/.test(line)) {\n const buf = [];\n while (i < lines.length && /^\\s*>/.test(lines[i])) buf.push(lines[i++].replace(/^\\s*>\\s?/, \"\"));\n out.push(`<blockquote>${renderEscaped(buf)}</blockquote>`);\n continue;\n }\n // table (GFM): header row containing |, then a --- separator row\n if (line.includes(\"|\") && i + 1 < lines.length && isSeparatorRow(lines[i + 1])) {\n const align = splitRow(lines[i + 1]).map((c) =>\n c.startsWith(\":\") && c.endsWith(\":\") ? \"center\" : c.endsWith(\":\") ? \"right\" : \"left\",\n );\n const head = splitRow(line);\n i += 2;\n const rows = [];\n while (i < lines.length && /\\S/.test(lines[i]) && lines[i].includes(\"|\")) {\n rows.push(splitRow(lines[i]));\n i++;\n }\n const cell = (c, idx, tag) => {\n const a = align[idx];\n const style = a && a !== \"left\" ? ` style=\"text-align:${a}\"` : \"\";\n return `<${tag}${style}>${inline(c)}</${tag}>`;\n };\n // A header row of nothing but blank cells is a legal GFM table, and\n // cmark-gfm does render a <thead> for it — but visually it is a bare\n // strip of dark cells and a border above the real content, reading as a\n // stray empty row rather than as column headings. It also happens by\n // accident whenever someone pipes a table out of a tool whose header is\n // empty. So: keep the table, drop the meaningless <thead> entirely.\n // Only when EVERY cell is blank — a table with one real heading still\n // needs its header, and a partially-blank one keeps the blanks so the\n // real columns stay aligned over their data.\n const hasHeader = head.some((c) => c !== \"\");\n out.push(\n `<div class=\"tbl\"><table>` +\n (hasHeader ? `<thead><tr>${head.map((c, k) => cell(c, k, \"th\")).join(\"\")}</tr></thead>` : \"\") +\n `<tbody>${rows.map((r) => `<tr>${r.map((c, k) => cell(c, k, \"td\")).join(\"\")}</tr>`).join(\"\")}</tbody></table></div>`,\n );\n continue;\n }\n // list (ul/ol, task items, one level of nesting via indentation)\n if (LIST_ITEM.test(line)) {\n out.push(parseList(indentOf(line.match(LIST_ITEM)[1])));\n continue;\n }\n // blank line\n if (/^\\s*$/.test(line)) {\n i++;\n continue;\n }\n // paragraph\n //\n // TERMINATION IS THE WHOLE CONTRACT HERE. Every branch in this loop must\n // consume at least one line, or the outer `while` re-reads the same line\n // forever. A line can match a guard ABOVE (which therefore declines it) and\n // still match one of these — \"```js```\" opens a fence but also contains\n // its own closer, so the fence branch skips it, and then the paragraph loop\n // skips it for starting with ```. Nothing consumed it. That hung the whole\n // browser tab, growing `out` by one empty <p> per spin, and it was\n // reachable from ordinary model output: a reply that typed an inline fence\n // (```js```) while streaming.\n //\n // So: if the paragraph is empty and we are still on the line we started\n // from, consume it unconditionally rather than spinning. A stray ``` is\n // better rendered as a paragraph than as a hang.\n const startLine = i;\n const para = [];\n while (\n i < lines.length &&\n !/^\\s*$/.test(lines[i]) &&\n !/^#{1,6}\\s/.test(lines[i]) &&\n !lines[i].startsWith(\"```\") &&\n !/^ {0,3}(?:-{3,}|\\*{3,}|_{3,})\\s*$/.test(lines[i]) &&\n !/^\\s*>/.test(lines[i]) &&\n !LIST_ITEM.test(lines[i]) &&\n !(lines[i].includes(\"|\") && i + 1 < lines.length && isSeparatorRow(lines[i + 1]))\n ) {\n para.push(lines[i++]);\n }\n if (i === startLine) para.push(lines[i++]);\n out.push(`<p>${para.map(inline).join(\"<br>\")}</p>`);\n }\n return out.join(\"\\n\");\n\n function indentOf(ws) {\n return ws.replace(/\\t/g, \" \").length;\n }\n\n /** Consumes list lines from i onward; returns HTML. One nesting level. */\n function parseList(minIndent) {\n let ordered = null;\n /** the first item's number, so `<ol start=\"3\">` survives (it used to be dropped) */\n let start = 1;\n const items = [];\n while (i < lines.length) {\n const m = lines[i].match(LIST_ITEM);\n if (!m) break;\n const ind = indentOf(m[1]);\n if (ind < minIndent) break;\n const ol = /^\\d/.test(m[2]);\n if (ordered === null) ordered = ol;\n else if (ol !== ordered) break; // marker type changed → close this list\n if (ordered && items.length === 0) {\n const n = Number.parseInt(m[2], 10);\n // CommonMark: the list starts at the first item's number (any other numbers are\n // ignored, which is why only the FIRST is read)\n if (Number.isFinite(n)) start = n;\n }\n i++;\n let body = m[3];\n // folded continuation lines (wrapped text belonging to this item)\n //\n // Every BLOCK-STARTING construct must end the item, or the block is swallowed as\n // item text. MEASURED: \"- item\\n---\" produced `<li>item ---</li>` instead of an\n // `<hr>`, and a table directly under a list was absorbed the same way. Headings,\n // fences and quotes were already excluded — these two were the hole.\n while (\n i < lines.length &&\n /\\S/.test(lines[i]) &&\n !LIST_ITEM.test(lines[i]) &&\n !/^#{1,6}\\s/.test(lines[i]) &&\n !lines[i].startsWith(\"```\") &&\n !/^\\s*>/.test(lines[i]) &&\n // a thematic break (the same predicate the block loop uses, so they agree)\n !/^ {0,3}(?:-{3,}|\\*{3,}|_{3,})\\s*$/.test(lines[i]) &&\n /**\n * A `=====` fence line ends the item too.\n *\n * The harness wraps the goal in `=====` fences (`autoContinueNudge`), so a goal whose last\n * line is a bullet produced \"- last item\" followed by \"=====\". That `=` line is not a\n * thematic break and not a heading marker this renderer knows, so it was folded into the\n * item as text and rendered as \"・ last item =====\" — reported as \"goalとかが箇条書きだった\n * ときに…実際に描画されるのは `・ last item =====`\".\n *\n * Matched here as a block boundary rather than teaching the renderer setext headings: the\n * fences are decoration around a value, and turning a trailing `=====` into an <h1> would\n * be a worse rendering of the same input.\n */\n !/^ {0,3}={3,}\\s*$/.test(lines[i]) &&\n // a table START: this line has a pipe and the NEXT is a separator row\n !(lines[i].includes(\"|\") && i + 1 < lines.length && isSeparatorRow(lines[i + 1]))\n ) {\n body += \" \" + lines[i].trim();\n i++;\n }\n // nested list deeper-indented than this item?\n let sub = \"\";\n const n = lines[i]?.match(LIST_ITEM);\n if (n && indentOf(n[1]) > ind) sub = parseList(indentOf(n[1]));\n // task-list checkbox\n const task = body.match(/^\\[( |x|X)\\]\\s+(.*)$/);\n const box = task\n ? `<input type=\"checkbox\" disabled${task[1].toLowerCase() === \"x\" ? \" checked\" : \"\"}> `\n : \"\";\n items.push(`<li>${box}${inline(task ? task[2] : body)}${sub}</li>`);\n // A BLANK line between items makes a LOOSE list — still one list. Without this the\n // list ended at the blank line and the next item started a second one, and (because\n // the blank line was then consumed as an empty paragraph) the FIRST item was lost\n // entirely: \"- a\\n\\n- b\" rendered as a single <ul> containing \"b\".\n //\n // Only skip the blanks when the next non-blank line is another item at this depth;\n // otherwise the list really has ended and the blank line belongs to what follows.\n let look = i;\n while (look < lines.length && !/\\S/.test(lines[look])) look++;\n const nextItem = lines[look]?.match(LIST_ITEM);\n if (look > i && nextItem && indentOf(nextItem[1]) === ind && /^\\d/.test(nextItem[2]) === ordered) {\n i = look;\n }\n }\n // `<ol start=\"N\">` only when the list does not begin at 1 — the attribute is\n // redundant otherwise, and emitting it always would churn every ordered list.\n if (!ordered) return `<ul>${items.join(\"\")}</ul>`;\n return start === 1\n ? `<ol>${items.join(\"\")}</ol>`\n : `<ol start=\"${start}\">${items.join(\"\")}</ol>`;\n }\n\n function inline(s) {\n // protect code spans from further processing. The placeholder uses a\n // private-use char + sentinel pair; literal NULs in the source were a\n // collision (user text containing \\u0000<digits>\\u0000 swapped in another\n // span's HTML). escapeHtml keeps them, so strip before placeholdering.\n const codes = [];\n s = s.replace(/\\u0000/g, \"\");\n s = s.replace(/`([^`]+)`/g, (_, c) => {\n codes.push(`<code>${c}</code>`);\n return `\\ue000${codes.length - 1}\\uE001`;\n });\n // LINKS AND IMAGES are placeholdered too, for the same reason as code spans: the\n // HTML they produce must not be re-scanned by the passes below.\n //\n // Measured: `[https://example.com](https://example.com)` produced\n // <a href=\"…\"><a href=\"…\">https://example.com</a></a>\n // because the autolink pass ran afterwards and its lookbehind\n // `(?<![\"'=\\w])` accepts the `>` that ends `<a href=\"…\">`. Nested <a> is invalid\n // HTML, so the browser closes the outer one early and the rest of the row's markup\n // lands outside it.\n //\n // Image first: `` must not have its inner part claimed by the link rule.\n s = s.replace(\n /!\\[([^\\]]*)\\]\\((https?:\\/\\/[^)\\s]+)(?:\\s+"[^)]*")?\\)/g,\n (_, alt, url) => {\n codes.push(`<img src=\"${url}\" alt=\"${alt}\" loading=\"lazy\">`);\n return `\\ue000${codes.length - 1}\\uE001`;\n },\n );\n s = s.replace(\n /\\[([^\\]]+)\\]\\((https?:\\/\\/[^)\\s]+)(?:\\s+"[^)]*")?\\)/g,\n (_, text, url) => {\n codes.push(`<a href=\"${url}\" rel=\"noopener noreferrer\" target=\"_blank\">${text}</a>`);\n return `\\ue000${codes.length - 1}\\uE001`;\n },\n );\n // bare autolinks (skip anything already inside an attribute/text)\n s = s.replace(\n /(?<![\"'=\\w])(https?:\\/\\/[^\\s<>\"')\\]]*[^\\s<>\"')\\].,;:!?\"')\\]])/g,\n '<a href=\"$1\">$1</a>',\n );\n // emphasis — triple first, then bold, then italic; permissive about inner\n // spaces so half-written streaming text and \"** spaced **\" both work\n s = s.replace(/\\*\\*\\*([\\s\\S]+?)\\*\\*\\*/g, \"<strong><em>$1</em></strong>\");\n s = s.replace(/\\*\\*([\\s\\S]+?)\\*\\*/g, \"<strong>$1</strong>\");\n s = s.replace(/(^|[^\\w])__(?=\\S)([\\s\\S]*?\\S)__(?!\\w)/g, \"$1<strong>$2</strong>\");\n s = s.replace(/(^|[^\\w*])\\*(?!\\s)([^*\\n]+?)\\*(?![\\w*])/g, \"$1<em>$2</em>\");\n s = s.replace(/(^|[^\\w])_(?!\\s)([^_\\n]+?)_(?!\\w)/g, \"$1<em>$2</em>\");\n s = s.replace(/~~([\\s\\S]+?)~~/g, \"<del>$1</del>\");\n // eslint-disable-next-line no-control-regex\n return s.replace(/\\ue000(\\d+)\\ue001/g, (_, k) => codes[+k] ?? \"\");\n }\n}\n\n/**\n * Split a table row into cells.\n *\n * A pipe is a cell boundary only when it is NOT:\n * - escaped as `\\|` → a literal pipe, and\n * - inside a CODE SPAN, where it is ordinary text.\n *\n * The code-span rule deliberately mirrors `inline()`'s `/`([^`]+)`/g exactly.\n * The two must agree, or a cell is split at a place the inline renderer treats\n * as code — which is how `| `N| ` gutter |` came out as four columns instead of\n * two, and how `` `a|b` `` lost its code formatting. GFM agrees: inside a code\n * span a pipe is content, and the only escape needed is `\\|`.\n *\n * Note the escaped pipe is also suppressed INSIDE a span: `` `a\\|b` `` is the\n * documented way to write a pipe in code, and the backslash there is the\n * author's, not markup.\n */\nfunction splitRow(line) {\n let s = line.trim();\n if (s.startsWith(\"|\")) s = s.slice(1);\n const cells = [];\n let cur = \"\";\n for (let k = 0; k < s.length; k++) {\n const ch = s[k];\n if (ch === \"\\\\\" && s[k + 1] === \"|\") {\n // a literal pipe, inside a span or out\n cur += \"|\";\n k++;\n continue;\n }\n if (ch === \"`\") {\n // Only enter a span if it actually CLOSES. `inline()` uses\n // /`([^`]+)`/g, so an unclosed backtick is literal text THERE — if we\n // treated it as a span here, this row would keep every pipe to its end\n // and merge columns the inline renderer does consider separate. A\n // half-open span is the exact disagreement this fix exists to remove,\n // so a span must be complete on BOTH ends before any pipe is\n // suppressed.\n const close = s.indexOf(\"`\", k + 1);\n if (close !== -1) {\n // The span is copied so its pipes are not boundaries — but the ESCAPE must be\n // resolved inside it too. GFM renders `a\\|b` in a code span as `a|b`, and\n // copying verbatim left the backslash visible (`<code>a\\|b</code>`).\n cur += s.slice(k, close + 1).replace(/\\\\\\|/g, \"|\");\n k = close;\n continue;\n }\n cur += ch;\n continue;\n }\n if (ch === \"|\" && k === s.length - 1) break; // trailing pipe\n if (ch === \"|\") {\n cells.push(cur.trim());\n cur = \"\";\n continue;\n }\n cur += ch;\n }\n cells.push(cur.trim());\n return cells.filter((c, idx) => !(c === \"\" && idx === cells.length - 1 && s.endsWith(\"|\")));\n}\n\n/** `| --- | :--: |` — the second row of a GFM table. */\nfunction isSeparatorRow(line) {\n const s = line.trim();\n if (!s.includes(\"|\") || !s.includes(\"-\")) return false;\n const cells = splitRow(s);\n return cells.every((c) => /^:?-+:?$/.test(c)) && cells.some((c) => c !== \"\");\n}\n\nfunction escapeHtml(s) {\n return s\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\");\n}\n","/**\n * Live-streaming buffer bookkeeping: ONE in-progress assistant buffer per agent,\n * so several agents can stream at once without clobbering each other.\n */\n\nexport interface LiveBuf {\n text: string;\n reasoning: string;\n at: number;\n}\n\n/**\n * Apply a streaming delta for one agent, returning the next map. Keyed per\n * agent, so a delta for one never touches another's buffer.\n */\nexport function applyDelta(\n prev: Map<string, LiveBuf>,\n agentId: string,\n patch: { text?: string; reasoning?: string },\n now = Date.now(),\n): Map<string, LiveBuf> {\n const m = new Map(prev);\n m.set(agentId, {\n text: patch.text ?? \"\",\n reasoning: patch.reasoning ?? \"\",\n at: now,\n });\n return m;\n}\n\n/**\n * Clear one agent's buffer, returning the SAME map when there is nothing to\n * clear. Identity matters: Solid's reference-stabilization skips re-rendering\n * every expression bound to unchanged state, and returning a fresh Map for a\n * no-op would defeat it.\n */\nexport function clearLive(prev: Map<string, LiveBuf>, agentId: string): Map<string, LiveBuf> {\n if (!prev.has(agentId)) return prev;\n const m = new Map(prev);\n m.delete(agentId);\n return m;\n}\n\n/** True when a logged event marks the start of a NEW LLM turn for an agent. */\nexport function isTurnBoundary(ev: unknown): boolean {\n const e = ev as { type?: string; data?: { detail?: string } } | null;\n return e?.type === \"state\" && e.data?.detail === \"llm turn start\";\n}\n\n/** \"Live\" = mid-reply (`running`) or parked on an `ask_user` answer (`waiting`). */\nexport function isLiveStatus(status: string | undefined): boolean {\n return status === \"running\" || status === \"waiting\" || status === \"needs_operator\";\n}\n\n/**\n * What may still be painted from a live buffer, and whether the bubble is warranted at all.\n *\n * The buffer holds two halves that settle INDEPENDENTLY and for different reasons:\n *\n * - `text` is retired when an assistant message in the log carries exactly that text. Until then\n * the bubble is the only copy, and dropping it makes the reply VANISH then reappear.\n * - `reasoning` is never logged as a message, so \"is it covered\" is the wrong question for it. It\n * is STALE once the turn has moved past thinking — a tool call started after the last reasoning\n * delta. The model cannot be thinking and executing at once.\n *\n * Asking both with one boolean is what left a 💭 block on the timeline above the tool row it had\n * already preceded: a reasoning-only buffer has no text to find, so the old function fell back to\n * \"is the agent still live?\", which stays TRUE through the whole turn including the tool run.\n *\n * Three things keep the bubble alive, and they are listed here rather than folded into the\n * predicates: leftover text, leftover reasoning, and a LIVE agent — an empty bubble is how the UI\n * says \"working\" before the first chunk arrives.\n */\nexport interface LiveBufferStatus {\n /** the log holds an assistant message with exactly this text — the text half may go */\n textCovered: boolean;\n /** the thinking stretch that produced this reasoning is over — the reasoning half may go */\n reasoningStale: boolean;\n}\n\nexport function liveBufferStatus(\n buf: LiveBuf,\n events: { type?: string; ts?: string; data?: { role?: string; content?: string } }[],\n status: string | undefined,\n): LiveBufferStatus {\n const text = buf.text.trim();\n const assistant = assistantTexts(events);\n const live = isLiveStatus(status);\n return {\n /**\n * EMPTY text is not \"covered text\" but there is nothing to lose, so it counts as retired. The\n * settling window is the subtle case: the turn has ended and the log holds NO assistant message\n * yet, so the event simply has not been delivered — that text is not redundant, it is early.\n */\n textCovered: !text || assistant.has(text),\n /**\n * Reasoning is stale on ANY of three independent signals.\n *\n * 1. it is empty — nothing to paint;\n * 2. the log's assistant message ALREADY CARRIES IT. This is the strongest evidence and it was\n * missing: reasoning is persisted with the assistant turn, so a logged copy means the live\n * one is a duplicate by definition. MEASURED in tyb2-8-0161a4af: the log held `e53519`\n * (assistant, with this exact reasoning) and the 💭 block was ALSO on screen, because the\n * only signals were the status and a tool-call timestamp — and a delta arriving after the\n * event was merged pushed `buf.at` past the `tool_call`, so the timestamp check said \"still\n * thinking\" about text that had already been written to disk;\n * 3. a tool call started after the last delta (the timestamp rule, kept as a fast path for a\n * model that is thinking but has not produced its message yet).\n */\n reasoningStale:\n !buf.reasoning.trim() ||\n loggedReasoning(events).has(buf.reasoning.trim()) ||\n (live && startedToolCallSince(events, buf.at)),\n };\n}\n\n/** The halves that may still be painted, after retiring whatever the log has caught up with. */\nexport function liveBufferRemainder(\n buf: LiveBuf,\n events: { type?: string; ts?: string; data?: { role?: string; content?: string } }[],\n status: string | undefined,\n): { text: string; reasoning: string; live: boolean; empty: boolean } {\n const st = liveBufferStatus(buf, events, status);\n const text = st.textCovered ? \"\" : buf.text;\n const reasoning = st.reasoningStale ? \"\" : buf.reasoning;\n const live = isLiveStatus(status);\n /**\n * A LIVE agent keeps its bubble only while it still has something to show, or while it has shown\n * NOTHING yet.\n *\n * `sawContent` is the \"nothing yet\" case: before the first delta an empty bubble is how the UI\n * says \"working\", so it must survive. Once the buffer HAS carried content and both halves have\n * been retired, the bubble is spent — an agent running a tool is still `running`, and keeping the\n * bubble for that reason is what left a 💭 block over the tool row it preceded.\n */\n const nothingPending = !text.trim() && !reasoning.trim();\n const sawContent = !!buf.text.trim() || !!buf.reasoning.trim();\n return { text, reasoning, live, empty: nothingPending && (!live || sawContent) };\n}\n\n/**\n * Is the WHOLE live bubble redundant?\n *\n * Redundant only when it has nothing left to paint AND the agent is no longer working — a live\n * agent's empty bubble is the \"working\" indicator, not a leftover.\n */\nexport function isCoveredByLog(\n buf: LiveBuf | null | undefined,\n events: { type?: string; ts?: string; data?: { role?: string; content?: string } }[],\n status: string | undefined,\n): boolean {\n // defensive: with no buffer there is no bubble, and the caller only asks when one exists\n if (!buf) return false;\n return liveBufferRemainder(buf, events, status).empty;\n}\n\n/**\n * Did a tool call START after this buffer's last delta?\n *\n * Reasoning for a turn arrives, then the model emits a tool call and stops thinking. An event later\n * than the last delta is proof the thinking stretch is over; deltas arriving after it push `at`\n * forward again, so a LATER stretch is not cleared by an earlier call.\n */\nfunction startedToolCallSince(\n events: { type?: string; ts?: string }[],\n at: number,\n): boolean {\n if (!at) return false;\n return events.some((e) => {\n /**\n * `tool_call`, NOT `tool_start`.\n *\n * `tool_start` does not exist — `EventType` declares `tool_call` (`data:{callId,name,args}`) and\n * `tool_result`. The check looked for a type nothing ever wrote, so it was ALWAYS false and the\n * stale-reasoning guard never fired: a 💭 block stayed on the timeline after the tool row it had\n * already preceded, again. MEASURED in a real session: the live bubble carried the exact\n * reasoning text of the settled assistant turn above it, with the tool row already drawn.\n *\n * The tests did not catch it because they built their fixtures with the same wrong string — a\n * fixture is only evidence when it matches what the system actually emits.\n */\n if (e.type !== \"tool_call\") return false;\n const t = Date.parse(String(e.ts ?? \"\"));\n return Number.isFinite(t) && t > at;\n });\n}\n\n/** the trimmed REASONING of every assistant message the log currently holds */\nfunction loggedReasoning(\n events: { data?: { reasoning?: unknown } }[] | readonly { data?: unknown }[],\n): Set<string> {\n const out = new Set<string>();\n for (const e of events) {\n const r = String((e.data as { reasoning?: unknown } | undefined)?.reasoning ?? \"\").trim();\n if (r) out.add(r);\n }\n return out;\n}\n\n/** the trimmed text of every assistant message the log currently holds */\nfunction assistantTexts(events: { type?: string; data?: { role?: string; content?: string } }[]): Set<string> {\n const out = new Set<string>();\n for (const e of events) {\n if (e.type === \"message\" && e.data?.role === \"assistant\") out.add(String(e.data.content ?? \"\").trim());\n }\n return out;\n}\n\n\n/**\n * Is this row the SELECTED agent's own in-flight work?\n *\n * #40 — \"agent2's message is agent1's content, with a writing cursor on it.\"\n * Marking a row live from the SELECTED agent's status alone paints rows that are\n * not its work. Two kinds exist:\n *\n * 1. MIRRORED SUB-AGENT ACTIVITY. The master appends a child's events into the\n * parent's own log as `sub` rows, which the feed expands into\n * normal-looking rows tagged with `actor` (see the expansion in App.tsx).\n * Those rows are the CHILD's work: the parent going `running` says nothing\n * about whether the child is still going.\n * 2. A TOOL CALL whose result never arrived — covered by ToolRow's `staleDone`\n * guard once the agent is idle.\n *\n * A row with an `actor` is therefore never the selected agent's own work.\n */\nexport function isOwnLiveWork(row: { data?: { actor?: unknown } } | null | undefined): boolean {\n if (!row) return false;\n const actor = row.data?.actor;\n return !(typeof actor === \"string\" && actor.length > 0);\n}\n\n/**\n * Drop live buffers whose agent is no longer running or waiting (#40).\n *\n * The sweep must cover EVERY agent: nothing replays missed events on reconnect,\n * so an agent whose turn-boundary event was lost would keep its text on screen\n * — under a writing cursor — until a reload, because the buffers are memory-only.\n *\n * An agent with no reported status is LEFT ALONE rather than treated as idle:\n * absence of evidence is not evidence of completion, and the boundary event is\n * still its other clearing path.\n */\nexport function pruneDeadLiveBuffers<T>(\n buffers: ReadonlyMap<string, T>,\n statusOf: (agentId: string) => string | undefined,\n): Map<string, T> {\n // Only allocate when something is actually dead: Solid skips re-rendering on\n // referential equality, and this runs on every snapshot the UI receives.\n const doomed: string[] = [];\n for (const id of buffers.keys()) {\n const st = statusOf(id);\n if (st === undefined) continue; // no snapshot: do not guess\n if (isLiveStatus(st)) continue; // one shared definition of \"live\"\n doomed.push(id);\n }\n if (doomed.length === 0) return buffers as Map<string, T>;\n const out = new Map(buffers);\n for (const id of doomed) out.delete(id);\n return out;\n}\n\n/**\n * Reconcile one agent's live buffer against the timeline it is about to show:\n * not live -> drop; already in the log -> drop; otherwise KEEP. The third is\n * what stops this becoming the opposite bug.\n *\n * #40: the sweep above runs only when `agents()` changes, so a buffer could\n * outlive the state that justified it. `select()` clears `events()` but never\n * touched `liveByAgent`, and if the agent was ALREADY idle at the switch the\n * snapshot did not change either — so nothing pruned, and returning to the\n * session re-displayed stale stream text WITH the writing cursor.\n */\nexport function reconcileLiveBuffer(\n buf: LiveBuf | null | undefined,\n events: { type?: string; ts?: string; data?: { role?: string; content?: string } }[],\n status: string | undefined,\n): LiveBuf | null {\n if (!buf) return null;\n /**\n * Retire the halves the log has caught up with and KEEP the rest.\n *\n * Returning `null` for either signal drops content that is still the only copy — the settling\n * frame where a reply vanishes, or a reasoning block still streaming. Returning the buffer\n * unchanged for both is what left a 💭 block on screen after its tool row had already been\n * painted. One buffer, two independently-settling halves, so the result is a buffer with each\n * half cleared on its own evidence.\n */\n const rest = liveBufferRemainder(buf, events, status);\n if (rest.empty) return null;\n if (rest.text === buf.text && rest.reasoning === buf.reasoning) return buf;\n return { text: rest.text, reasoning: rest.reasoning, at: buf.at };\n}\n\n/**\n * Should the \"💭 thinking\" elapsed clock be cleared? (#131)\n *\n * Returns the value the clock should hold: the existing `startedAt` unless the\n * thinking block is no longer on screen, in which case 0 (the \"not armed\" sentinel).\n *\n * ## Why this is not just `setThinkStartedAt(0)` in the status sweep\n *\n * The original #131 was a session switch leaving `startedAt = 0` while the block was\n * visible, so `now() - 0` rendered as elapsed-since-the-EPOCH (\"thinking 497531h\").\n * The fix sentinel-guarded the timer, but the CLOCK was still zeroed from a status\n * effect — and a status transition is exactly what happens when thinking ends:\n *\n * reasoning arrives -> startedAt = T\n * the turn's status flips -> effect zeroes it\n * the block is still rendered -> now() - 0 -> \"thinking 497531h 23m\"\n *\n * which is the reported \"reasoning が終わった瞬間に発生した\" (no session switch needed).\n *\n * So the clock may only be cleared when the block it measures is GONE — no live\n * buffer for the displayed session and nothing still streaming. A status change alone\n * must not touch it.\n */\nexport function clearThinkClockIfDone(\n startedAt: number,\n agents: readonly { id: string; status?: string; session?: string }[],\n selected: string | null | undefined,\n live: { text: string; reasoning: string } | null | undefined,\n): number {\n if (!startedAt) return 0; // already idle: nothing to clear\n // the bubble IS the thinking block; while it exists, the clock is meaningful\n if (live) return startedAt;\n if (!selected) return 0;\n const a = agents.find((x) => x.id === selected);\n // the displayed agent is mid-turn: reasoning may arrive again on the next chunk, and\n // re-arming would restart an elapsed time the operator is already reading\n if (a?.status === \"running\" || a?.status === \"waiting\" || a?.status === \"needs_operator\") {\n return startedAt;\n }\n return 0;\n}\n","/**\n * Timeline ordering for queued (pending) user messages (#37).\n *\n * A pending message has not reached the model yet — it is queued behind whatever\n * the agent is doing — but its log row carries the seq it was TYPED at, so it\n * rendered above agent output that came after it. Echoes therefore sort below\n * everything the log already holds. A DELIVERED prompt is re-sequenced instead to\n * its `prompt-delivered` note, so it reads in true context order.\n */\n\nexport interface SeqRow {\n seq: number;\n}\n\n/**\n * Place echoes below every settled row, preserving their send order.\n *\n * Rows are not mutated — callers hand us rows they still own. The result is\n * SORTED, because a caller may already have re-sequenced a row (see\n * `resequenceToDelivery`) and the array order no longer reflects the seqs.\n */\nexport function placeEchoesBelow<T extends SeqRow>(visible: T[], echoes: T[]): T[] {\n if (!echoes.length) return [...visible].sort((a, b) => a.seq - b.seq);\n const maxSeq = visible.reduce((m, e) => Math.max(m, e.seq), 0);\n // An echo keeps the `seq` it was already assigned when its identity is otherwise unchanged:\n // re-deriving `maxSeq + 1 + i` on every rebuild gave every queued echo a new object (and a\n // moving seq), which re-mounted the pending row on each incoming event. An echo that already\n // sits BELOW every settled row keeps its position; only a new one is placed.\n const placed = echoes.map((e, i) =>\n e.seq > maxSeq ? e : { ...e, seq: maxSeq + 1 + i },\n );\n return [...visible, ...placed].sort((a, b) => a.seq - b.seq);\n}\n\n/**\n * Re-sequence a DELIVERED prompt's log row down to its delivery note, so it sits\n * where the model received it rather than where it was typed.\n */\nexport function resequenceToDelivery<T extends SeqRow>(row: T, noteSeq: number | undefined): T {\n if (noteSeq === undefined || noteSeq <= row.seq) return row;\n // Cached against the input row so repeated calls return the SAME object: `<For>` keys on\n // item identity, so spreading on every rebuild disposed and re-created a delivered prompt\n // row each time the timeline re-ran (its `seq` is stable, but the object was not).\n let bySeq = resequenceCache.get(row);\n if (!bySeq) {\n bySeq = new Map();\n resequenceCache.set(row, bySeq);\n }\n const hit = bySeq.get(noteSeq);\n if (hit) return hit as T;\n const moved = { ...row, seq: noteSeq } as T;\n bySeq.set(noteSeq, moved);\n return moved;\n}\n\n/** input row → (target seq → the derived row), so a stable input yields a stable output */\nconst resequenceCache = new WeakMap<object, Map<number, object>>();\n\n/**\n * Where a not-yet-delivered message lands.\n *\n * ## Why this must be STABLE, not \"one past the current maximum\"\n *\n * It used to return `max(seq) + 1`, which changes the moment ANY new event is logged — so a\n * queued prompt was re-sequenced to a different value on every rebuild, giving it a brand-new\n * object each time. `<For>` keys on identity, so that prompt row was disposed and re-created\n * on every incoming event (measured: 4 of 18 rows replaced per append in the real bundle).\n *\n * Anchoring to the pinned row's OWN sequence keeps the value the same for as long as the row\n * itself is unchanged, which is what identity needs. Ordering still holds: every settled row\n * has `seq` below the floor at the time it was computed, and a prompt's own seq is by\n * definition below anything logged after it.\n */\nexport function pendingFloor(visible: SeqRow[], own?: number): number {\n if (own !== undefined) return own;\n return visible.reduce((m, e) => Math.max(m, e.seq), 0) + 1;\n}\n","/**\n * The timeline pipeline, extracted from `App.tsx`.\n *\n * ## Why this is a module (#timeline-refactor)\n *\n * The feed used to be one ~240-line `createMemo` in the component, doing seven\n * sequential transformations with closures over eleven component signals. It was\n * fragile for reasons that are structural rather than accidental:\n *\n * 1. **It wrote to its own inputs.** Rows were re-sequenced by assigning into the\n * array (`visible[i] = resequenceToDelivery(e, …)`) and a cancelled marker was set\n * on the event's `data` object (`e.data.cancelled = true`). Those objects come from\n * the events store, so a re-run saw the PREVIOUS run's writes. Two runs with the\n * same input could then produce different output, which is the definition of a bug\n * that \"sometimes\" happens.\n * 2. **Order was load-bearing and unstated.** The invisible-row filter had to run AFTER\n * the pending-echo bookkeeping but BEFORE `prev` was read positionally — a\n * constraint recorded only in a comment. Moving a stage broke grouping in ways the\n * type system could not see (#75, and the \"sometimes groups, sometimes not\"\n * report).\n * 3. **Nothing could be tested in isolation.** Every assertion needed the whole\n * component, so failures named the wrong feature.\n *\n * The stages below are numbered in the order they MUST run, each is a pure function of\n * its arguments, and none mutates an event.\n */\n\nimport { pendingFloor, placeEchoesBelow, resequenceToDelivery } from \"./timeline-order.ts\";\n\n/** the minimum an event must look like — deliberately structural, not nominal */\nexport interface TimelineEvent {\n id: string;\n seq: number;\n ts?: string;\n type: string;\n data?: any;\n session?: string;\n branch?: string;\n}\n\n/** one pending (not yet delivered) message, as the composer shows it */\nexport interface PendingEchoLike {\n id: string;\n promptId?: string;\n at: number;\n text: string;\n sent: boolean;\n}\n\n/** what the pipeline needs from the component, passed explicitly */\nexport interface TimelineInput {\n events: readonly TimelineEvent[];\n /** tool_call ids whose result is merged into their call row */\n consumed: ReadonlySet<string>;\n pending: readonly PendingEchoLike[];\n /** builds an echo row; supplied by the caller because it needs session/branch */\n echo: (p: PendingEchoLike) => TimelineEvent;\n /** types that can draw a row at all */\n feedTypes: ReadonlySet<string>;\n /** types that DO draw a row (a subset of feedTypes) */\n renderedTypes: ReadonlySet<string>;\n /** system_note `event` names that draw a row */\n renderedNoteEvents: ReadonlySet<string>;\n}\n\nconst META_TOOLS_HIDDEN = new Set([\"report_progress\", \"ask_user\", \"record_decision\"]);\n\n/**\n * Stage 1 — drop what must never reach the feed.\n *\n * Sub-events pass through (they are expanded in stage 2). Tool results whose call row\n * will show them are dropped here rather than in the renderer, so grouping sees the\n * real sequence.\n */\nexport function feedCandidates(input: TimelineInput): TimelineEvent[] {\n const { events, consumed, feedTypes } = input;\n return events.filter((e) => {\n if (e.type === \"sub\") return true;\n if (!feedTypes.has(e.type)) return false;\n // a meta tool's own row is redundant with the card it produced (#107)\n const metaToolName =\n e.type === \"tool_call\" || e.type === \"tool_result\" ? String(e.data?.name ?? \"\") : \"\";\n if (META_TOOLS_HIDDEN.has(metaToolName)) return false;\n // paired tool results live inside their call's merged row\n if (e.type === \"tool_result\") return !consumed.has(e.id);\n if (e.type === \"message\") {\n const content = String(e.data?.content ?? \"\");\n const reasoning = String(e.data?.reasoning ?? \"\");\n // a reasoning-only turn right after a tool belongs to that action's row\n if (content.trim() === \"\" && reasoning.trim() !== \"\" && e.data?._prevKind === \"tool\")\n return false;\n // a requested progress report is already shown by its embed\n if (e.data?.progressEcho) return false;\n // sanitize()'s request-only placeholder from old logs\n if (!e.data?.final && content.trim() === \"(tool call)\") return false;\n return content.trim() !== \"\" || reasoning.trim() !== \"\" || !!e.data?.final;\n }\n return true;\n });\n}\n\n/**\n * Stage 2 — expand mirrored CHILD activity into normal rows tagged with the actor.\n *\n * `sub` events are no longer written (#63), but logs that predate that still contain\n * them, and silently hiding rows an operator can see on disk makes the log untrustworthy.\n */\nexport function expandSubRows(events: readonly TimelineEvent[]): TimelineEvent[] {\n const out: TimelineEvent[] = [];\n for (const e of events) {\n if (e.type !== \"sub\") {\n out.push(e);\n continue;\n }\n const d = e.data as { sub?: string; type?: string; data?: any };\n const kind = String(d?.type ?? \"message\");\n if (kind === \"state\") continue; // child state churn is noise at the parent level\n // a NEW object, so nothing downstream can write into the stored event\n out.push({ ...e, type: kind, data: { ...(d?.data ?? {}), actor: d?.sub } });\n }\n return out;\n}\n\nconst norm = (s: unknown) => String(s ?? \"\").replace(/\\s+/g, \" \").trim().toLowerCase();\n\n/**\n * Stage 3 — drop an assistant message that repeats the embed before it verbatim.\n *\n * Models often end a `report_progress` / `record_decision` turn by repeating the same\n * content as an ordinary message; the embed already shows it.\n */\nexport function dedupeAgainstEmbeds(events: readonly TimelineEvent[]): TimelineEvent[] {\n const out: TimelineEvent[] = [];\n for (let i = 0; i < events.length; i++) {\n const e = events[i]!;\n if (e.type === \"message\" && e.data?.role === \"assistant\") {\n const prev = out[out.length - 1];\n const embedType = prev?.type;\n const isEmbed =\n embedType === \"progress\" || embedType === \"decision\" || prev?.data?.progressEcho;\n if (isEmbed) {\n const a = norm(e.data?.content);\n const b = norm(prev?.data?.content);\n if (a && a === b) continue;\n }\n }\n out.push(e);\n }\n return out;\n}\n\n/**\n * Stage 4 — read the prompt lifecycle notes.\n *\n * MUST run before stage 5: both filters below consult this bookkeeping, and the\n * invisible-row filter must not remove the notes it reads.\n */\nexport function promptLifecycle(events: readonly TimelineEvent[]): {\n deliveredIds: Set<string>;\n loggedUserPrompts: Set<string>;\n deliveredNotes: Map<string, number>;\n cancelledNotes: Map<string, number>;\n} {\n const deliveredIds = new Set<string>();\n const loggedUserPrompts = new Set<string>();\n const deliveredNotes = new Map<string, number>();\n const cancelledNotes = new Map<string, number>();\n for (const e of events) {\n const pid = e.data?.promptId;\n if (!pid) continue;\n if (e.type === \"prompt\" && e.data?.source === \"user\") loggedUserPrompts.add(String(pid));\n if (e.type === \"system_note\" && e.data?.event === \"prompt-delivered\") {\n deliveredIds.add(String(pid));\n deliveredNotes.set(String(pid), e.seq);\n }\n if (e.type === \"system_note\" && e.data?.event === \"prompt-cancelled\")\n cancelledNotes.set(String(pid), e.seq);\n }\n return { deliveredIds, loggedUserPrompts, deliveredNotes, cancelledNotes };\n}\n\n/**\n * Stage 5 — drop rows that DRAW NOTHING.\n *\n * This must run after stage 4 (which reads notes out of the same array) and before\n * `prev` is taken positionally: an invisible row CUTS a run of tool calls in half,\n * because grouping keys on the row type. MEASURED: 304 of 1500 events were `state`,\n * and replaying the real log reproduced \"two adjacent bash rows that would not group\".\n *\n * The rule is \"does this type draw anything\", not a list of known-invisible types, so a\n * future type that draws nothing is handled automatically.\n */\nexport function dropInvisibleRows(\n events: readonly TimelineEvent[],\n input: Pick<TimelineInput, \"renderedTypes\" | \"renderedNoteEvents\">,\n stillPendingIds: ReadonlySet<string>,\n): TimelineEvent[] {\n return events.filter((e) => {\n if (!input.renderedTypes.has(e.type))\n return e.type === \"system_note\" && input.renderedNoteEvents.has(String(e.data?.event ?? \"\"));\n if (e.type !== \"prompt\" || e.data?.source !== \"user\") return true;\n const pid = String(e.data?.promptId ?? \"\");\n // an undelivered prompt's LOG row must not render as settled: the echo represents\n // it, and showing both says the model already saw it\n return pid === \"\" || !stillPendingIds.has(pid);\n });\n}\n\n/**\n * Stage 6 — put a delivered prompt at the seq where the model CONSUMED it.\n *\n * A prompt row is logged at enqueue time, so its seq is where the operator typed it,\n * not where it entered the conversation. An UNDELIVERED one goes to the bottom (where\n * it will be consumed), because its later-seq agent output is rendered above it\n * otherwise — the timeline saying the opposite of what happened.\n *\n * Returns NEW rows; the input is never mutated (#timeline-refactor, reason 1).\n */\n/**\n * Cache for rows that this pipeline DERIVES (rather than returns unchanged).\n *\n * ## The rule this enforces\n *\n * `buildTimeline()` runs on every event burst. `<For>` keys on item IDENTITY, so a row that\n * comes back as a new object is disposed and re-created — its DOM state (an open\n * `<details>`, text selection, scroll position inside it) is thrown away with the node.\n *\n * Any stage that has to build a new row for the same input must therefore return the SAME\n * object next time. Keying a WeakMap by the input row does that: the input row is stable\n * (it comes from `stabilize()` in the events store), so the derived object is too.\n *\n * This is NOT a workaround for the ordering bug that came before it — that was a genuine\n * `seq` that moved on every rebuild, and it is fixed at its source (`pendingFloor` anchors\n * to the row). This cache exists for derivations that are legitimately one-time work.\n */\nconst cancelledCache = new WeakMap<TimelineEvent, Map<number, TimelineEvent>>();\n\n/** the same input row + the same cancellation note must yield the same OUTPUT object */\nfunction withCancelled(e: TimelineEvent, noteSeq: number): TimelineEvent {\n let byNote = cancelledCache.get(e);\n if (!byNote) {\n byNote = new Map();\n cancelledCache.set(e, byNote);\n }\n const hit = byNote.get(noteSeq);\n if (hit) return hit;\n const marked = { ...e, data: { ...(e.data ?? {}), cancelled: true } };\n byNote.set(noteSeq, marked);\n return marked;\n}\n\nexport function resequencePrompts(\n events: readonly TimelineEvent[],\n lifecycle: ReturnType<typeof promptLifecycle>,\n): TimelineEvent[] {\n // An undelivered prompt must land below ALL settled rows, so the floor is computed from\n // the whole input rather than the partially built output.\n //\n // It must also be STABLE for a given row: `pendingFloor()` used to return `max(seq) + 1`,\n // which moves whenever anything new is logged, so a queued prompt got a new `seq` (and\n // therefore a new OBJECT) on every rebuild — and `<For>` remounts on identity, so that\n // row was re-created per incoming event. A prompt's own `seq` is below everything logged\n // after it, so anchoring there keeps the value fixed for as long as the row is unchanged.\n const floorOf = (own: number) => pendingFloor(events as TimelineEvent[], own);\n const out: TimelineEvent[] = [];\n for (const e of events) {\n if (e.type !== \"prompt\" || e.data?.source !== \"user\") {\n out.push(e);\n continue;\n }\n const pid = String(e.data?.promptId ?? \"\");\n const cancelSeq = lifecycle.cancelledNotes.get(pid);\n const delivered = lifecycle.deliveredNotes.get(pid) ?? 0;\n const settled = Math.max(delivered, cancelSeq ?? 0) || undefined;\n // The withdrawn marker is applied BEFORE the branch below: a cancelled prompt HAS\n // a `settled` seq (its cancellation), so it took the resequence branch and lost the\n // marker entirely — the row then rendered as an ordinary sent message, which is\n // exactly the #19 symptom the marker exists to prevent.\n // ── IDENTITY, not just correctness ────────────────────────────────────────────\n //\n // These rewrites used object spreads unconditionally, so every prompt row came back as\n // a BRAND NEW object on every rebuild — even when nothing about it had changed. That is\n // invisible to a value-equality assertion and fatal to `<For>`, which keys on IDENTITY:\n // the row was disposed and re-created on every incoming event, so an expanded\n // `<details>` inside it slammed shut and the timeline flickered on each message.\n //\n // MEASURED before this change: appending one event replaced 4 of 18 rows in the real\n // bundle, and `e1` (a plain user prompt) here. The rule is now: allocate only when a\n // value actually changes, otherwise return the SAME object. Anything else in this file\n // that derives a row must follow it (see `expandSubRows`).\n // The marker is DERIVED from a note, so it must be cached against the input row: the\n // source event never carries `cancelled`, so \"does it already have the flag?\" is always\n // false and a fresh object was allocated on every rebuild.\n const marked =\n cancelSeq !== undefined ? withCancelled(e, cancelSeq) : e;\n if (settled !== undefined) {\n out.push(resequenceToDelivery(marked, settled));\n continue;\n }\n // only move the row when the position actually differs\n const floor = floorOf(marked.seq);\n out.push(marked.seq === floor ? marked : { ...marked, seq: floor });\n }\n return out;\n}\n\n/**\n * Stage 7 — decide which pending messages still need an echo.\n *\n * A message needs one until it is DELIVERED and its log row exists; dropping it on the\n * log row alone made the indicator flash and vanish while the message was still queued.\n */\nexport function remainingEchoes(\n pending: readonly PendingEchoLike[],\n lifecycle: ReturnType<typeof promptLifecycle>,\n): PendingEchoLike[] {\n return pending.filter((p) => {\n if (!p.promptId) return true;\n if (lifecycle.deliveredIds.has(p.promptId) && lifecycle.loggedUserPrompts.has(p.promptId))\n return false;\n return true;\n });\n}\n\n/**\n * How many echoes the feed is actually DRAWING.\n *\n * The badge used to count the raw `pending` list, which is CLIENT MEMORY, while the rows were\n * chosen from the LOG. Any state where the two disagree showed a ⏳ badge over a feed with no\n * queued row in it — and \"the log is authoritative\" is the rule this whole file already follows.\n * Reported as a badge that would not clear until a session switch rebuilt it.\n *\n * Exported so the count and the drawing come from ONE decision. A second implementation of\n * \"is this still pending\" is how they drift apart.\n */\nexport function pendingEchoCount(\n pending: readonly PendingEchoLike[],\n lifecycle: ReturnType<typeof promptLifecycle>,\n): number {\n return remainingEchoes(pending, lifecycle).length;\n}\n\n/**\n * The whole pipeline, in the order the stages MUST run.\n *\n * Exported as one function so the component cannot reorder the stages by accident, and\n * so a test can drive the real sequence with a plain array.\n */\nexport function buildTimeline(input: TimelineInput): TimelineEvent[] {\n return buildTimelineWithCount(input).rows;\n}\n\n/**\n * The pipeline, plus the count the ⏳ badge needs — from ONE pass.\n *\n * These have to agree, so they come out of the same run: the badge reported a queued message whose\n * row the feed had already dropped, because the count came from client memory while the rows came\n * from the log. Deriving both here makes that disagreement unrepresentable rather than merely fixed.\n */\nexport function buildTimelineWithCount(input: TimelineInput): {\n rows: TimelineEvent[];\n pendingCount: number;\n} {\n // 1\n const candidates = feedCandidates(input);\n // 2\n const expanded = expandSubRows(candidates);\n // 3\n const deduped = dedupeAgainstEmbeds(expanded);\n // 4 BEFORE 5, because 5 reads this and must not remove the notes it reads\n const lifecycle = promptLifecycle(deduped);\n const stillPendingIds = new Set<string>();\n for (const p of input.pending) {\n if (p.promptId && !lifecycle.deliveredIds.has(p.promptId)) stillPendingIds.add(p.promptId);\n }\n // 5\n const visible = dropInvisibleRows(deduped, input, stillPendingIds);\n // 6\n const resequenced = resequencePrompts(visible, lifecycle);\n // 7\n const echoes = remainingEchoes(input.pending, lifecycle).map(input.echo);\n return { rows: placeEchoesBelow(resequenced, echoes), pendingCount: echoes.length };\n}\n","/**\n * Timeline rendering of the goal / completion-audit lifecycle.\n *\n * #41: \"finish → audit reject → continue is hard to follow on the timeline.\"\n *\n * The audit emits four distinct `goal` events (status → audit-started → audit\n * → status), but the renderer collapsed every one of them into\n *\n * 🎯 goal <event>: <d.text ?? \"\">\n *\n * so `audit-started` and `audit` rendered as bare labels with an EMPTY body —\n * the verification contract and the verdict/feedback were dropped entirely.\n * Worse, `marked done` is logged before the audit that may reject it, so the\n * timeline read as if the goal had completed when it had not.\n *\n * Pure and dependency-free so it is unit-testable under `node --test`.\n */\n\nexport type AuditPhase = \"status\" | \"audit-started\" | \"audit\" | \"audit-failed\" | \"other\";\n\nexport interface GoalEventData {\n event?: string;\n status?: string;\n /**\n * WHO changed the status: \"operator\" (resumed, or set a new goal), \"auditor\" (rejected a finish)\n * or \"agent\". Absent in logs written before this existed, which is why the renderer treats a\n * missing value as neither.\n */\n by?: string;\n verify?: string;\n verdict?: string;\n feedback?: string;\n detail?: string;\n text?: string;\n}\n\nexport function auditPhase(d: GoalEventData): AuditPhase {\n const e = d.event;\n if (e === \"status\" || e === \"audit-started\" || e === \"audit\" || e === \"audit-failed\") return e;\n return \"other\";\n}\n\n/** Is this goal event part of the finish→audit lifecycle worth calling out? */\nexport function isAuditLifecycle(d: GoalEventData): boolean {\n return auditPhase(d) !== \"other\";\n}\n\nexport interface GoalLine {\n /** short label for the divider row */\n label: string;\n /**\n * The detail body — may be EMPTY when there is genuinely nothing to show.\n *\n * #41 required every branch to carry a non-empty detail, because the old\n * template produced a bare \"🎯 goal audit:\" with nothing after it. #51 is the\n * exception that proves the rule: a verdict the auditor gave NO reason for\n * must render as a label alone, because a card reading \"(no detail)\" is the\n * absence of a finding dressed up as one. `hasCard` says which case this is,\n * so a consumer never has to guess from an empty string.\n */\n detail: string;\n /** \"ok\" | \"warn\" | \"err\" | \"\" — drives the accent colour */\n tone: \"ok\" | \"warn\" | \"err\" | \"\";\n /** render the body as markdown rather than plain text */\n markdown: boolean;\n /** true when `detail` is real content that deserves its own card */\n hasCard: boolean;\n}\n\n/**\n * True when this text is one of the harness's own \"the model said nothing\n * useful\" placeholders rather than real feedback.\n *\n * The harness stored the literal \"(no detail)\" when the auditor returned no\n * usable text, and the UI then drew it as a card as if it were the auditor's\n * finding. The report called that card ちょっと気持ち悪い — and rightly: it is a\n * card whose entire content is the absence of content. Anything that is empty,\n * or one of these placeholders, renders as no card at all (#51).\n */\nexport function isPlaceholderDetail(s: string): boolean {\n const t = s.trim().toLowerCase();\n return t === \"\" || t === \"(no detail)\" || t === \"no detail\" || t === \"(none)\" || t === \"(empty)\";\n}\n\n/**\n * The detail to render, or \"\" when it would only be a placeholder.\n *\n * Exported so the renderer and this module agree on one rule — the bug was two\n * places each deciding independently what \"no detail\" meant.\n */\nexport function cardDetail(raw: string, fallback: string): string {\n const t = String(raw ?? \"\").trim();\n if (!isPlaceholderDetail(t)) return t;\n return isPlaceholderDetail(fallback) ? \"\" : fallback;\n}\n\n/**\n * Turn one `goal` event into a labelled, COLOURED line that says what actually\n * happened. Every branch carries a non-empty detail, which is the bug this\n * fixes: the old template produced `🎯 goal audit:` with nothing after it.\n */\nexport function goalLine(d: GoalEventData): GoalLine {\n switch (auditPhase(d)) {\n case \"audit-started\":\n return {\n label: \"🔍️ completion audit started\",\n detail: String(d.verify ?? \"\").trim() || \"checking the verification contract…\",\n tone: \"\",\n // NOT markdown, deliberately (#41): the contract is a COMMAND-shaped string\n // (\"npm test passes\"). Rendering it as markdown invites `*` globs and `_` in a command\n // to be reinterpreted as emphasis, which silently mangles the thing being verified.\n // Code-fenced, so it is shown exactly as it will be checked.\n markdown: false,\n hasCard: true,\n };\n case \"audit\": {\n const verdictHasReason = !isPlaceholderDetail(String(d.feedback ?? \"\"));\n return d.verdict === \"approved\"\n ? {\n label: \"✅ audit: approved\",\n // an empty verdict body is a LABEL, not a card (#51): the auditor\n // approved without giving a reason, and \"(no detail)\" as a card\n // looked like a finding when it was the absence of one\n detail: cardDetail(d.feedback ?? \"\", \"\"),\n tone: \"ok\",\n markdown: true,\n hasCard: verdictHasReason,\n }\n : {\n label: \"⚠ audit: changes required\",\n detail: cardDetail(d.feedback ?? \"\", \"\"),\n tone: \"warn\",\n markdown: true,\n hasCard: verdictHasReason,\n };\n }\n case \"audit-failed\":\n return {\n label: \"🔍️ audit unavailable — finish accepted\",\n detail: String(d.detail ?? \"\").trim() || \"the auditor could not be reached\",\n tone: \"err\",\n markdown: false,\n hasCard: true,\n };\n case \"status\": {\n const s = String(d.status ?? \"\").trim();\n // a status event with no status value is still a status event — never\n // fall through to a bare label (#41)\n if (!s)\n return {\n label: \"🎯 goal status updated\",\n detail: String(d.text ?? \"\").trim() || \"no status recorded\",\n tone: \"\",\n markdown: true,\n hasCard: true,\n };\n /**\n * \"done\" has TWO causes, and only one of them is a claim awaiting an audit.\n *\n * `by: \"operator\"` is the operator deciding the work is finished — no agent `finish()` was\n * called and no audit runs (`setGoalStatus` only writes the state; `handleFinish` is the\n * audited path). The wording was unconditional, so marking a goal done by hand announced\n * \"the agent called finish(goalComplete=true); the verification contract is now being audited\"\n * — a claim nobody made and an audit that would never happen.\n *\n * Everything else (an agent's finish, or an older event with no `by`) keeps the pending-audit\n * wording: `done` IS logged before the audit runs, so it must not read as final there.\n */\n if (s === \"done\") {\n const by = String(d.by ?? \"\").trim();\n if (by === \"operator\")\n return {\n label: \"🏁 goal marked done\",\n detail: \"you marked this goal done — no audit runs for a manual completion\",\n tone: \"\",\n markdown: false,\n hasCard: true,\n };\n return {\n label: \"🏁 finish claimed — pending audit\",\n detail: \"the agent called finish(goalComplete=true); the verification contract is now being audited\",\n tone: \"\",\n markdown: false,\n hasCard: true,\n };\n }\n /**\n * \"active\" has TWO causes, and they are not the same news.\n *\n * `by: \"auditor\"` means the verification contract rejected a finish — worth a warning.\n * Anything else is the operator resuming a paused goal (or setting a fresh one), which is a\n * deliberate action that needs no caveat. The wording used to be hardcoded to the audit case,\n * so pressing ▶ working on a paused goal claimed \"the audit rejected the finish\" — reported\n * as \"pausedからの移動はrejectじゃないのでは?\".\n *\n * An older log has no `by` field; those events predate the distinction, so the neutral\n * wording is used rather than guessing at an audit rejection.\n */\n if (s === \"active\") {\n const by = String(d.by ?? \"\").trim();\n if (by === \"auditor\") {\n return {\n label: \"▶ goal reopened\",\n detail: \"the audit rejected the finish — work continues on the same goal\",\n tone: \"warn\",\n markdown: false,\n hasCard: true,\n };\n }\n return {\n label: \"▶ goal resumed\",\n detail: \"marked active again — auto-continue picks the goal up from the next turn\",\n tone: \"\",\n markdown: false,\n hasCard: true,\n };\n }\n return {\n label: `🎯 goal ${s || \"updated\"}`,\n // #101: a status event carries the STATUS but no text, so this produced\n // an empty card — the exact shape #41 and #51 fixed in the branches\n // above. Your read was right: it is a leftover from when this line was\n // the centered banner, and it survived the move to left-aligned cards.\n // Either give the card a body or drop it; an empty one reads as a verdict\n // that was never delivered.\n detail: String(d.text ?? \"\").trim() || `the goal is now ${s}`,\n tone: \"\",\n // carries the goal TEXT when there is one, so it is markdown too\n markdown: true,\n hasCard: true,\n };\n }\n default: {\n const what = String(d.text ?? \"\").trim();\n const name = String(d.event ?? \"\").trim();\n return {\n label: name ? `🎯 goal ${name}` : \"🎯 goal updated\",\n // #41: never render a bare label with nothing after it — that was the\n // exact shape of the reported bug. An unknown event with no text still\n // gets a body, but it must SAY something rather than read as a verdict\n // that was never delivered (#51).\n detail: what || `the \"${name || \"goal\"}\" event carried no further detail`,\n tone: \"\",\n // the goal text is PROSE someone wrote, and it is routinely markdown\n // (headings, lists, backticked paths). Rendering it as a fenced code block meant the\n // operator's own goal came back as literal `## Foo` / `- bar`. `renderMarkdown` escapes\n // all HTML first, so pointing it at this text is safe.\n markdown: true,\n hasCard: true,\n };\n }\n }\n}\n","import { Show } from \"solid-js\";\nimport type { JSX } from \"solid-js\";\nimport { renderMarkdown } from \"../md\";\n\n/**\n * The one card surface in this app, for both the timeline and the right panel.\n *\n * ## Why this exists\n *\n * `.card` was a class with two very different jobs: a panel in the sidebar, and a row in the\n * timeline. Each caller assembled it by hand and they diverged — the timeline's goal cards rendered\n * markdown into a bare `<div innerHTML>`, while a `goal` event whose detail is command-shaped went\n * through a FENCED CODE BLOCK instead. A fenced block becomes `<pre>`, and `<pre>` re-declares\n * `white-space: pre`, which stops the wrapping the card around it had been given.\n *\n * MEASURED: \"🎯 goal set\" wrapped correctly (markdown), \"🔍️ completion audit started\" scrolled\n * sideways (fenced block) — the same card, two renderings, one of them broken.\n *\n * Tool cards hit the identical trap and fixed it by hand (`.toolbody.shiki pre code`). Two\n * hand-maintained copies of that fix is how the third one gets forgotten, so the wrapping lives HERE\n * for every card body, and `pre`/`code` are handled as one case.\n *\n * ## The three kinds\n *\n * - `title` — a small uppercase label above the body (a card that says WHAT it is showing)\n * - `tone` — the left rule: `ok` / `warn` / `tool`, so the card's meaning is visible at a glance\n * - `markdown` (default) — prose renders as markdown\n * `false` — command-shaped text (`npm test passes`) is shown VERBATIM. Markdown would\n * reinterpret `*` globs and `_` as emphasis and silently mangle the thing being verified, so it\n * is rendered in a wrapping code surface rather than as markdown.\n */\nexport function Card(props: {\n /** small uppercase label above the body */\n title?: string;\n /** right-aligned note beside the title (a timestamp, a source) */\n meta?: string;\n tone?: \"ok\" | \"warn\" | \"tool\";\n /** extra class for a card with its own layout (the goal ladder) */\n class?: string;\n /** render the body as markdown (default) or as verbatim command text */\n markdown?: boolean;\n /** raw markdown when `markdown`, otherwise the literal text to show */\n body: string;\n children?: JSX.Element;\n}) {\n const classes = () => {\n const t = props.tone;\n return [\"card\", t ? `card-${t}` : \"\", props.class ?? \"\"].filter(Boolean).join(\" \");\n };\n const html = () =>\n props.markdown === false\n ? renderMarkdown(`\\`\\`\\`\\n${props.body}\\n\\`\\`\\``)\n : renderMarkdown(props.body);\n return (\n <div class={classes()}>\n <Show when={props.title}>\n <div class=\"ctitle\">\n {props.title}\n <Show when={props.meta}>\n <span class=\"meta muted\">{props.meta}</span>\n </Show>\n </div>\n </Show>\n {props.children ?? <div class=\"cardbody\" innerHTML={html()} />}\n </div>\n );\n}\n","/**\n * Reconcile the themes this browser has with the themes the config file holds.\n *\n * #themes-merge: the sync added in v0.36.0 said \"a server with themes wins, because they are the\n * durable copy\". That is wrong in the direction that LOSES data, and it shipped: a config holding\n * one stale light theme replaced seven themes in the browser, so the appearance panel then offered\n * only light themes — reported as \"follow the system がオフなのにライトテーマ(システムのテーマ)の\n * 選択肢しかでない\".\n *\n * Neither side is authoritative. A theme can be made on a phone and not yet synced; the config can\n * hold themes from before this browser existed. So the resolved list is the UNION by id, with the\n * server's copy winning for an id both know (it is the durable one).\n *\n * Pure and dependency-free so it is unit-testable under `node --test`.\n */\n\n/**\n * Structurally typed rather than importing `CustomTheme`: a sibling import needs an explicit `.ts`\n * extension under the scripts tsconfig while the frontend build rejects one, and the only thing this\n * function touches is `id`.\n */\nexport interface MergeableTheme {\n id: string;\n}\n\nexport function mergeThemes<T extends MergeableTheme>(local: readonly T[], remote: readonly T[]): T[] {\n const byId = new Map<string, T>();\n // local first, then the server's copy overrides a shared id\n for (const t of local) byId.set(t.id, t);\n for (const t of remote) byId.set(t.id, t);\n return [...byId.values()];\n}\n","/**\n * Responsive loading for theme background images, in ONE place.\n *\n * The server can serve a wallpaper at several widths (see `src/server/image-resize.ts`), because the\n * original is a multi-megabyte photo and the browser should pick a size that suits the viewport.\n *\n * The app's own wallpaper did this from the start. The appearance panel's preview did NOT — it\n * requested the original file every time the section opened, which is why that panel felt laggy\n * while the rest of the UI did not. Asked as \"appearanceがラグくて、なんでだろうって思ったんだけど、\n * こっちはUI本体と違って背景画像がsrcset無しでロードされてる / コンポーネント化しようね\".\n *\n * So the ladder and the URL building live here, and every consumer uses them: one definition means a\n * new surface cannot silently load the full-size original.\n */\n\n/**\n * The width ladder, mirroring the server's `ALLOWED_WIDTHS`.\n *\n * Hardcoded rather than fetched so the first paint already has candidates (a fetch would mean one\n * full-size download before any choice exists). Drift degrades rather than breaks: the server\n * rejects an unknown width and the caller falls back to the original.\n */\nexport const BG_WIDTHS = [640, 1280, 1920, 2560, 3840] as const;\n\n/** the smallest rung — for a thumbnail that never needs anything larger */\nexport const BG_SMALL = BG_WIDTHS[0];\n\n/**\n * `srcset` for a background image.\n *\n * Returns `undefined` for a missing image so a caller can omit the attribute entirely rather than\n * emit a broken one-word list.\n */\nexport function bgSrcSet(src?: string): string | undefined {\n if (!src) return undefined;\n return BG_WIDTHS.map((w) => `${src}?w=${w} ${w}w`).join(\", \");\n}\n\n/**\n * A single URL at a given width.\n *\n * `width` is optional so a caller that just wants \"some\" image gets the smallest rung — the case\n * that matters is a thumbnail, where asking for the original is the bug.\n */\nexport function bgSrc(src: string | undefined, width: number = BG_SMALL): string | undefined {\n if (!src) return undefined;\n return `${src}?w=${width}`;\n}\n","/**\n * Sidebar tree layout — the pure part, extracted so it is testable without a DOM\n * (happy-dom does no layout) or solid-js, matching live-buffer.ts and\n * timeline-order.ts.\n *\n * The ORDER rows are emitted in is the whole UX. Two group levels exist:\n *\n * - WORKSPACE (#18): a header wherever the working directory changes, so\n * unrelated projects stop interleaving in one list;\n * - CHAT: each top-level chat is its own group, so two chats sharing a\n * directory stay independently collapsible.\n *\n * #58: the CHAT level is emitted ONLY when the directory holds more than one\n * top-level chat. Unconditionally, the common case (one chat per project) said\n * the same thing three times — directory header, chat header, chat.\n */\n\nexport interface TreeAgent {\n id: string;\n parent?: string;\n workspace: string;\n workspaceMissing?: boolean;\n}\n\nexport interface TreeRow<T extends TreeAgent = TreeAgent> {\n a: T;\n depth: number;\n}\n\n/** A sidebar row: either a header or a chat. */\nexport interface SidebarRow<T extends TreeAgent = TreeAgent> {\n a: T;\n depth: number;\n /** the working directory this header names */\n wsHeader?: string;\n /** the `chat:<id>` group this header collapses */\n chatHeader?: string;\n /** a HEADER row: renders its caret + label, never the chat itself */\n headerOnly?: boolean;\n wsCollapsedGroup?: boolean;\n chatCollapsedGroup?: boolean;\n /**\n * The key that is ACTUALLY holding this directory collapsed, when it is not\n * the header's own `ws:<dir>` key.\n *\n * A solo chat used to have its own `chat:<id>` header, so a collapse from\n * before #58 is persisted under that key while the header is now the\n * directory's. The row must report it so the click handler can clear it —\n * otherwise the chat stays hidden and the caret keeps pointing \"open\", with\n * no control anywhere that can bring it back.\n */\n collapsedVia?: string;\n}\n\n/**\n * Flatten the agent forest into display order: each agent followed by its\n * sub-agents, newest sub first (a freshly spawned agent is what you want to\n * see), with collapsed subtrees omitted entirely.\n *\n * `collapsed` holds agent ids whose SUBTREE is hidden. A top-level chat's row\n * is collapsible too — it is a group in its own right, because its sub-agents\n * hang beneath it — so the caller passes the chat group keys as well and both\n * kinds of collapse end up here, in one place.\n */\nexport function treeRowsOf<T extends TreeAgent>(\n agents: readonly T[],\n collapsedSubs: ReadonlySet<string> = new Set(),\n hideGhosts = false,\n collapsedChats: ReadonlySet<string> = new Set(),\n): TreeRow<T>[] {\n // #81: the ghost filter used to drop ghost sessions outright, BEFORE the\n // parent-presence check below. A ghost PARENT with a live CHILD therefore\n // orphaned that child: it became a root, and the directory grouping then put\n // it under the ghost's directory as a separate group at the BOTTOM of the\n // list, separated from everything it belongs with. That is the reported\n // \"a session that has sub-agents shows none of them\".\n //\n // So a ghost is only dropped when nothing visible hangs under it. A ghost that\n // still has live descendants stays in the list as the anchor they need — it is\n // exactly the structure 👻 is meant to hide, but hiding the parent hides the\n // children too.\n const list = hideGhosts\n ? agents.filter((a) => {\n if (!a.workspaceMissing) return true;\n // keep a ghost if anything NOT hidden descends from it\n const stack = [a.id];\n const seenIds = new Set<string>();\n while (stack.length) {\n const id = stack.pop()!;\n if (seenIds.has(id)) continue;\n seenIds.add(id);\n for (const c of agents) if (c.parent === id && !seenIds.has(c.id)) stack.push(c.id);\n }\n // if every descendant is also a ghost, this ghost can go safely\n for (const id of seenIds) {\n const d = agents.find((x) => x.id === id);\n if (d && !d.workspaceMissing) return true; // a live descendant needs this anchor\n }\n return false;\n })\n : agents;\n const byParent = new Map<string, T[]>();\n const roots: T[] = [];\n for (const a of list) {\n const isSub = a.parent && list.some((p) => p.id === a.parent);\n if (isSub) {\n // newest sub first — a freshly spawned agent is what you want to see\n if (!byParent.has(a.parent!)) byParent.set(a.parent!, []);\n byParent.get(a.parent!)!.unshift(a);\n } else roots.push(a);\n }\n const rows: TreeRow<T>[] = [];\n const walk = (nodes: T[], depth: number) => {\n for (const a of nodes) {\n // A collapsed TOP-LEVEL chat still contributes its OWN row (so the caret\n // on it can bring the chat back) but NOT its sub-agents, which are what\n // the collapse actually hides. Dropping the row too is what strands a\n // chat: with the `chat:<id>` header gone, nothing else on screen controls\n // it and the stored key is never cleared.\n //\n // #81: this used to `continue`, which emitted the row here AND skipped the\n // recursion — while sidebarRowsOf ALSO emits the row. So the chat appeared\n // once (fine) but nothing marked it collapsed and, more importantly, the\n // recursion into its children was skipped for a reason that had nothing to\n // do with them. The row is emitted once, here, and the collapse simply\n // stops DESCENDING — the sub-agents stay in the tree, hidden under their\n // parent by sidebarRowsOf, which is what the 🧩 count has always implied.\n const chatOff = depth === 0 && collapsedChats.has(chatGroupKeyOf(list, a));\n rows.push({ a, depth });\n if (chatOff) continue;\n const kids = byParent.get(a.id);\n if (kids?.length && !collapsedSubs.has(a.id)) walk(kids, depth + 1);\n }\n };\n // #62: a workspace header is only meaningful if a directory's chats are\n // CONTIGUOUS. Roots arrive in whatever order the server sent them, so a chat\n // created later (teapot-7) landed after another project's group and split\n // /p/teapot into two sections under the same header — the sidebar read as\n // three projects where there were two, and the count badge then contradicted\n // the rows beneath it.\n //\n // So group the roots by directory first. Directories keep first-seen order,\n // so the sidebar stays stable and predictable (sorting by name would reshuffle\n // everything whenever a project was added), and each group's chats keep their\n // own relative order.\n const groupKeys: string[] = [];\n const groups = new Map<string, T[]>();\n for (const a of roots) {\n // #81: an orphaned sub-agent (parent not in `list`) is handled in the\n // dedicated pass below, which can resolve a workspace for it. Grouping it\n // here as well would emit it twice.\n if (a.parent) continue;\n const ws = workspaceOf(list, a.id);\n const g = groups.get(ws);\n if (g) g.push(a);\n else {\n groups.set(ws, [a]);\n groupKeys.push(ws);\n }\n }\n // #81: a sub-agent whose parent is NOT in `list` is treated as a ROOT and then\n // emitted BEFORE any header — a bare row outside its project. Two real routes:\n // 👻 (hideGhosts) filters the list before the parent-presence check, and\n // removing a parent does not reparent its children. The 🧩 badge counts against\n // `agents()` rather than this list, so such a row was counted but not shown.\n //\n // So an orphan groups under its parent's DIRECTORY (workspaceOf walks up through\n // the missing parent). One with no resolvable directory gets the synthetic group\n // below rather than being dropped — dropping is how they hid.\n const ORPHANS = \"\";\n for (const a of roots) {\n if (!a.parent) continue;\n const ws = workspaceOf(agents, a.id) || ORPHANS;\n const g = groups.get(ws);\n if (g) g.push(a);\n else {\n groups.set(ws, [a]);\n groupKeys.push(ws);\n }\n }\n\n for (const ws of groupKeys) walk(groups.get(ws)!, 0);\n return rows;\n}\n\n/**\n * The directory an agent belongs to; a sub-agent inherits its parent's.\n *\n * #81: an ORPHANED sub-agent — one whose parent is not in the list, which\n * happens when 👻 (hideGhosts) filters the parent out or a parent is removed\n * without reparenting — used to resolve to `\"\"`, because the walk stops at an\n * id it cannot find. That put it outside every group: no header above it, and\n * no project. Its 🧩 badge still counted (that asks `agents()`), so the badge\n * said 4 and the tree showed none.\n *\n * So when the parent cannot be resolved, fall back to this agent's OWN\n * declared workspace. Many sub-agents carry one; and where it is empty too,\n * the row still renders (just ungrouped) rather than vanishing.\n */\nexport function workspaceOf(agents: readonly TreeAgent[], id: string, seen = new Set<string>()): string {\n const a = agents.find((x) => x.id === id);\n if (!a) return \"\";\n if (!a.parent) return a.workspace || \"\";\n if (seen.has(id)) return a.workspace || \"\"; // cycle guard\n seen.add(id);\n const parentWs = workspaceOf(agents, a.parent, seen);\n if (parentWs) return parentWs;\n // parent unresolvable — use our own workspace rather than nothing\n return a.workspace || \"\";\n}\n\n/**\n * Should this row show its collapse caret? (#106)\n *\n * A caret that collapses nothing is noise. But gating a chat's caret on \"has\n * children\" alone is WRONG: collapsing is what WRITES the `chat:<id>` key, so a\n * chat can hold a STALE one after an upgrade, or after it was collapsed and then\n * lost its sub-agents. `sidebarRowsOf` still renders such a row (marked\n * `chatCollapsedGroup`) — so without a caret there is NO on-screen control to\n * clear the key and the chat shows ▸ forever.\n *\n * A caret therefore appears when it would do something, or when it is the only\n * way back out.\n */\nexport function shouldShowCollapseCaret(args: {\n /** is this row a sub-agent rather than a top-level chat? */\n isSub: boolean;\n /** is the row's group currently collapsed? */\n collapsed: boolean;\n /** does this row have any children? */\n hasChildren: boolean;\n}): boolean {\n return args.isSub ? args.hasChildren : args.collapsed || args.hasChildren;\n}\n\n/**\n * The display name a sub-agent was spawned with, recovered from its id.\n *\n * #121: the sidebar's tooltip said only `sub-agent of @<parent>`, so hovering a\n * row named `tyb2-6-sub-mt6628_reg` revealed nothing about WHAT it is — and the\n * parent is already visible two lines above it in the same panel.\n *\n * The name is not stored separately: `spawnChildFor` builds the id as\n * `<parent>-sub[-<persona>]-<name>` (master.ts `spawnChildFor`), so it is recovered from\n * that. Characters outside `[\\w.-]` were substituted with underscores at spawn\n * time, so they are turned back into spaces — `mt6628_reg` reads as `mt6628 reg`\n * rather than leaking the mangling.\n *\n * Returns null when the id carries no name, so the caller can fall back rather\n * than show an empty tooltip.\n */\nexport function subAgentDisplayName(id: string, personas: readonly string[] = []): string | null {\n const at = id.indexOf(\"-sub\");\n if (at === -1) return null;\n // strip the separator too, so `-mt6628_reg` does not carry a leading dash\n const rest = id.slice(at + \"-sub\".length).replace(/^-+/, \"\");\n if (!rest) return null;\n const parts = rest.split(\"-\");\n // A persona, when present, is the FIRST segment: `<parent>-sub-<persona>-<name>`.\n // The persona list lives on the server and the frontend already loads it from\n // /api/personas, so it is passed in rather than duplicated here — a stale copy\n // would mis-parse every persona-spawned id the day a persona is added.\n const name = personas.includes(parts[0] ?? \"\") ? parts.slice(1).join(\"-\") : rest;\n return name.replace(/_/g, \" \").trim() || null;\n}\n\n/**\n * Every DESCENDANT of `agentId`, at any depth (#98).\n *\n * The sidebar's 🧩 badge counted only DIRECT children, so an agent whose subs had\n * subs reported a smaller number than existed — and the `· ▶N` active count had\n * the same shape. `seen` guards a cycle in `parent`, which would recurse forever.\n */\nexport function descendantsOf<T extends TreeAgent>(\n agents: readonly T[],\n agentId: string,\n seen = new Set<string>(),\n): T[] {\n const out: T[] = [];\n const guard = new Set(seen);\n for (const a of agents) {\n if (a.parent !== agentId) continue;\n if (guard.has(a.id)) continue; // cycle: a -> b -> a\n guard.add(a.id);\n out.push(a, ...descendantsOf(agents, a.id, guard));\n }\n return out;\n}\n\n/** The group a chat collapses under — resolved to its TOP-LEVEL ancestor. */\nexport function chatGroupKeyOf(agents: readonly TreeAgent[], a: TreeAgent): string {\n let id = a.id;\n const seen = new Set<string>();\n for (;;) {\n const cur = agents.find((x) => x.id === id);\n if (!cur?.parent || seen.has(id)) break;\n seen.add(id);\n id = cur.parent;\n }\n return `chat:${id || a.id}`;\n}\n\n/**\n * How many TOP-LEVEL chats sit in each workspace.\n *\n * Sub-agents are excluded: one hangs under its parent's group, and counting it\n * would make a directory holding a single chat look like it held several —\n * which under #58 would wrongly keep the redundant chat header alive.\n */\nexport function wsChatCountsOf(agents: readonly TreeAgent[]): Map<string, number> {\n const counts = new Map<string, number>();\n for (const a of agents) {\n if (a.parent) continue; // a sub-agent is part of its parent's group\n const ws = workspaceOf(agents, a.id);\n if (!ws) continue;\n counts.set(ws, (counts.get(ws) ?? 0) + 1);\n }\n return counts;\n}\n\n/**\n * Annotate the tree with its group headers, dropping collapsed members.\n *\n * `collapsed` holds the persisted collapse keys: `ws:<dir>` for a directory\n * and `chat:<id>` for a single top-level chat.\n */\nexport function sidebarRowsOf<T extends TreeAgent>(\n agents: readonly T[],\n rows: readonly TreeRow<T>[],\n collapsed: ReadonlySet<string> = new Set(),\n): SidebarRow<T>[] {\n const out: SidebarRow<T>[] = [];\n let lastWs: string | null = null;\n for (const r of rows) {\n const ws = workspaceOf(agents, r.a.id);\n // A chat with no working directory has nothing to group by, so it gets no\n // header at all rather than one labelled with the empty string.\n if (!ws) {\n out.push({ a: r.a, depth: r.depth });\n continue;\n }\n // ONE header level: the working directory (#18). The old second level (a\n // `chat:<id>` header per top-level chat) restated the directory: a six-chat\n // directory rendered thirteen rows. The chat level existed only to make each\n // top-level chat collapsible, and that needs no row of its own — a top-level\n // chat IS an agent row, so the row carries the caret while `chat:<id>` stays\n // the group key, keeping old collapses working.\n if (ws !== lastWs) {\n lastWs = ws;\n out.push({\n a: r.a,\n depth: 0,\n headerOnly: true,\n wsHeader: ws,\n wsCollapsedGroup: collapsed.has(`ws:${ws}`),\n });\n }\n if (collapsed.has(`ws:${ws}`)) continue;\n // A collapsed CHAT keeps a row. With the `chat:<id>` header gone, that row\n // carries the caret — so hiding the row too would leave the chat\n // permanently unreachable: no header to click, no row to click, and the\n // stored key is never cleared. This is the strand-a-chat bug, and the\n // header used to be what prevented it.\n //\n // The row is marked so the UI can show it as collapsed (▸, dimmed) rather\n // than as a normal chat, and its sub-agents stay hidden.\n if (collapsed.has(chatGroupKeyOf(agents, r.a))) {\n out.push({ a: r.a, depth: r.depth, chatCollapsedGroup: true });\n continue;\n }\n out.push({ a: r.a, depth: r.depth });\n }\n return out;\n}\n","/**\n * Which `ask_user` questions count as answered.\n *\n * Two sources of truth, and they compose:\n *\n * - the LOG: any user reply after the latest open question closes every earlier\n * question of that session, because the agent loop resumes on the first\n * reply. A `prompt-delivered` system note counts as the reply, since it marks\n * a queued prompt actually reaching the model.\n * - THIS TAB: a question answered optimistically has no logged reply yet, so\n * without it the row would stay enabled and could be answered twice.\n *\n * A session switch clears the second set — one session's answers must not follow\n * the operator into another session.\n *\n * #75: extracted from App.tsx so the tests drive the code that runs.\n */\n\nexport interface QuestionEvent {\n type: string;\n seq: number;\n data?: {\n callId?: unknown;\n source?: unknown;\n event?: unknown;\n };\n}\n\n/**\n * Ids of every question that should render as answered.\n *\n * `locallyAnswered` is this tab's optimistic set; pass an empty set to ask only\n * what the log says.\n */\nexport function answeredQuestionIdsOf(\n events: readonly QuestionEvent[],\n locallyAnswered: ReadonlySet<string> = new Set(),\n): Set<string> {\n const set = new Set<string>();\n let lastQuestionAt = -1;\n let lastUserPromptAt = -1;\n for (const e of events) {\n if (e.type === \"question\") lastQuestionAt = e.seq;\n else if (e.type === \"prompt\" && e.data?.source === \"user\") lastUserPromptAt = e.seq;\n else if (e.type === \"system_note\" && e.data?.event === \"prompt-delivered\")\n lastUserPromptAt = Math.max(lastUserPromptAt, e.seq);\n }\n // a logged reply closes every question at or before it\n if (lastQuestionAt >= 0 && lastUserPromptAt > lastQuestionAt) {\n for (const e of events)\n if (e.type === \"question\" && e.seq <= lastUserPromptAt)\n set.add(String(e.data?.callId ?? \"\"));\n }\n // …plus this tab's optimistic answers, whose reply is not logged yet\n for (const id of locallyAnswered) set.add(id);\n return set;\n}\n","/**\n * Reconciling optimistic echoes against the live queue (#87).\n *\n * Extracted from App.tsx so the rule is tested against the code that runs — an\n * inline copy is a mirror, and a mirror passes by construction.\n */\n\n/**\n * One optimistic echo of a queued prompt.\n *\n * `source` matters: a HARNESS prompt (a goal/todo save, or a sub-agent report)\n * has no composer draft to return it to and no user text to fork from, so it must\n * not grow a ✕/✎ that could only fail (#122).\n */\nexport type PendingEcho = {\n id: string;\n text: string;\n at: number;\n promptId?: string;\n sent?: boolean;\n images?: string[];\n /** \"user\" for an operator prompt, \"harness\" for one the system injected */\n source?: string;\n};\n\n/**\n * Reconcile the local echoes against the live queue (#78).\n *\n * Matching is by IDENTITY. The old `filter(!!promptId).slice(0, queued)` kept the\n * first N by POSITION, so whenever the server's count dipped below the real queue\n * (a mid-queue cancel, or the gap before `drainPendingPrompts()` settles) the\n * NEWEST still-queued echoes were dropped — and since `stillPendingIds` derives\n * from this list, their log rows reappeared as settled \"sent\" rows (#19).\n */\nexport const reconcilePending = (\n list: PendingEcho[],\n queued: number,\n liveIds: readonly string[] | undefined,\n): PendingEcho[] => {\n if (queued >= list.length) return list;\n if (liveIds?.length) {\n const live = new Set(liveIds);\n const matched = list.filter((p) => p.promptId && live.has(p.promptId));\n if (matched.length) {\n // echoes with no id (pre-tracking, or pre-reload) have nothing to match on:\n // keep them only if the ids cannot account for the queue, so they are never\n // silently dropped\n const unidentifiable = list.filter((p) => !p.promptId);\n return unidentifiable.length ? [...matched, ...unidentifiable].slice(0, queued) : matched;\n }\n }\n // no ids at all (older server): the head is correct for a front-to-back drain\n return list.slice(0, queued);\n};\n","/**\n * Which session's timeline should open for an agent.\n *\n * #58: an EXPLICIT request (a deep link, browser Back/Forward, or the session\n * switcher) is authoritative. It is honoured only when the agent really owns\n * that session, so a crafted URL cannot cross into another agent's timeline.\n *\n * `owned` is the agent's session ids, newest first. `bound` is the session the\n * agent is currently attached to.\n *\n * #141: a pure module on purpose, so App.tsx has ONE implementation to call and\n * the tests cannot re-implement it.\n */\nexport function resolveTimelineSession(\n owned: readonly string[] | undefined,\n /** `null` is \"this agent has no bound session\" — the same as `undefined` to the code\n * below (`if (bound && …)`), which is why both are accepted. */\n bound: string | null | undefined,\n requested?: string | null,\n): string | null {\n const mine = owned ?? [];\n if (requested && mine.includes(requested)) return requested;\n if (bound && mine.includes(bound)) return bound;\n // #146: the session INDEX may not have landed yet (a brand-new agent whose\n // first session dir is not scanned): with NO ownership data, the bound session\n // is the best guess — it is the session the agent is attached to. Once\n // ownership data EXISTS, a bound session outside it is STALE, and opening it\n // yields an empty timeline that looks like lost history.\n if (!requested && bound && mine.length === 0) return bound;\n return mine[0] ?? null;\n}\n\n/**\n * Should this handle be written into `/session/<id>`?\n *\n * The URL is the SHARED state between tabs, so a wrong handle there is a cross-tab bug. Two tabs\n * deep-linked to different sessions both turned into `/session/<agentId>` after a restart, because\n * `tid` fell back to the agent id when the session index had not landed — and an agent id resolves\n * to that agent's LATEST session, so both tabs opened the same one.\n *\n * @param handle what the caller wants to put in the URL\n * @param known the session index (internal session id → agent id); empty means \"not loaded\"\n * @param agentIds every configured agent id\n */\nexport function linkableSessionId(\n handle: string | null | undefined,\n known: ReadonlyMap<string, string>,\n agentIds: readonly string[],\n): string | null {\n if (!handle) return null;\n /**\n * An agent id is not a session id — refuse it whether or not the index has landed.\n *\n * That single check is the fix for the two-tabs bug: `/session/<agentId>` later resolves through\n * `latestSessionOf` to that agent's LATEST session, so every tab that deep-linked an agent id\n * converged on one session. Nothing else needs guarding.\n *\n * A session id the index cannot confirm YET (a directory not scanned, or the index still empty)\n * is still written: it is the handle the server answers `?session=<id>` for, and blanking the URL\n * instead would lose a deep link the operator just opened.\n */\n if (!known.has(handle) && agentIds.includes(handle)) return null;\n return handle;\n}\n","/**\n * A textarea the user can drag taller, remembered across reloads.\n *\n * Two panels needed this and only one had it: the todo editor shipped native resize +\n * `ResizeObserver` + persistence, while the GOAL box was a fixed `rows={3}`. A long goal then owned\n * three lines of a narrow panel permanently — reported as \"goalの枠をtodoみたいに伸縮できるようにしない\n * と長いgoalがあるときに画面占有率が強制的に高い\".\n *\n * Extracted rather than copied, because the interesting part is not the CSS. The native resize\n * handle writes an INLINE height on the element the browser chose, which does not survive:\n *\n * - a PREVIEW element replacing the textarea (the todo's checklist view — the drag vanished on\n * toggle until the height was lifted into a signal both views read);\n * - a reload.\n *\n * So the height lives in a signal, is written to `localStorage`, and is observed rather than read on\n * `pointerup`: a touch drag or an assistive resize produces no pointer event this code would see.\n */\n\nconst KEY_PREFIX = \"teapot.textareaH.\";\n\n/** the remembered height for a panel, or 0 when untouched */\nexport function storedTextareaHeight(key: string): number {\n try {\n const n = Number(localStorage.getItem(KEY_PREFIX + key) ?? \"\");\n return Number.isFinite(n) && n > 0 ? n : 0;\n } catch {\n return 0;\n }\n}\n\n/** persist a dragged height; sub-pixel churn is ignored by the caller, not here */\nexport function rememberTextareaHeight(key: string, px: number): void {\n try {\n localStorage.setItem(KEY_PREFIX + key, String(Math.round(px)));\n } catch {\n /* storage full or blocked — the drag still applies for this session */\n }\n}\n\n/**\n * Observe an element's height and report changes the user made.\n *\n * Returns the disconnect so the caller can `onCleanup` it. `onHeight` is deliberately called with\n * the LIVE box height, because the resize handle can only be seen through the element's own size.\n */\nexport function trackTextareaHeight(el: HTMLElement, onHeight: (px: number) => void): () => void {\n const ro = new ResizeObserver(() => {\n const h = el.offsetHeight;\n if (h > 0) onHeight(h);\n });\n ro.observe(el);\n return () => ro.disconnect();\n}\n","/**\n * Which timeline does a socket frame belong to? (#146, #54)\n *\n * The timeline is per SESSION while `select()` also sets the agent, so a PAST\n * session of the same agent can be displayed — an `agentId` alone cannot place a\n * frame.\n *\n * THE FALLBACK VIEW is what makes this subtle: `timelineId()` is the AGENT ID\n * until the session index lands (`latestSessionOf(id) ?? id`), and an event's\n * `session` is always a real session id. A plain `ev.session === timelineId()`\n * comparison therefore matched NOTHING in that window, so the socket went silent\n * and only REST moved the feed (#54: \"all bash stays running unless reloaded via\n * the API\").\n *\n * All four predicates below share `timelineAcceptsSession()`. Three separate\n * copies of that decision is how they drifted apart in the first place.\n */\n\n/**\n * Does a frame's session belong to the displayed timeline?\n *\n * @param shown the displayed handle: a session id, or the agent id while no\n * session is resolved (the fallback view)\n * @param agentId whose timeline it is — needed because the agent id is NOT a\n * session and must never be compared as one\n */\nexport function timelineAcceptsSession(\n frameSession: string | null | undefined,\n shown: string | null | undefined,\n agentId: string | null | undefined,\n): boolean {\n if (!shown) return true; // nothing resolved: no other session to confuse it with\n if (agentId && shown === agentId) return true; // fallback view — refusing this is #54\n if (typeof frameSession !== \"string\") return false;\n return frameSession === shown;\n}\n\n/** a socket `event` frame */\nexport function eventBelongsOnTimeline(\n ev: { agent?: string; session?: string } | null | undefined,\n selectedAgent: string | null,\n timelineSession: string | null,\n): boolean {\n if (!ev || !selectedAgent) return false;\n if (ev.agent !== selectedAgent) return false;\n return timelineAcceptsSession(ev.session, timelineSession, selectedAgent);\n}\n\n/**\n * A socket `llm-delta` frame.\n *\n * A frame without a `sessionId` is shown on NO timeline: it cannot be attributed,\n * and guessing is the bug. (The fallback exemption deliberately does not apply —\n * it would render another session's text as this one's.)\n */\nexport function deltaBelongsToTimeline(\n d: { agentId?: string; sessionId?: string | null } | null | undefined,\n selectedAgent: string | null,\n timelineSession: string | null,\n): boolean {\n if (!d || !selectedAgent) return false;\n if (d.agentId !== selectedAgent) return false;\n if (!d.sessionId) return false;\n return timelineAcceptsSession(d.sessionId, timelineSession, selectedAgent);\n}\n\n/**\n * Is the DISPLAYED timeline the one that is live? (#120, #133)\n *\n * The snapshot carries the session the agent is on; when that equals what we are\n * showing, the agent-wide live flag is the right answer.\n */\nexport function timelineIsLive(\n agent: { id: string; session?: string } | null | undefined,\n shown: string | null | undefined,\n agentLive: boolean,\n): boolean {\n if (!agentLive) return false;\n if (!agent || !shown) return true;\n if (shown === agent.id) return true; // fallback view, same rule as the frame gates\n if (!agent.session) return true;\n return agent.session === shown;\n}\n","/**\n * Terminal palette resolution + live re-theming (#137).\n *\n * Extracted from App.tsx so the CURSOR contract is testable by production\n * import: a DOM-less `node --test` runs this module as-is (no solid, no xterm\n * import — plain structural types). The #75 lesson: a test that greps the\n * source cannot see whether the cursor colour is ever SENT, and this exact\n * field was missing on light themes.\n *\n * The cursor is the field the light theme loses: xterm's default cursor does\n * not follow the palette, so a near-black cursor sat on a near-white\n * background. `cursor: foreground` / `cursorAccent: background` is visible on\n * BOTH themes, and stays overridable through `--term-cursor` /\n * `--term-cursor-accent` for themes that want an accent-coloured caret.\n */\n\n/** structural subset of xterm's ITheme we manage (keeps xterm out of tests) */\nexport interface XtermTheme {\n background?: string;\n foreground?: string;\n cursor?: string;\n cursorAccent?: string;\n}\n\n/** structural subset of xterm's Terminal we touch */\nexport interface XtermLike {\n options: { theme?: XtermTheme | undefined };\n}\n\n/** xterm palette pulled from the active theme's CSS variables (fallback: dark) */\nexport function themeColors(): XtermTheme {\n let bg = \"\";\n let fg = \"\";\n let cursor = \"\";\n let cursorAccent = \"\";\n try {\n const cs = getComputedStyle(document.documentElement);\n bg = cs.getPropertyValue(\"--term-bg\").trim();\n fg = cs.getPropertyValue(\"--term-fg\").trim();\n cursor = cs.getPropertyValue(\"--term-cursor\").trim();\n cursorAccent = cs.getPropertyValue(\"--term-cursor-accent\").trim();\n } catch { /* non-DOM context */ }\n // #137: name the cursor EXPLICITLY. Defaults follow fg/bg so the caret is\n // visible on light AND dark without every theme block carrying new vars.\n return {\n background: bg || \"#0d0e12\",\n foreground: fg || \"#dcdee4\",\n cursor: cursor || fg || \"#dcdee4\",\n cursorAccent: cursorAccent || bg || \"#0d0e12\",\n };\n}\n\n/** Re-apply the active theme's terminal palette to a live xterm session (#137). */\nexport function retintTerminal(s: XtermLike): void {\n const want = themeColors();\n const cur = s.options.theme;\n // the caller's effect runs on any theme signal read, so an unconditional\n // write would churn on unrelated re-renders. #137: the comparison must cover\n // the CURSOR fields too — a theme object that predates them (or a caret left\n // over from the other mode) matches bg/fg and stayed stale forever.\n if (\n cur &&\n cur.background === want.background &&\n cur.foreground === want.foreground &&\n cur.cursor === want.cursor &&\n cur.cursorAccent === want.cursorAccent\n ) {\n return;\n }\n // assigning `options.theme` is xterm's documented way to re-theme a live\n // terminal; it does not disturb the scrollback or the buffer contents\n s.options.theme = want;\n}\n","/**\n * What the right panel's provider dropdown does to the model field.\n *\n * The panel has two controls that must agree: `provider` and the model input.\n * They must not drift: a model belonging to one provider must never be carried\n * over to another endpoint.\n */\n\nexport interface ProviderLike {\n model?: string;\n}\n\nexport interface AgentLike {\n provider?: string;\n model?: string;\n}\n\n/** The provider a session resolves to: its own, else the configured default. */\nexport function effectiveProviderOf(\n agent: AgentLike | undefined,\n providers: Record<string, ProviderLike | undefined> | undefined,\n defaultProvider: string | undefined,\n): string {\n return agent?.provider || defaultProvider || Object.keys(providers ?? {})[0] || \"\";\n}\n\n/** The model a provider falls back to: its configured default, else \"\". */\nexport function providerDefaultModel(\n providers: Record<string, ProviderLike | undefined> | undefined,\n provider: string,\n): string {\n if (!provider) return \"\";\n return String(providers?.[provider]?.model ?? \"\").trim();\n}\n\n/**\n * The model the input must hold once the provider dropdown lands on\n * `toProvider`.\n *\n * The provider's configured default wins. With none configured, the agent's\n * current model is kept only when the dropdown is back on the provider that\n * model belongs to; otherwise the field is emptied rather than carrying a\n * foreign model across.\n */\nexport function modelOnProviderSwitch(\n providers: Record<string, ProviderLike | undefined> | undefined,\n toProvider: string,\n agent: AgentLike | undefined,\n): string {\n const fallback = providerDefaultModel(providers, toProvider);\n if (fallback) return fallback;\n if (agent && toProvider === (agent.provider ?? \"\")) return agent.model ?? \"\";\n return \"\";\n}\n\n/**\n * Placeholder for the model input — what an empty field would resolve to:\n * the session's own model while the dropdown points at its provider, else the\n * new provider's configured default.\n */\nexport function modelPlaceholderFor(\n providers: Record<string, ProviderLike | undefined> | undefined,\n provider: string,\n agent: AgentLike | undefined,\n agentProvider: string,\n): string {\n if (agent?.model && provider === agentProvider) return agent.model;\n return providerDefaultModel(providers, provider) || agent?.model || \"\";\n}\n\n/**\n * May the sync effect pull the provider dropdown back to the session's own\n * provider?\n *\n * Only when the operator has NOT touched the dropdown — that is the external\n * change (another tab, a restart) the re-sync exists for. Once touched, the\n * choice is theirs: without this, picking a provider with no default model\n * leaves the draft empty, the next poll reads that as \"not mid-edit\" and yanks\n * the dropdown back before `apply` can be pressed.\n */\nexport function mayResyncProvider(userTouchedProvider: boolean): boolean {\n return !userTouchedProvider;\n}\n","/**\n * The composer's textarea is a controlled input (`value={draft()}`), and Solid\n * writes the DOM node's `value` on every change of that signal.\n *\n * That write is what loses text on a Japanese keyboard. During an IME\n * composition the browser owns the textarea's contents: the pre-edit kana live\n * in the composition, not in `value`. Assigning `.value` mid-composition ENDS\n * the composition, and the characters typed so far are discarded with it —\n * reported as \"入力中のメッセージが消失する\".\n *\n * Measured, not guessed: an instrumented bundle in happy-dom counted TWO\n * `.value` writes per `input` event, both during a simulated composition\n * (`にほんご` written twice before `compositionend`).\n *\n * The fix is to stop writing while a composition is in progress. Every\n * composition ends with a `compositionend`/`input` pair, and that is when the\n * signal is synced, so nothing is lost — the write is deferred, not dropped.\n *\n * Pure so it can be tested under `node --test` without a DOM.\n */\n\n/**\n * Should a change of the draft signal be written back into the textarea?\n *\n * @param composing a composition is in progress RIGHT NOW\n * @param composingEnded a composition just ended and has not been written yet\n *\n * The second parameter exists because the ending must still land: the browser\n * fires `compositionend` and then `input`, and Solid's effect for THAT input may\n * already have run with `composing` false — but a caller that clears its flag\n * before the write would leave the final converted text unwritten. So the rule\n * is: write when nothing is composing, and never write while one is.\n */\nexport function shouldWriteComposerValue(composing: boolean): boolean {\n return !composing;\n}\n\n/**\n * A cheaper test of the same rule for the common path: is this write a no-op?\n *\n * Writing a value the node already holds still counts as a write to the DOM and\n * still disturbs an active composition (the browser cannot tell a redundant\n * assignment from a real one), so the check is on the VALUE, not on whether the\n * text \"changed\" from the signal's point of view.\n */\nexport function composerValueChanged(nodeValue: string, next: string): boolean {\n return nodeValue !== next;\n}\n","/**\n * Does the viewport follow the tail, and who moved it?\n *\n * ## Why this was rewritten (third time)\n *\n * Every previous version tried to infer \"did the reader scroll up?\" from geometry sampled at\n * two moments. That question is not answerable from geometry alone, because FOUR different\n * things change `scrollTop` or the floor under the reader:\n *\n * 1. the reader scrolls / drags the scrollbar / pans on touch\n * 2. WE write `scrollTop` to follow the tail (the delivery arrives asynchronously)\n * 3. content ABOVE shrinks and the browser CLAMPS `scrollTop` to the new floor\n * 4. the viewport shrinks (the composer growing) so the floor moves without `scrollTop` moving\n *\n * Cases 2 and 3 both look exactly like \"the reader moved up\" to a direction test, and case 4\n * looks like \"the reader is suddenly 40px from the tail\". That is why the symptom kept coming\n * back: each fix traded one misreading for another, and the constants (`TAIL_SLACK_PX = 32`)\n * were doing the work of hiding the ambiguity rather than resolving it.\n *\n * ## The rule now, taken from harnesses that get it right\n *\n * MEASURED in five production implementations (see the survey in `docs/`), two mechanisms\n * resolve cases 2-4 without guessing, and this file implements both:\n *\n * **A. The observed-top ledger** (`deepseek-harness`, `use-scroll-follow.ts`). Every\n * programmatic write records the resulting `scrollTop`. A scroll delivery is then classified by\n * asking whether the position matches `min(ledger, floor)`:\n *\n * movedByReader = |top - min(ledger, floor)| > 0.5\n *\n * The `min(ledger, floor)` is the whole trick. When content shrinks, the browser clamps\n * `scrollTop` to the NEW floor, so the delivery lands exactly on `min(ledger, floor)` and is\n * therefore NOT reader movement. When our own write is delivered late, it lands exactly on the\n * ledger and is NOT reader movement. Only a position off both is a person.\n *\n * **B. Height-change attribution** (`fluxer`, `ScrollManager.ts`). If the content height changed\n * since the last delivery, the delivery is LAYOUT, not the reader — the reader cannot change\n * `scrollHeight`. Fluxer forces \"still pinned\" in that case. This catches the remaining case\n * where a clamp and a re-growth race inside one frame.\n *\n * Neither mechanism uses a slack constant to decide intent. The threshold below only answers\n * \"is the tail visible\", which is a legitimate question with a legitimate tolerance.\n */\n\n/** the shape the feed measures on every scroll (kept name: many call sites use it) */\nexport type TailSample = Viewport;\n\nexport interface Viewport {\n /** the scroll offset */\n top: number;\n /** total content height (`scrollHeight`) */\n height: number;\n /** visible height (`clientHeight`) */\n viewport: number;\n}\n\n/**\n * How close counts as \"at the tail\".\n *\n * A real tolerance, not a fudge for ambiguity: content can stop a few pixels short of the floor\n * (`content-visibility` estimates, a fractional line height, a last row still being laid out),\n * and calling that \"the reader left\" is the bug this whole file is about. MEASURED values in\n * the implementations surveyed: 8 (fluxer's exact test), 10 (opencode), 24 (deepseek), 50\n * (open-webui's coarse test), 70 (use-stick-to-bottom's escape hatch). 24 is the middle of the\n * group that also does proper attribution, which is the only comparison that matters — a loose\n * threshold cannot rescue a broken classifier.\n */\nexport const AT_TAIL_PX = 24;\n\n/**\n * Hysteresis, from fluxer's `DEFAULT_STICKY_TOLERANCE`.\n *\n * Once following, stay following out to this distance. Without it a streaming bubble that\n * momentarily overshoots the floor unpins itself, which reads to the operator as \"it stopped\n * following for a second\".\n */\nexport const STICKY_PX = 64;\n\n/** the floor: the largest `scrollTop` that shows the bottom */\nexport function floorOf(v: Viewport): number {\n return Math.max(0, v.height - v.viewport);\n}\n\n/** signed distance to the tail; 0 when the content does not overflow at all */\nexport function distanceToTail(v: Viewport | null | undefined): number {\n if (!v) return Number.POSITIVE_INFINITY;\n return Math.max(0, v.height - v.top - v.viewport);\n}\n\n/** is the tail visible right now? `null` (no viewport mounted) is never at the tail */\nexport function atTail(v: Viewport | null | undefined, tolerance = AT_TAIL_PX): boolean {\n if (!v) return false;\n return distanceToTail(v) <= tolerance;\n}\n\n/**\n * What a scroll delivery means.\n *\n * `reader` is the ONLY outcome that may turn following off. Everything else leaves the state\n * exactly as it was.\n */\nexport type ScrollCause = \"reader\" | \"programmatic\" | \"layout\";\n\n/**\n * Classify a scroll delivery.\n *\n * @param now the viewport as delivered\n * @param ledger the `scrollTop` our last programmatic write produced, plus the height at the\n * time. `null` when we have not written since the last delivery.\n * @param lastHeight the content height at the previous delivery, to detect a layout change\n *\n * Order matters, and it is the order that fixes the reported bugs:\n *\n * 1. a height change means LAYOUT — the reader cannot change `scrollHeight`, so any delivery\n * after one is not evidence about intent\n * 2. a position on `min(ledger, floor)` means OUR WRITE, delivered late, or the browser\n * clamping after a shrink\n * 3. only then does a position change mean a person\n */\nexport function classifyScroll(\n now: Viewport,\n ledger: { top: number; height: number } | null,\n lastHeight: number | undefined,\n lastViewport?: number,\n): ScrollCause {\n /**\n * 0. THE VIEWPORT changed size. The composer growing or shrinking does exactly this, and it\n * moves the FLOOR without moving `scrollTop` — so a reader who was at the tail is suddenly\n * \"40px away\" without having touched anything. This is the reported bug that survived\n * three rewrites of the slack constant, because a slack constant cannot express \"the\n * viewport changed\"; it can only widen until the case is hidden again.\n */\n if (lastViewport !== undefined && Math.abs(now.viewport - lastViewport) > 0.5) return \"layout\";\n // 1. the content was resized since the last delivery: this is layout, full stop\n if (lastHeight !== undefined && Math.abs(now.height - lastHeight) > 0.5) return \"layout\";\n if (ledger) {\n // 2. exactly where our own write put it, or exactly the shrunken floor\n const expected = Math.min(ledger.top, floorOf(now));\n if (Math.abs(now.top - expected) <= 0.5) return \"programmatic\";\n }\n // 3. a position that is neither our write nor a clamp is a person\n return \"reader\";\n}\n\n/**\n * Should the viewport be pinned to the tail after a change?\n *\n * `following` is INTENT — it is only ever changed from a `reader` cause, or by arriving at the\n * tail. This function does not decide intent; it decides what intent implies for geometry.\n *\n * The hysteresis applies to KEEPING the state, not to acquiring it: arriving at the tail\n * acquires following at `AT_TAIL_PX`, while leaving it needs the reader to be past `STICKY_PX`.\n * That asymmetry is what makes a momentarily-undersized tail not drop follow.\n */\nexport function shouldPin(following: boolean, v: Viewport): boolean {\n if (!following) return false;\n return distanceToTail(v) <= STICKY_PX;\n}\n\n/**\n * The new following state after a delivery.\n *\n * @param following the intent before this delivery\n * @param cause the classification above\n * @param v the viewport as delivered\n */\nexport function nextFollowing(following: boolean, cause: ScrollCause, v: Viewport): boolean {\n /**\n * A LAYOUT delivery never changes intent; it only re-acquires when the tail is in view.\n *\n * The order matters. This used to test `atTail(v)` FIRST and return true, which meant a\n * reader who wheeled up 40px — still inside the 24px-plus-slack band around the tail — had\n * follow silently re-granted on the very delivery that recorded their move, and the next\n * layout change pinned them back. Reported as \"スクロール追従時にユーザーからのスクロールが\n * 無効化される\". A person moving away is intent, whatever distance they moved.\n */\n if (cause !== \"reader\") {\n // our own write, a browser clamp, or a resize: keep the state, but a delivery that lands\n // at the tail (because WE put it there) means the tail is being followed\n return following || atTail(v);\n }\n /**\n * A person moved. Arriving AT the tail (within the acquire tolerance) is them choosing to\n * follow again; anywhere else is them leaving.\n */\n return atTail(v);\n}\n\n/**\n * Should the \"jump to present\" pill be showing?\n *\n * Away from the tail is the whole condition; what makes it worth a control is that new output\n * has arrived since. A reader parked mid-history with nothing new happening does not need to be\n * told about it, and a pill that is always there is furniture.\n */\nexport function shouldShowJumpToPresent(following: boolean, v: Viewport): boolean {\n return !following && !atTail(v);\n}\n\n/** backward-compatible alias: distance from the tail, never negative */\nexport const gapToTail = distanceToTail;\n","/**\n * The height to give a textarea so it exactly fits its content.\n *\n * ## Why this cannot be computed from a fixed-height box\n *\n * A textarea with an explicit height reports `max(its height, its content)` as `scrollHeight`.\n * MEASURED: a 60px box holding one line of text reports 60 — there is NO expression on that\n * element that yields 20. So the content height is unrecoverable while the box is taller than\n * its content, and the only way to read it is to let the box collapse first.\n *\n * Three attempts tried to avoid the collapse by comparing numbers on the fixed-height box, and\n * each failed for this same reason:\n *\n * v0.34.7 `contentHeight <= offsetHeight` — always true at 1, 2 and 3 lines.\n * v0.34.8 compared against a remembered content height, but read it from a box that was\n * still tall, so the remembered value was the BOX height.\n * v0.35.10 compared `scrollHeight` against the content height last applied. On shrink the two\n * are equal (both are the box), so a shrink was never detected and the box never\n * came back down — reported as \"広がった入力枠が Ctrl+A Backspace もしくは中身を全部\n * けさないともとに戻らない\".\n *\n * So the collapse is REQUIRED. What has to be right is everything around it: the feed must not\n * treat the transient one-line layout as a real box change (it re-pins on every box change, so\n * the collapsed floor is pinned and then corrected — see `restoreAfterBoxChange`).\n *\n * @param scrollHeight the content height measured with the box at `height: auto`\n * @param maxHeight the cap; past this the box scrolls instead of growing\n */\nexport function composerHeight(scrollHeight: number, maxHeight: number): number {\n // a textarea always paints at least one line, even with no content\n return Math.max(1, Math.min(scrollHeight, maxHeight));\n}\n","/**\n * What an agent or session is CALLED on screen.\n *\n * Three places name the same thing — the left panel row, the header title, and `document.title` —\n * and they disagreed: the panel prefixed the session title (\"オーディオの問題は…\"), while the header\n * and the tab showed the raw id (`tyb2-9`), which is a slug the operator never typed. Reported as\n * \"`<title>` と上部バーのチャットタイトルが左パネルのタイトルじゃなくて、チャットのslugになってる\".\n *\n * One function, so a fourth place cannot pick a different rule.\n */\nexport type LabelSource = {\n id: string;\n /** the session's first usable prompt line, when the server has computed one */\n sessionTitle?: string;\n};\n\n/** The human name, falling back to the id — which is what a session with no prompt yet has. */\nexport const agentLabel = (a: LabelSource | undefined | null): string =>\n a ? a.sessionTitle?.trim() || a.id : \"\";\n\n/**\n * The same name, qualified with the id only when they differ.\n *\n * Used where an operator has to be able to MATCH the row to its id (the tooltip, the tab title):\n * repeating the id when it is already the label is noise, and hiding it when the label replaced it\n * is ambiguous between two sessions of one agent.\n */\nexport const agentLabelWithId = (a: LabelSource | undefined | null, extra?: string): string => {\n if (!a) return \"\";\n const label = agentLabel(a);\n const tail = extra ? ` — ${extra}` : \"\";\n return label === a.id ? `${label}${tail}` : `${label} — ${a.id}${tail}`;\n};\n","/**\n * Custom themes: a user-authored palette plus an optional background image.\n *\n * ## Why this is a module and not component state\n *\n * A theme used to be a hardcoded entry in `THEMES` plus a `[data-theme=\"…\"]` block in\n * `app.css`. That is fine for ten presets and impossible for a theme the operator invents:\n * neither a CSS file nor a literal list can be written from the browser. So a CUSTOM theme is\n * applied the other way round — as inline custom properties on `<html>`, which outrank the\n * stylesheet's `:root` values and need no stylesheet at all.\n *\n * The palette is exactly the eleven variables the presets define, because that is the whole\n * contract `app.css` relies on. Anything a preset can do, a custom theme can do.\n *\n * ## What is deliberately NOT here\n *\n * No arbitrary CSS. A theme is a colour palette and an image, so it cannot break layout or\n * reach outside the page.\n */\n\n/** the eleven colours every theme defines — the contract `app.css` expects */\nexport interface ThemePalette {\n bgDarkest: string;\n bgDark: string;\n bgMid: string;\n bgLight: string;\n fg: string;\n dim: string;\n line: string;\n acc: string;\n ok: string;\n warn: string;\n err: string;\n tool: string;\n termBg: string;\n termFg: string;\n}\n\n/** a theme the operator made */\nexport interface CustomTheme {\n /** stable id, used as the `data-theme` value and the storage key */\n id: string;\n label: string;\n mode: \"dark\" | \"light\";\n palette: ThemePalette;\n /**\n * Background image as a `url(...)`-able string: a `data:` URI (pasted or dropped, kept\n * self-contained so a reload still has it) or an http(s) URL.\n *\n * Kept as the CSS value rather than a File so it survives `localStorage` and can be applied\n * with one `background-image` write.\n */\n backgroundImage?: string;\n /** how much to dim the image so text stays readable over it; 0 = untouched */\n backgroundDim?: number;\n /**\n * How opaque code blocks, tool cards and embeds are over a background image.\n *\n * Those surfaces force a solid fill otherwise, which is what fixed a palette colour saved with\n * alpha from rendering machine output invisible. Fully opaque is the safe floor but a dull\n * ceiling: with a wallpaper behind the app you want to SEE it through the panels. Exposed as a\n * slider so the readability call belongs to the operator.\n *\n * Floored at 0.35 in `sanitizeTheme` — below that, monospace output over a busy photo stops\n * being readable, which is the bug the opaque rule existed to prevent.\n */\n surfaceAlpha?: number;\n /** the uploaded image's real byte size, shown in the editor; not persisted meaningfully */\n backgroundImageBytes?: number;\n}\n\n/** the palette variable names `app.css` reads, in the order a form should show them */\nexport const PALETTE_KEYS: { key: keyof ThemePalette; cssVar: string; label: string }[] = [\n { key: \"bgDarkest\", cssVar: \"--bg-darkest\", label: \"surface (deepest)\" },\n { key: \"bgDark\", cssVar: \"--bg-dark\", label: \"surface\" },\n { key: \"bgMid\", cssVar: \"--bg-mid\", label: \"surface (raised)\" },\n { key: \"bgLight\", cssVar: \"--bg-light\", label: \"surface (control)\" },\n { key: \"fg\", cssVar: \"--fg\", label: \"text\" },\n { key: \"dim\", cssVar: \"--dim\", label: \"text (muted)\" },\n { key: \"line\", cssVar: \"--line\", label: \"divider\" },\n { key: \"acc\", cssVar: \"--acc\", label: \"accent\" },\n { key: \"ok\", cssVar: \"--ok\", label: \"success\" },\n { key: \"warn\", cssVar: \"--warn\", label: \"warning\" },\n { key: \"err\", cssVar: \"--err\", label: \"error\" },\n { key: \"tool\", cssVar: \"--tool\", label: \"tool accent\" },\n { key: \"termBg\", cssVar: \"--term-bg\", label: \"terminal background\" },\n { key: \"termFg\", cssVar: \"--term-fg\", label: \"terminal text\" },\n];\n\nconst STORAGE_KEY = \"teapot.customThemes\";\n/** the whole picture is stored inline, so cap it: localStorage is ~5MB per origin */\nexport const MAX_BACKGROUND_BYTES = 1_500_000;\n\n/** a dark palette to start a new theme from — same values as the built-in dark theme */\nexport const DEFAULT_PALETTE: ThemePalette = {\n bgDarkest: \"#1a1c22\",\n bgDark: \"#232630\",\n bgMid: \"#2b2e39\",\n bgLight: \"#343845\",\n fg: \"#dcdee4\",\n dim: \"#9298a5\",\n line: \"#1d2027\",\n acc: \"#5865f2\",\n ok: \"#3ba55d\",\n warn: \"#faa81a\",\n err: \"#ed4245\",\n tool: \"#3ba0c9\",\n termBg: \"#0d0e12\",\n termFg: \"#dcdee4\",\n};\n\n/**\n * The BUILT-IN themes' palettes, mirroring the `[data-theme=\"…\"]` blocks in app.css.\n *\n * These exist so a theme can be PREVIEWED without applying it: the picker draws each theme as a\n * miniature of the UI (Misskey's `MkThemePreview` idea), which needs that theme's colours. A\n * preview used to probe the live document, but inserting a node from inside a render broke the\n * settings dialog (MEASURED: \"the config dialog renders no key inputs at all\").\n *\n * `test/theme-store.test.ts` fails if any of these drifts from app.css — the duplication is\n * unavoidable (a stylesheet cannot be read as data), so it is CHECKED instead of trusted.\n */\nexport const PRESET_PALETTES: Record<string, ThemePalette> = {\n \"dark\": { bgDarkest: \"#1a1c22\", bgDark: \"#232630\", bgMid: \"#2b2e39\", bgLight: \"#343845\", fg: \"#dcdee4\", dim: \"#9298a5\", line: \"#1d2027\", acc: \"#5865f2\", ok: \"#3ba55d\", warn: \"#faa81a\", err: \"#ed4245\", tool: \"#3ba0c9\", termBg: \"#0d0e12\", termFg: \"#dcdee4\" },\n \"midnight\": { bgDarkest: \"#0d0f18\", bgDark: \"#12141f\", bgMid: \"#1b1f31\", bgLight: \"#252a42\", fg: \"#dfe2f2\", dim: \"#8a90ad\", line: \"#0a0c14\", acc: \"#8b7cf7\", ok: \"#54c08a\", warn: \"#e5b567\", err: \"#ef6a6a\", tool: \"#6aa9e9\", termBg: \"#0a0c13\", termFg: \"#dfe2f2\" },\n \"tea\": { bgDarkest: \"#241c16\", bgDark: \"#2e241c\", bgMid: \"#3b2f24\", bgLight: \"#493b2d\", fg: \"#f0e4d2\", dim: \"#b39d82\", line: \"#1b140f\", acc: \"#d98e32\", ok: \"#7fa653\", warn: \"#e0b058\", err: \"#cf5b47\", tool: \"#c9975f\", termBg: \"#1d1712\", termFg: \"#ecdcc3\" },\n \"coffee\": { bgDarkest: \"#191410\", bgDark: \"#211a14\", bgMid: \"#30271e\", bgLight: \"#403527\", fg: \"#ede3d0\", dim: \"#a89478\", line: \"#120d07\", acc: \"#c68a4b\", ok: \"#8aa15c\", warn: \"#d9a441\", err: \"#c25450\", tool: \"#a67c52\", termBg: \"#15100c\", termFg: \"#e8dcc5\" },\n \"matcha\": { bgDarkest: \"#1b2217\", bgDark: \"#232b1e\", bgMid: \"#2f3a28\", bgLight: \"#3c4a33\", fg: \"#e8eeda\", dim: \"#9aab84\", line: \"#131a10\", acc: \"#8db64e\", ok: \"#6fae4e\", warn: \"#d8b13c\", err: \"#cd5c50\", tool: \"#5da88f\", termBg: \"#151b11\", termFg: \"#dfe8cb\" },\n \"matrix\": { bgDarkest: \"#060a06\", bgDark: \"#0a0f0a\", bgMid: \"#122116\", bgLight: \"#18301d\", fg: \"#c9f2cf\", dim: \"#6fa075\", line: \"#030603\", acc: \"#2fd558\", ok: \"#39c95f\", warn: \"#b8d977\", err: \"#ff6b6b\", tool: \"#57c99b\", termBg: \"#030503\", termFg: \"#33ff77\" },\n \"sunset\": { bgDarkest: \"#1c1422\", bgDark: \"#241b2b\", bgMid: \"#33253e\", bgLight: \"#452f52\", fg: \"#f2e6ea\", dim: \"#ab93a8\", line: \"#150e1b\", acc: \"#f2784b\", ok: \"#63b46f\", warn: \"#eda63d\", err: \"#e25563\", tool: \"#b06ac9\", termBg: \"#170f1d\", termFg: \"#f0dfe4\" },\n \"light\": { bgDarkest: \"#eceef4\", bgDark: \"#f6f7fa\", bgMid: \"#e2e5ee\", bgLight: \"#ffffff\", fg: \"#24272f\", dim: \"#5d6470\", line: \"#d8dbe4\", acc: \"#4757d8\", ok: \"#2b8a4b\", warn: \"#b97a0f\", err: \"#d83c3f\", tool: \"#2278a8\", termBg: \"#ffffff\", termFg: \"#24272f\" },\n \"strawberry\": { bgDarkest: \"#fbe4ea\", bgDark: \"#fdf0f3\", bgMid: \"#f7d4de\", bgLight: \"#fffafb\", fg: \"#4a2733\", dim: \"#96707e\", line: \"#f0ccd6\", acc: \"#e05575\", ok: \"#4d9e63\", warn: \"#c98a2d\", err: \"#d43d51\", tool: \"#b05687\", termBg: \"#fff5f8\", termFg: \"#4a2733\" },\n \"ramune\": { bgDarkest: \"#ddeff7\", bgDark: \"#ecf7fb\", bgMid: \"#c9e7f4\", bgLight: \"#fbfeff\", fg: \"#173342\", dim: \"#5b7d90\", line: \"#c2e2ef\", acc: \"#1d86ae\", ok: \"#3a9e6e\", warn: \"#cf9a2a\", err: \"#d64f5c\", tool: \"#3a9db8\", termBg: \"#f4fbfd\", termFg: \"#173342\" },\n};\n\n/** is this a colour a CSS custom property can hold? */\nconst isColour = (v: unknown): v is string =>\n typeof v === \"string\" && v.length > 0 && v.length <= 64 && !/[;{}]/.test(v);\n\n/**\n * Validate ONE stored theme.\n *\n * Anything can be in `localStorage` — a half-written value, a theme from a future version, or\n * text somebody edited by hand. A malformed palette that reached `style.setProperty` would\n * leave the UI with missing colours (transparent panels), which is much worse than falling\n * back to a default, so every field is checked and anything unexpected is dropped.\n */\nexport function sanitizeTheme(raw: unknown): CustomTheme | null {\n if (!raw || typeof raw !== \"object\") return null;\n const t = raw as Partial<CustomTheme>;\n if (typeof t.id !== \"string\" || !/^[a-z0-9-]{1,40}$/i.test(t.id)) return null;\n if (typeof t.label !== \"string\" || !t.label.trim()) return null;\n if (t.mode !== \"dark\" && t.mode !== \"light\") return null;\n const p = t.palette as Partial<ThemePalette> | undefined;\n if (!p || typeof p !== \"object\") return null;\n const palette = {} as ThemePalette;\n for (const { key } of PALETTE_KEYS) {\n if (!isColour(p[key])) return null;\n palette[key] = p[key]!;\n }\n const out: CustomTheme = { id: t.id, label: t.label.slice(0, 40), mode: t.mode, palette };\n /**\n * Three accepted shapes, and each is a decision rather than a convenience.\n *\n * `data:image/` — a theme saved by an older build. Still loaded, so an upgrade does not\n * silently drop someone's wallpaper.\n * `/api/assets/<name>` — where images live NOW: uploaded once, served by the server, unlimited\n * in size. This is the point of the change: a data URI had to fit in the ~5MB `localStorage`\n * quota shared with every other setting, so one phone photo broke the whole panel.\n * `http(s)://` — a theme pointing at an external image.\n *\n * Nothing else, so a stored value cannot smuggle `url(javascript:)` into the stylesheet.\n * The old length check is gone with the quota that justified it; the DATA-URI branch keeps a\n * bound because those still consume storage.\n */\n if (typeof t.backgroundImage === \"string\") {\n const img = t.backgroundImage;\n const isAsset = /^\\/api\\/assets\\/[a-f0-9]{32}\\.(png|jpe?g|gif|webp|avif)$/i.test(img);\n const isData = /^data:image\\//.test(img) && img.length <= MAX_BACKGROUND_BYTES;\n const isRemote = /^https?:\\/\\//.test(img);\n if (isAsset || isData || isRemote) out.backgroundImage = img;\n }\n if (typeof t.backgroundDim === \"number\" && Number.isFinite(t.backgroundDim)) {\n out.backgroundDim = Math.min(0.9, Math.max(0, t.backgroundDim));\n }\n if (typeof t.backgroundImageBytes === \"number\" && Number.isFinite(t.backgroundImageBytes)) {\n out.backgroundImageBytes = Math.max(0, Math.round(t.backgroundImageBytes));\n }\n if (typeof t.surfaceAlpha === \"number\" && Number.isFinite(t.surfaceAlpha)) {\n // floored, not merely clamped to (0,1): see `surfaceAlpha` — near-zero makes machine output\n // unreadable over the image, which is the bug the opaque rule was introduced to fix\n out.surfaceAlpha = Math.min(1, Math.max(0.35, t.surfaceAlpha));\n }\n return out;\n}\n\n/** read every stored custom theme, dropping anything malformed */\nexport function loadCustomThemes(): CustomTheme[] {\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (!raw) return [];\n const parsed = JSON.parse(raw);\n if (!Array.isArray(parsed)) return [];\n return parsed.map(sanitizeTheme).filter((t): t is CustomTheme => t !== null);\n } catch {\n return [];\n }\n}\n\n/**\n * Persist the custom themes, returning what the write REJECTED.\n *\n * A background image is the only unbounded thing here, so an over-quota theme must be reported\n * rather than silently dropped: the operator would otherwise save a theme, reload, and find it\n * gone.\n */\nexport function saveCustomThemes(themes: CustomTheme[]): { ok: boolean; error?: string } {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(themes));\n /**\n * …and push to the SERVER, which is the durable copy.\n *\n * `localStorage` remains the cache the first paint reads (the palette must be right before any\n * network round trip, or the app flashes the default theme), but it is per-browser and per\n * origin — a theme made on the desktop did not exist on a phone, in another browser, or after\n * clearing site data. Asked for as \"カスタムテーマをlocalStorageじゃなくてサーバーで管理するように\n * したい\".\n *\n * Deliberately fire-and-forget: a failed push must not fail the save. The theme IS usable in\n * this browser, and reporting an error here would claim the opposite. The next successful save\n * catches the server up.\n */\n void fetch(\"/api/themes\", {\n method: \"PUT\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ themes }),\n }).catch(() => {});\n return { ok: true };\n } catch (err) {\n const e = err as { name?: string };\n return {\n ok: false,\n error:\n e.name === \"QuotaExceededError\" || /quota/i.test(String((err as Error).message))\n ? \"storage is full — that background image is too large. Try a smaller one, or remove another theme.\"\n : `could not save: ${(err as Error).message}`,\n };\n }\n}\n\n/**\n * Read the themes the SERVER holds, or `null` when it has none to offer.\n *\n * `null` (not `[]`) matters: an empty array is a real answer meaning \"you have no themes\", and the\n * caller must not overwrite the local cache with it before it has ever saved anything. A server\n * that has no `customThemes` yet — every existing install — returns `[]`, and the local themes are\n * then pushed up rather than replaced by nothing.\n */\nexport async function loadCustomThemesFromServer(): Promise<CustomTheme[] | null> {\n try {\n const r = await fetch(\"/api/themes\");\n if (!r.ok) return null;\n const body = (await r.json()) as { themes?: unknown };\n if (!Array.isArray(body.themes)) return null;\n return body.themes.map(sanitizeTheme).filter((t): t is CustomTheme => t !== null);\n } catch {\n return null;\n }\n}\n\n/** a fresh id that cannot collide with a preset or an earlier custom theme */\nexport function newThemeId(taken: readonly string[]): string {\n for (let i = 0; ; i++) {\n const id = `custom-${Date.now().toString(36)}${i ? `-${i}` : \"\"}`;\n if (!taken.includes(id)) return id;\n }\n}\n\n/**\n * Apply a custom theme to `<html>` as INLINE custom properties, or clear them.\n *\n * Passing `null` removes every property this function owns, so switching back to a preset is\n * clean — a leftover `--bg-dark` from a custom theme would keep overriding the preset's\n * colours and the UI would be half one theme and half the other.\n */\nexport function applyCustomTheme(root: HTMLElement, theme: CustomTheme | null): void {\n /**\n * Write ONLY what changed.\n *\n * The editor calls this on every keystroke of a colour field, and the effect driving it runs\n * whenever the theme list changes. This used to remove all 14 variables and re-set all 14 on\n * every call, and every `setProperty` invalidates style for the whole document — so typing\n * `#5865f2` into the hex field re-resolved the entire UI six times.\n *\n * Comparing against what is already on `<html>` makes an unchanged palette a no-op, which is\n * what keeps a live preview affordable.\n */\n /**\n * The four SURFACE levels are NOT written inline when a wallpaper is set.\n *\n * The stylesheet remaps `--bg-darkest`/`--bg-dark`/`--bg-mid`/`--bg-light` to translucent\n * `color-mix()` values under `html[data-bg-image=\"on\"]`, mixing against `--bg-*-solid`. An inline\n * custom property on `<html>` BEATS that rule — inline styles win the cascade — so writing them\n * here silently disabled the whole transparency feature. MEASURED: a surface with an inline\n * `--bg-darkest` computed to opaque `rgb(26,28,34)` while the same variable without the inline\n * value computed to `color(srgb … / 0.5)`.\n *\n * Reported as \"インラインコードブロック、tool、goal、プロンプト欄など (surfaces)の透明設定が効いて\n * ない\" — every surface, because every surface reads one of these four.\n *\n * So with an image the four names are left to the stylesheet and only the `-solid` bases are\n * written (below). Without one they are written inline as before, which is how a custom palette\n * overrides a preset.\n */\n const SURFACE_VARS = new Set([\"--bg-darkest\", \"--bg-dark\", \"--bg-mid\", \"--bg-light\"]);\n const hasImage = !!theme?.backgroundImage;\n for (const { key, cssVar } of PALETTE_KEYS) {\n const want = theme ? theme.palette[key] : \"\";\n if (hasImage && SURFACE_VARS.has(cssVar)) {\n // hand the surface names back to the stylesheet, which owns the translucency\n if (root.style.getPropertyValue(cssVar)) root.style.removeProperty(cssVar);\n continue;\n }\n if (root.style.getPropertyValue(cssVar) === want) continue;\n if (want) root.style.setProperty(cssVar, want);\n else root.style.removeProperty(cssVar);\n }\n /**\n * `--bg-image` is GONE: the wallpaper is an `<img srcset>` layer now (see `.bgphoto` in\n * app.css), because a CSS `background-image` cannot carry `srcset` — which is the whole point,\n * letting the browser download the width its display area needs instead of a 6000px photo.\n *\n * Only the DIM value is still a custom property, because the image element reads it.\n */\n const wantDim = theme?.backgroundImage ? String(theme.backgroundDim ?? 0.55) : \"\";\n // only meaningful over an image; cleared otherwise so a plain theme is untouched\n const wantAlpha = theme?.backgroundImage ? String(theme.surfaceAlpha ?? 0.82) : \"\";\n for (const [prop, want] of [\n [\"--bg-image-dim\", wantDim],\n [\"--surface-alpha\", wantAlpha],\n ] as const) {\n if (root.style.getPropertyValue(prop) === want) continue;\n if (want) root.style.setProperty(prop, want);\n else root.style.removeProperty(prop);\n }\n /**\n * `data-bg-image` lets the stylesheet force CONTENT surfaces opaque.\n *\n * With a photo behind the app, anything that is not fully opaque lets it show through text —\n * and a palette value legitimately can be semi-transparent: `normalizeColour` accepts\n * `#rrggbbaa`, so a theme whose `--bg-darkest` was saved as `#1a1c2200` renders code blocks and\n * tool logs at ZERO opacity. Reported as \"背景画像入れてるときにコードブロックとかtoolログとかが\n * 透明度0で表示されてる\".\n *\n * Rather than police the palette (a translucent surface is a legitimate design choice for a\n * plain theme), the stylesheet uses this attribute to guarantee that the surfaces holding\n * CODE AND TOOL OUTPUT are opaque whenever there is an image to see through them. Legibility of\n * machine output is not a place for a transparency decision to reach.\n */\n // `dataset` is optional in the signature's shape because a test can pass a bare style holder;\n // the attribute is only an optimisation for the stylesheet and its absence must not throw\n if (theme?.backgroundImage) {\n if (root.dataset) root.dataset.bgImage = \"on\";\n /**\n * Alpha-stripped versions of ALL FOUR surface levels.\n *\n * The stylesheet remaps `--bg-darkest`/`--bg-dark`/`--bg-mid`/`--bg-light` to translucent\n * `color-mix()` values when an image is set, and mixes against these `-solid` ones. CSS cannot\n * strip alpha from a colour it is handed, so `#rrggbbaa` → `#rrggbb` happens here.\n *\n * Four, not one: naming only the deepest was the same mistake as naming only some SELECTORS —\n * the levels that were not stripped either lost their translucency or, worse, mixed against a\n * half-transparent base and came out invisible.\n */\n for (const [name, value] of [\n [\"--bg-darkest-solid\", theme.palette.bgDarkest],\n [\"--bg-dark-solid\", theme.palette.bgDark],\n [\"--bg-mid-solid\", theme.palette.bgMid],\n [\"--bg-light-solid\", theme.palette.bgLight],\n ] as const) {\n const solid = opaque(value);\n if (root.style.getPropertyValue(name) !== solid) root.style.setProperty(name, solid);\n }\n } else {\n if (root.dataset) delete root.dataset.bgImage;\n for (const name of [\"--bg-darkest-solid\", \"--bg-dark-solid\", \"--bg-mid-solid\", \"--bg-light-solid\"]) {\n root.style.removeProperty(name);\n }\n }\n}\n\n/** `#rrggbbaa` → `#rrggbb`; anything else is returned unchanged (it has no alpha to strip) */\nexport function opaque(colour: string): string {\n const m = /^#([0-9a-f]{6})[0-9a-f]{2}$/i.exec(colour.trim());\n return m ? `#${m[1]}` : colour;\n}\n\n/**\n * A pasted colour, normalised to a `#rrggbb` string, or `null`.\n *\n * The picker shows a native colour input (always `#rrggbb`) next to a text field, and people\n * paste from design tools: `#RGB`, `#RRGGBBAA` and a bare `rrggbb` all reach that field.\n */\nexport function normalizeColour(input: string): string | null {\n const s = input.trim().toLowerCase();\n const m = /^#?([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/.exec(s);\n if (!m) return null;\n const hex = m[1]!;\n if (hex.length === 3) return `#${hex[0]}${hex[0]}${hex[1]}${hex[1]}${hex[2]}${hex[2]}`;\n return `#${hex}`;\n}\n\n/**\n * Decide which theme id to actually apply, given what was stored.\n *\n * A stored id can name a theme that no longer exists: deleted in another tab, dropped by\n * `saveCustomThemes` when storage was full, or left over from an older build. `data-theme` was\n * set to that dead id, which matches neither `:root` nor any `[data-theme]` block — so the page\n * had NO palette at all: every surface transparent and unreadable, with no visible way back.\n *\n * Returns the id to use and whether the caller should repair the stored value (so a reload\n * agrees with the screen instead of retrying the dead id forever).\n */\nexport function resolveActiveTheme(args: {\n /** the id read from storage / state */\n want: string;\n /** ids of the custom themes that exist */\n customIds: readonly string[];\n /** ids of the built-in themes that exist */\n presetIds: readonly string[];\n /** used when nothing matches; must itself be a valid preset */\n fallback?: string;\n}): { active: string; repaired: boolean } {\n const known = args.customIds.includes(args.want) || args.presetIds.includes(args.want);\n if (known) return { active: args.want, repaired: false };\n const fallback = args.fallback && args.presetIds.includes(args.fallback) ? args.fallback : \"dark\";\n return {\n active: args.presetIds.includes(fallback) ? fallback : (args.presetIds[0] ?? \"dark\"),\n repaired: true,\n };\n}\n","/**\n * Copyright (c) 2014-2024 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar zs=Object.defineProperty;var Rl=Object.getOwnPropertyDescriptor;var Ll=(s,t)=>{for(var e in t)zs(s,e,{get:t[e],enumerable:!0})};var M=(s,t,e,i)=>{for(var r=i>1?void 0:i?Rl(t,e):t,n=s.length-1,o;n>=0;n--)(o=s[n])&&(r=(i?o(t,e,r):o(r))||r);return i&&r&&zs(t,e,r),r},S=(s,t)=>(e,i)=>t(e,i,s);var Gs=\"Terminal input\",mi={get:()=>Gs,set:s=>Gs=s},$s=\"Too much output to announce, navigate to rows manually to read\",_i={get:()=>$s,set:s=>$s=s};function Al(s){return s.replace(/\\r?\\n/g,\"\\r\")}function kl(s,t){return t?\"\\x1B[200~\"+s+\"\\x1B[201~\":s}function Vs(s,t){s.clipboardData&&s.clipboardData.setData(\"text/plain\",t.selectionText),s.preventDefault()}function qs(s,t,e,i){if(s.stopPropagation(),s.clipboardData){let r=s.clipboardData.getData(\"text/plain\");Cn(r,t,e,i)}}function Cn(s,t,e,i){s=Al(s),s=kl(s,e.decPrivateModes.bracketedPasteMode&&i.rawOptions.ignoreBracketedPasteMode!==!0),e.triggerDataEvent(s,!0),t.value=\"\"}function Mn(s,t,e){let i=e.getBoundingClientRect(),r=s.clientX-i.left-10,n=s.clientY-i.top-10;t.style.width=\"20px\",t.style.height=\"20px\",t.style.left=`${r}px`,t.style.top=`${n}px`,t.style.zIndex=\"1000\",t.focus()}function Pn(s,t,e,i,r){Mn(s,t,e),r&&i.rightClickSelect(s),t.value=i.selectionText,t.select()}function Ce(s){return s>65535?(s-=65536,String.fromCharCode((s>>10)+55296)+String.fromCharCode(s%1024+56320)):String.fromCharCode(s)}function It(s,t=0,e=s.length){let i=\"\";for(let r=t;r<e;++r){let n=s[r];n>65535?(n-=65536,i+=String.fromCharCode((n>>10)+55296)+String.fromCharCode(n%1024+56320)):i+=String.fromCharCode(n)}return i}var er=class{constructor(){this._interim=0}clear(){this._interim=0}decode(t,e){let i=t.length;if(!i)return 0;let r=0,n=0;if(this._interim){let o=t.charCodeAt(n++);56320<=o&&o<=57343?e[r++]=(this._interim-55296)*1024+o-56320+65536:(e[r++]=this._interim,e[r++]=o),this._interim=0}for(let o=n;o<i;++o){let l=t.charCodeAt(o);if(55296<=l&&l<=56319){if(++o>=i)return this._interim=l,r;let a=t.charCodeAt(o);56320<=a&&a<=57343?e[r++]=(l-55296)*1024+a-56320+65536:(e[r++]=l,e[r++]=a);continue}l!==65279&&(e[r++]=l)}return r}},tr=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(t,e){let i=t.length;if(!i)return 0;let r=0,n,o,l,a,u=0,h=0;if(this.interim[0]){let _=!1,p=this.interim[0];p&=(p&224)===192?31:(p&240)===224?15:7;let m=0,f;for(;(f=this.interim[++m]&63)&&m<4;)p<<=6,p|=f;let A=(this.interim[0]&224)===192?2:(this.interim[0]&240)===224?3:4,R=A-m;for(;h<R;){if(h>=i)return 0;if(f=t[h++],(f&192)!==128){h--,_=!0;break}else this.interim[m++]=f,p<<=6,p|=f&63}_||(A===2?p<128?h--:e[r++]=p:A===3?p<2048||p>=55296&&p<=57343||p===65279||(e[r++]=p):p<65536||p>1114111||(e[r++]=p)),this.interim.fill(0)}let c=i-4,d=h;for(;d<i;){for(;d<c&&!((n=t[d])&128)&&!((o=t[d+1])&128)&&!((l=t[d+2])&128)&&!((a=t[d+3])&128);)e[r++]=n,e[r++]=o,e[r++]=l,e[r++]=a,d+=4;if(n=t[d++],n<128)e[r++]=n;else if((n&224)===192){if(d>=i)return this.interim[0]=n,r;if(o=t[d++],(o&192)!==128){d--;continue}if(u=(n&31)<<6|o&63,u<128){d--;continue}e[r++]=u}else if((n&240)===224){if(d>=i)return this.interim[0]=n,r;if(o=t[d++],(o&192)!==128){d--;continue}if(d>=i)return this.interim[0]=n,this.interim[1]=o,r;if(l=t[d++],(l&192)!==128){d--;continue}if(u=(n&15)<<12|(o&63)<<6|l&63,u<2048||u>=55296&&u<=57343||u===65279)continue;e[r++]=u}else if((n&248)===240){if(d>=i)return this.interim[0]=n,r;if(o=t[d++],(o&192)!==128){d--;continue}if(d>=i)return this.interim[0]=n,this.interim[1]=o,r;if(l=t[d++],(l&192)!==128){d--;continue}if(d>=i)return this.interim[0]=n,this.interim[1]=o,this.interim[2]=l,r;if(a=t[d++],(a&192)!==128){d--;continue}if(u=(n&7)<<18|(o&63)<<12|(l&63)<<6|a&63,u<65536||u>1114111)continue;e[r++]=u}}return r}};var ir=\"\";var we=\" \";var De=class s{constructor(){this.fg=0;this.bg=0;this.extended=new rt}static toColorRGB(t){return[t>>>16&255,t>>>8&255,t&255]}static fromColorRGB(t){return(t[0]&255)<<16|(t[1]&255)<<8|t[2]&255}clone(){let t=new s;return t.fg=this.fg,t.bg=this.bg,t.extended=this.extended.clone(),t}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)===50331648}isBgRGB(){return(this.bg&50331648)===50331648}isFgPalette(){return(this.fg&50331648)===16777216||(this.fg&50331648)===33554432}isBgPalette(){return(this.bg&50331648)===16777216||(this.bg&50331648)===33554432}isFgDefault(){return(this.fg&50331648)===0}isBgDefault(){return(this.bg&50331648)===0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===16777216||(this.extended.underlineColor&50331648)===33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===0:this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},rt=class s{constructor(t=0,e=0){this._ext=0;this._urlId=0;this._ext=t,this._urlId=e}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(t){this._ext=t}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(t){this._ext&=-469762049,this._ext|=t<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(t){this._ext&=-67108864,this._ext|=t&67108863}get urlId(){return this._urlId}set urlId(t){this._urlId=t}get underlineVariantOffset(){let t=(this._ext&3758096384)>>29;return t<0?t^4294967288:t}set underlineVariantOffset(t){this._ext&=536870911,this._ext|=t<<29&3758096384}clone(){return new s(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}};var q=class s extends De{constructor(){super(...arguments);this.content=0;this.fg=0;this.bg=0;this.extended=new rt;this.combinedData=\"\"}static fromCharData(e){let i=new s;return i.setFromCharData(e),i}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?Ce(this.content&2097151):\"\"}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(e){this.fg=e[0],this.bg=0;let i=!1;if(e[1].length>2)i=!0;else if(e[1].length===2){let r=e[1].charCodeAt(0);if(55296<=r&&r<=56319){let n=e[1].charCodeAt(1);56320<=n&&n<=57343?this.content=(r-55296)*1024+n-56320+65536|e[2]<<22:i=!0}else i=!0}else this.content=e[1].charCodeAt(0)|e[2]<<22;i&&(this.combinedData=e[1],this.content=2097152|e[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}};var js=\"di$target\",Hn=\"di$dependencies\",Fn=new Map;function Xs(s){return s[Hn]||[]}function ie(s){if(Fn.has(s))return Fn.get(s);let t=function(e,i,r){if(arguments.length!==3)throw new Error(\"@IServiceName-decorator can only be used to decorate a parameter\");Pl(t,e,r)};return t._id=s,Fn.set(s,t),t}function Pl(s,t,e){t[js]===t?t[Hn].push({id:s,index:e}):(t[Hn]=[{id:s,index:e}],t[js]=t)}var F=ie(\"BufferService\"),rr=ie(\"CoreMouseService\"),ge=ie(\"CoreService\"),Zs=ie(\"CharsetService\"),xt=ie(\"InstantiationService\");var nr=ie(\"LogService\"),H=ie(\"OptionsService\"),sr=ie(\"OscLinkService\"),Js=ie(\"UnicodeService\"),Be=ie(\"DecorationService\");var wt=class{constructor(t,e,i){this._bufferService=t;this._optionsService=e;this._oscLinkService=i}provideLinks(t,e){let i=this._bufferService.buffer.lines.get(t-1);if(!i){e(void 0);return}let r=[],n=this._optionsService.rawOptions.linkHandler,o=new q,l=i.getTrimmedLength(),a=-1,u=-1,h=!1;for(let c=0;c<l;c++)if(!(u===-1&&!i.hasContent(c))){if(i.loadCell(c,o),o.hasExtendedAttrs()&&o.extended.urlId)if(u===-1){u=c,a=o.extended.urlId;continue}else h=o.extended.urlId!==a;else u!==-1&&(h=!0);if(h||u!==-1&&c===l-1){let d=this._oscLinkService.getLinkData(a)?.uri;if(d){let _={start:{x:u+1,y:t},end:{x:c+(!h&&c===l-1?1:0),y:t}},p=!1;if(!n?.allowNonHttpProtocols)try{let m=new URL(d);[\"http:\",\"https:\"].includes(m.protocol)||(p=!0)}catch{p=!0}p||r.push({text:d,range:_,activate:(m,f)=>n?n.activate(m,f,_):Ol(m,f),hover:(m,f)=>n?.hover?.(m,f,_),leave:(m,f)=>n?.leave?.(m,f,_)})}h=!1,o.hasExtendedAttrs()&&o.extended.urlId?(u=c,a=o.extended.urlId):(u=-1,a=-1)}}e(r)}};wt=M([S(0,F),S(1,H),S(2,sr)],wt);function Ol(s,t){if(confirm(`Do you want to navigate to ${t}?\n\nWARNING: This link could potentially be dangerous`)){let i=window.open();if(i){try{i.opener=null}catch{}i.location.href=t}else console.warn(\"Opening link blocked as opener could not be cleared\")}}var nt=ie(\"CharSizeService\"),ae=ie(\"CoreBrowserService\"),Dt=ie(\"MouseService\"),ce=ie(\"RenderService\"),Qs=ie(\"SelectionService\"),or=ie(\"CharacterJoinerService\"),Re=ie(\"ThemeService\"),lr=ie(\"LinkProviderService\");var Wn=class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(t){setTimeout(()=>{throw t.stack?ar.isErrorNoTelemetry(t)?new ar(t.message+`\n\n`+t.stack):new Error(t.message+`\n\n`+t.stack):t},0)}}addListener(t){return this.listeners.push(t),()=>{this._removeListener(t)}}emit(t){this.listeners.forEach(e=>{e(t)})}_removeListener(t){this.listeners.splice(this.listeners.indexOf(t),1)}setUnexpectedErrorHandler(t){this.unexpectedErrorHandler=t}getUnexpectedErrorHandler(){return this.unexpectedErrorHandler}onUnexpectedError(t){this.unexpectedErrorHandler(t),this.emit(t)}onUnexpectedExternalError(t){this.unexpectedErrorHandler(t)}},Bl=new Wn;function Lt(s){Nl(s)||Bl.onUnexpectedError(s)}var Un=\"Canceled\";function Nl(s){return s instanceof bi?!0:s instanceof Error&&s.name===Un&&s.message===Un}var bi=class extends Error{constructor(){super(Un),this.name=this.message}};function eo(s){return s?new Error(`Illegal argument: ${s}`):new Error(\"Illegal argument\")}var ar=class s extends Error{constructor(t){super(t),this.name=\"CodeExpectedError\"}static fromError(t){if(t instanceof s)return t;let e=new s;return e.message=t.message,e.stack=t.stack,e}static isErrorNoTelemetry(t){return t.name===\"CodeExpectedError\"}},Rt=class s extends Error{constructor(t){super(t||\"An unexpected bug occurred.\"),Object.setPrototypeOf(this,s.prototype)}};function Fl(s,t,e=0,i=s.length){let r=e,n=i;for(;r<n;){let o=Math.floor((r+n)/2);t(s[o])?r=o+1:n=o}return r-1}var cr=class cr{constructor(t){this._array=t;this._findLastMonotonousLastIdx=0}findLastMonotonous(t){if(cr.assertInvariants){if(this._prevFindLastPredicate){for(let i of this._array)if(this._prevFindLastPredicate(i)&&!t(i))throw new Error(\"MonotonousArray: current predicate must be weaker than (or equal to) the previous predicate.\")}this._prevFindLastPredicate=t}let e=Fl(this._array,t,this._findLastMonotonousLastIdx);return this._findLastMonotonousLastIdx=e+1,e===-1?void 0:this._array[e]}};cr.assertInvariants=!1;var to=cr;function Se(s,t=0){return s[s.length-(1+t)]}var ro;(l=>{function s(a){return a<0}l.isLessThan=s;function t(a){return a<=0}l.isLessThanOrEqual=t;function e(a){return a>0}l.isGreaterThan=e;function i(a){return a===0}l.isNeitherLessOrGreaterThan=i,l.greaterThan=1,l.lessThan=-1,l.neitherLessOrGreaterThan=0})(ro||={});function no(s,t){return(e,i)=>t(s(e),s(i))}var so=(s,t)=>s-t;var At=class At{constructor(t){this.iterate=t}forEach(t){this.iterate(e=>(t(e),!0))}toArray(){let t=[];return this.iterate(e=>(t.push(e),!0)),t}filter(t){return new At(e=>this.iterate(i=>t(i)?e(i):!0))}map(t){return new At(e=>this.iterate(i=>e(t(i))))}some(t){let e=!1;return this.iterate(i=>(e=t(i),!e)),e}findFirst(t){let e;return this.iterate(i=>t(i)?(e=i,!1):!0),e}findLast(t){let e;return this.iterate(i=>(t(i)&&(e=i),!0)),e}findLastMaxBy(t){let e,i=!0;return this.iterate(r=>((i||ro.isGreaterThan(t(r,e)))&&(i=!1,e=r),!0)),e}};At.empty=new At(t=>{});var io=At;function co(s,t){let e=Object.create(null);for(let i of s){let r=t(i),n=e[r];n||(n=e[r]=[]),n.push(i)}return e}var lo,ao,oo=class{constructor(t,e){this.toKey=e;this._map=new Map;this[lo]=\"SetWithKey\";for(let i of t)this.add(i)}get size(){return this._map.size}add(t){let e=this.toKey(t);return this._map.set(e,t),this}delete(t){return this._map.delete(this.toKey(t))}has(t){return this._map.has(this.toKey(t))}*entries(){for(let t of this._map.values())yield[t,t]}keys(){return this.values()}*values(){for(let t of this._map.values())yield t}clear(){this._map.clear()}forEach(t,e){this._map.forEach(i=>t.call(e,i,i,this))}[(ao=Symbol.iterator,lo=Symbol.toStringTag,ao)](){return this.values()}};var ur=class{constructor(){this.map=new Map}add(t,e){let i=this.map.get(t);i||(i=new Set,this.map.set(t,i)),i.add(e)}delete(t,e){let i=this.map.get(t);i&&(i.delete(e),i.size===0&&this.map.delete(t))}forEach(t,e){let i=this.map.get(t);i&&i.forEach(e)}get(t){let e=this.map.get(t);return e||new Set}};function Kn(s,t){let e=this,i=!1,r;return function(){if(i)return r;if(i=!0,t)try{r=s.apply(e,arguments)}finally{t()}else r=s.apply(e,arguments);return r}}var zn;(O=>{function s(I){return I&&typeof I==\"object\"&&typeof I[Symbol.iterator]==\"function\"}O.is=s;let t=Object.freeze([]);function e(){return t}O.empty=e;function*i(I){yield I}O.single=i;function r(I){return s(I)?I:i(I)}O.wrap=r;function n(I){return I||t}O.from=n;function*o(I){for(let k=I.length-1;k>=0;k--)yield I[k]}O.reverse=o;function l(I){return!I||I[Symbol.iterator]().next().done===!0}O.isEmpty=l;function a(I){return I[Symbol.iterator]().next().value}O.first=a;function u(I,k){let P=0;for(let oe of I)if(k(oe,P++))return!0;return!1}O.some=u;function h(I,k){for(let P of I)if(k(P))return P}O.find=h;function*c(I,k){for(let P of I)k(P)&&(yield P)}O.filter=c;function*d(I,k){let P=0;for(let oe of I)yield k(oe,P++)}O.map=d;function*_(I,k){let P=0;for(let oe of I)yield*k(oe,P++)}O.flatMap=_;function*p(...I){for(let k of I)yield*k}O.concat=p;function m(I,k,P){let oe=P;for(let Me of I)oe=k(oe,Me);return oe}O.reduce=m;function*f(I,k,P=I.length){for(k<0&&(k+=I.length),P<0?P+=I.length:P>I.length&&(P=I.length);k<P;k++)yield I[k]}O.slice=f;function A(I,k=Number.POSITIVE_INFINITY){let P=[];if(k===0)return[P,I];let oe=I[Symbol.iterator]();for(let Me=0;Me<k;Me++){let Pe=oe.next();if(Pe.done)return[P,O.empty()];P.push(Pe.value)}return[P,{[Symbol.iterator](){return oe}}]}O.consume=A;async function R(I){let k=[];for await(let P of I)k.push(P);return Promise.resolve(k)}O.asyncToArray=R})(zn||={});var Wl=!1,dt=null,hr=class hr{constructor(){this.livingDisposables=new Map}getDisposableData(t){let e=this.livingDisposables.get(t);return e||(e={parent:null,source:null,isSingleton:!1,value:t,idx:hr.idx++},this.livingDisposables.set(t,e)),e}trackDisposable(t){let e=this.getDisposableData(t);e.source||(e.source=new Error().stack)}setParent(t,e){let i=this.getDisposableData(t);i.parent=e}markAsDisposed(t){this.livingDisposables.delete(t)}markAsSingleton(t){this.getDisposableData(t).isSingleton=!0}getRootParent(t,e){let i=e.get(t);if(i)return i;let r=t.parent?this.getRootParent(this.getDisposableData(t.parent),e):t;return e.set(t,r),r}getTrackedDisposables(){let t=new Map;return[...this.livingDisposables.entries()].filter(([,i])=>i.source!==null&&!this.getRootParent(i,t).isSingleton).flatMap(([i])=>i)}computeLeakingDisposables(t=10,e){let i;if(e)i=e;else{let a=new Map,u=[...this.livingDisposables.values()].filter(c=>c.source!==null&&!this.getRootParent(c,a).isSingleton);if(u.length===0)return;let h=new Set(u.map(c=>c.value));if(i=u.filter(c=>!(c.parent&&h.has(c.parent))),i.length===0)throw new Error(\"There are cyclic diposable chains!\")}if(!i)return;function r(a){function u(c,d){for(;c.length>0&&d.some(_=>typeof _==\"string\"?_===c[0]:c[0].match(_));)c.shift()}let h=a.source.split(`\n`).map(c=>c.trim().replace(\"at \",\"\")).filter(c=>c!==\"\");return u(h,[\"Error\",/^trackDisposable \\(.*\\)$/,/^DisposableTracker.trackDisposable \\(.*\\)$/]),h.reverse()}let n=new ur;for(let a of i){let u=r(a);for(let h=0;h<=u.length;h++)n.add(u.slice(0,h).join(`\n`),a)}i.sort(no(a=>a.idx,so));let o=\"\",l=0;for(let a of i.slice(0,t)){l++;let u=r(a),h=[];for(let c=0;c<u.length;c++){let d=u[c];d=`(shared with ${n.get(u.slice(0,c+1).join(`\n`)).size}/${i.length} leaks) at ${d}`;let p=n.get(u.slice(0,c).join(`\n`)),m=co([...p].map(f=>r(f)[c]),f=>f);delete m[u[c]];for(let[f,A]of Object.entries(m))h.unshift(` - stacktraces of ${A.length} other leaks continue with ${f}`);h.unshift(d)}o+=`\n\n\n==================== Leaking disposable ${l}/${i.length}: ${a.value.constructor.name} ====================\n${h.join(`\n`)}\n============================================================\n\n`}return i.length>t&&(o+=`\n\n\n... and ${i.length-t} more leaking disposables\n\n`),{leaks:i,details:o}}};hr.idx=0;var uo=hr;function Ul(s){dt=s}if(Wl){let s=\"__is_disposable_tracked__\";Ul(new class{trackDisposable(t){let e=new Error(\"Potentially leaked disposable\").stack;setTimeout(()=>{t[s]||console.log(e)},3e3)}setParent(t,e){if(t&&t!==D.None)try{t[s]=!0}catch{}}markAsDisposed(t){if(t&&t!==D.None)try{t[s]=!0}catch{}}markAsSingleton(t){}})}function fr(s){return dt?.trackDisposable(s),s}function pr(s){dt?.markAsDisposed(s)}function vi(s,t){dt?.setParent(s,t)}function Kl(s,t){if(dt)for(let e of s)dt.setParent(e,t)}function Gn(s){return dt?.markAsSingleton(s),s}function Ne(s){if(zn.is(s)){let t=[];for(let e of s)if(e)try{e.dispose()}catch(i){t.push(i)}if(t.length===1)throw t[0];if(t.length>1)throw new AggregateError(t,\"Encountered errors while disposing of store\");return Array.isArray(s)?[]:s}else if(s)return s.dispose(),s}function ho(...s){let t=C(()=>Ne(s));return Kl(s,t),t}function C(s){let t=fr({dispose:Kn(()=>{pr(t),s()})});return t}var dr=class dr{constructor(){this._toDispose=new Set;this._isDisposed=!1;fr(this)}dispose(){this._isDisposed||(pr(this),this._isDisposed=!0,this.clear())}get isDisposed(){return this._isDisposed}clear(){if(this._toDispose.size!==0)try{Ne(this._toDispose)}finally{this._toDispose.clear()}}add(t){if(!t)return t;if(t===this)throw new Error(\"Cannot register a disposable on itself!\");return vi(t,this),this._isDisposed?dr.DISABLE_DISPOSED_WARNING||console.warn(new Error(\"Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!\").stack):this._toDispose.add(t),t}delete(t){if(t){if(t===this)throw new Error(\"Cannot dispose a disposable on itself!\");this._toDispose.delete(t),t.dispose()}}deleteAndLeak(t){t&&this._toDispose.has(t)&&(this._toDispose.delete(t),vi(t,null))}};dr.DISABLE_DISPOSED_WARNING=!1;var Ee=dr,D=class{constructor(){this._store=new Ee;fr(this),vi(this._store,this)}dispose(){pr(this),this._store.dispose()}_register(t){if(t===this)throw new Error(\"Cannot register a disposable on itself!\");return this._store.add(t)}};D.None=Object.freeze({dispose(){}});var ye=class{constructor(){this._isDisposed=!1;fr(this)}get value(){return this._isDisposed?void 0:this._value}set value(t){this._isDisposed||t===this._value||(this._value?.dispose(),t&&vi(t,this),this._value=t)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,pr(this),this._value?.dispose(),this._value=void 0}clearAndLeak(){let t=this._value;return this._value=void 0,t&&vi(t,null),t}};var fe=typeof window==\"object\"?window:globalThis;var kt=class kt{constructor(t){this.element=t,this.next=kt.Undefined,this.prev=kt.Undefined}};kt.Undefined=new kt(void 0);var G=kt,Ct=class{constructor(){this._first=G.Undefined;this._last=G.Undefined;this._size=0}get size(){return this._size}isEmpty(){return this._first===G.Undefined}clear(){let t=this._first;for(;t!==G.Undefined;){let e=t.next;t.prev=G.Undefined,t.next=G.Undefined,t=e}this._first=G.Undefined,this._last=G.Undefined,this._size=0}unshift(t){return this._insert(t,!1)}push(t){return this._insert(t,!0)}_insert(t,e){let i=new G(t);if(this._first===G.Undefined)this._first=i,this._last=i;else if(e){let n=this._last;this._last=i,i.prev=n,n.next=i}else{let n=this._first;this._first=i,i.next=n,n.prev=i}this._size+=1;let r=!1;return()=>{r||(r=!0,this._remove(i))}}shift(){if(this._first!==G.Undefined){let t=this._first.element;return this._remove(this._first),t}}pop(){if(this._last!==G.Undefined){let t=this._last.element;return this._remove(this._last),t}}_remove(t){if(t.prev!==G.Undefined&&t.next!==G.Undefined){let e=t.prev;e.next=t.next,t.next.prev=e}else t.prev===G.Undefined&&t.next===G.Undefined?(this._first=G.Undefined,this._last=G.Undefined):t.next===G.Undefined?(this._last=this._last.prev,this._last.next=G.Undefined):t.prev===G.Undefined&&(this._first=this._first.next,this._first.prev=G.Undefined);this._size-=1}*[Symbol.iterator](){let t=this._first;for(;t!==G.Undefined;)yield t.element,t=t.next}};var zl=globalThis.performance&&typeof globalThis.performance.now==\"function\",mr=class s{static create(t){return new s(t)}constructor(t){this._now=zl&&t===!1?Date.now:globalThis.performance.now.bind(globalThis.performance),this._startTime=this._now(),this._stopTime=-1}stop(){this._stopTime=this._now()}reset(){this._startTime=this._now(),this._stopTime=-1}elapsed(){return this._stopTime!==-1?this._stopTime-this._startTime:this._now()-this._startTime}};var Gl=!1,fo=!1,$l=!1,$;(Qe=>{Qe.None=()=>D.None;function t(y){if($l){let{onDidAddListener:T}=y,g=gi.create(),w=0;y.onDidAddListener=()=>{++w===2&&(console.warn(\"snapshotted emitter LIKELY used public and SHOULD HAVE BEEN created with DisposableStore. snapshotted here\"),g.print()),T?.()}}}function e(y,T){return d(y,()=>{},0,void 0,!0,void 0,T)}Qe.defer=e;function i(y){return(T,g=null,w)=>{let E=!1,x;return x=y(N=>{if(!E)return x?x.dispose():E=!0,T.call(g,N)},null,w),E&&x.dispose(),x}}Qe.once=i;function r(y,T,g){return h((w,E=null,x)=>y(N=>w.call(E,T(N)),null,x),g)}Qe.map=r;function n(y,T,g){return h((w,E=null,x)=>y(N=>{T(N),w.call(E,N)},null,x),g)}Qe.forEach=n;function o(y,T,g){return h((w,E=null,x)=>y(N=>T(N)&&w.call(E,N),null,x),g)}Qe.filter=o;function l(y){return y}Qe.signal=l;function a(...y){return(T,g=null,w)=>{let E=ho(...y.map(x=>x(N=>T.call(g,N))));return c(E,w)}}Qe.any=a;function u(y,T,g,w){let E=g;return r(y,x=>(E=T(E,x),E),w)}Qe.reduce=u;function h(y,T){let g,w={onWillAddFirstListener(){g=y(E.fire,E)},onDidRemoveLastListener(){g?.dispose()}};T||t(w);let E=new v(w);return T?.add(E),E.event}function c(y,T){return T instanceof Array?T.push(y):T&&T.add(y),y}function d(y,T,g=100,w=!1,E=!1,x,N){let Z,te,Oe,ze=0,le,et={leakWarningThreshold:x,onWillAddFirstListener(){Z=y(ht=>{ze++,te=T(te,ht),w&&!Oe&&(me.fire(te),te=void 0),le=()=>{let fi=te;te=void 0,Oe=void 0,(!w||ze>1)&&me.fire(fi),ze=0},typeof g==\"number\"?(clearTimeout(Oe),Oe=setTimeout(le,g)):Oe===void 0&&(Oe=0,queueMicrotask(le))})},onWillRemoveListener(){E&&ze>0&&le?.()},onDidRemoveLastListener(){le=void 0,Z.dispose()}};N||t(et);let me=new v(et);return N?.add(me),me.event}Qe.debounce=d;function _(y,T=0,g){return Qe.debounce(y,(w,E)=>w?(w.push(E),w):[E],T,void 0,!0,void 0,g)}Qe.accumulate=_;function p(y,T=(w,E)=>w===E,g){let w=!0,E;return o(y,x=>{let N=w||!T(x,E);return w=!1,E=x,N},g)}Qe.latch=p;function m(y,T,g){return[Qe.filter(y,T,g),Qe.filter(y,w=>!T(w),g)]}Qe.split=m;function f(y,T=!1,g=[],w){let E=g.slice(),x=y(te=>{E?E.push(te):Z.fire(te)});w&&w.add(x);let N=()=>{E?.forEach(te=>Z.fire(te)),E=null},Z=new v({onWillAddFirstListener(){x||(x=y(te=>Z.fire(te)),w&&w.add(x))},onDidAddFirstListener(){E&&(T?setTimeout(N):N())},onDidRemoveLastListener(){x&&x.dispose(),x=null}});return w&&w.add(Z),Z.event}Qe.buffer=f;function A(y,T){return(w,E,x)=>{let N=T(new O);return y(function(Z){let te=N.evaluate(Z);te!==R&&w.call(E,te)},void 0,x)}}Qe.chain=A;let R=Symbol(\"HaltChainable\");class O{constructor(){this.steps=[]}map(T){return this.steps.push(T),this}forEach(T){return this.steps.push(g=>(T(g),g)),this}filter(T){return this.steps.push(g=>T(g)?g:R),this}reduce(T,g){let w=g;return this.steps.push(E=>(w=T(w,E),w)),this}latch(T=(g,w)=>g===w){let g=!0,w;return this.steps.push(E=>{let x=g||!T(E,w);return g=!1,w=E,x?E:R}),this}evaluate(T){for(let g of this.steps)if(T=g(T),T===R)break;return T}}function I(y,T,g=w=>w){let w=(...Z)=>N.fire(g(...Z)),E=()=>y.on(T,w),x=()=>y.removeListener(T,w),N=new v({onWillAddFirstListener:E,onDidRemoveLastListener:x});return N.event}Qe.fromNodeEventEmitter=I;function k(y,T,g=w=>w){let w=(...Z)=>N.fire(g(...Z)),E=()=>y.addEventListener(T,w),x=()=>y.removeEventListener(T,w),N=new v({onWillAddFirstListener:E,onDidRemoveLastListener:x});return N.event}Qe.fromDOMEventEmitter=k;function P(y){return new Promise(T=>i(y)(T))}Qe.toPromise=P;function oe(y){let T=new v;return y.then(g=>{T.fire(g)},()=>{T.fire(void 0)}).finally(()=>{T.dispose()}),T.event}Qe.fromPromise=oe;function Me(y,T){return y(g=>T.fire(g))}Qe.forward=Me;function Pe(y,T,g){return T(g),y(w=>T(w))}Qe.runAndSubscribe=Pe;class Ke{constructor(T,g){this._observable=T;this._counter=0;this._hasChanged=!1;let w={onWillAddFirstListener:()=>{T.addObserver(this)},onDidRemoveLastListener:()=>{T.removeObserver(this)}};g||t(w),this.emitter=new v(w),g&&g.add(this.emitter)}beginUpdate(T){this._counter++}handlePossibleChange(T){}handleChange(T,g){this._hasChanged=!0}endUpdate(T){this._counter--,this._counter===0&&(this._observable.reportChanges(),this._hasChanged&&(this._hasChanged=!1,this.emitter.fire(this._observable.get())))}}function di(y,T){return new Ke(y,T).emitter.event}Qe.fromObservable=di;function V(y){return(T,g,w)=>{let E=0,x=!1,N={beginUpdate(){E++},endUpdate(){E--,E===0&&(y.reportChanges(),x&&(x=!1,T.call(g)))},handlePossibleChange(){},handleChange(){x=!0}};y.addObserver(N),y.reportChanges();let Z={dispose(){y.removeObserver(N)}};return w instanceof Ee?w.add(Z):Array.isArray(w)&&w.push(Z),Z}}Qe.fromObservableLight=V})($||={});var Mt=class Mt{constructor(t){this.listenerCount=0;this.invocationCount=0;this.elapsedOverall=0;this.durations=[];this.name=`${t}_${Mt._idPool++}`,Mt.all.add(this)}start(t){this._stopWatch=new mr,this.listenerCount=t}stop(){if(this._stopWatch){let t=this._stopWatch.elapsed();this.durations.push(t),this.elapsedOverall+=t,this.invocationCount+=1,this._stopWatch=void 0}}};Mt.all=new Set,Mt._idPool=0;var $n=Mt,po=-1;var br=class br{constructor(t,e,i=(br._idPool++).toString(16).padStart(3,\"0\")){this._errorHandler=t;this.threshold=e;this.name=i;this._warnCountdown=0}dispose(){this._stacks?.clear()}check(t,e){let i=this.threshold;if(i<=0||e<i)return;this._stacks||(this._stacks=new Map);let r=this._stacks.get(t.value)||0;if(this._stacks.set(t.value,r+1),this._warnCountdown-=1,this._warnCountdown<=0){this._warnCountdown=i*.5;let[n,o]=this.getMostFrequentStack(),l=`[${this.name}] potential listener LEAK detected, having ${e} listeners already. MOST frequent listener (${o}):`;console.warn(l),console.warn(n);let a=new qn(l,n);this._errorHandler(a)}return()=>{let n=this._stacks.get(t.value)||0;this._stacks.set(t.value,n-1)}}getMostFrequentStack(){if(!this._stacks)return;let t,e=0;for(let[i,r]of this._stacks)(!t||e<r)&&(t=[i,r],e=r);return t}};br._idPool=1;var Vn=br,gi=class s{constructor(t){this.value=t}static create(){let t=new Error;return new s(t.stack??\"\")}print(){console.warn(this.value.split(`\n`).slice(2).join(`\n`))}},qn=class extends Error{constructor(t,e){super(t),this.name=\"ListenerLeakError\",this.stack=e}},Yn=class extends Error{constructor(t,e){super(t),this.name=\"ListenerRefusalError\",this.stack=e}},Vl=0,Pt=class{constructor(t){this.value=t;this.id=Vl++}},ql=2,Yl=(s,t)=>{if(s instanceof Pt)t(s);else for(let e=0;e<s.length;e++){let i=s[e];i&&t(i)}},_r;if(Gl){let s=[];setInterval(()=>{s.length!==0&&(console.warn(\"[LEAKING LISTENERS] GC'ed these listeners that were NOT yet disposed:\"),console.warn(s.join(`\n`)),s.length=0)},3e3),_r=new FinalizationRegistry(t=>{typeof t==\"string\"&&s.push(t)})}var v=class{constructor(t){this._size=0;this._options=t,this._leakageMon=po>0||this._options?.leakWarningThreshold?new Vn(t?.onListenerError??Lt,this._options?.leakWarningThreshold??po):void 0,this._perfMon=this._options?._profName?new $n(this._options._profName):void 0,this._deliveryQueue=this._options?.deliveryQueue}dispose(){if(!this._disposed){if(this._disposed=!0,this._deliveryQueue?.current===this&&this._deliveryQueue.reset(),this._listeners){if(fo){let t=this._listeners;queueMicrotask(()=>{Yl(t,e=>e.stack?.print())})}this._listeners=void 0,this._size=0}this._options?.onDidRemoveLastListener?.(),this._leakageMon?.dispose()}}get event(){return this._event??=(t,e,i)=>{if(this._leakageMon&&this._size>this._leakageMon.threshold**2){let a=`[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far (${this._size} vs ${this._leakageMon.threshold})`;console.warn(a);let u=this._leakageMon.getMostFrequentStack()??[\"UNKNOWN stack\",-1],h=new Yn(`${a}. HINT: Stack shows most frequent listener (${u[1]}-times)`,u[0]);return(this._options?.onListenerError||Lt)(h),D.None}if(this._disposed)return D.None;e&&(t=t.bind(e));let r=new Pt(t),n,o;this._leakageMon&&this._size>=Math.ceil(this._leakageMon.threshold*.2)&&(r.stack=gi.create(),n=this._leakageMon.check(r.stack,this._size+1)),fo&&(r.stack=o??gi.create()),this._listeners?this._listeners instanceof Pt?(this._deliveryQueue??=new jn,this._listeners=[this._listeners,r]):this._listeners.push(r):(this._options?.onWillAddFirstListener?.(this),this._listeners=r,this._options?.onDidAddFirstListener?.(this)),this._size++;let l=C(()=>{_r?.unregister(l),n?.(),this._removeListener(r)});if(i instanceof Ee?i.add(l):Array.isArray(i)&&i.push(l),_r){let a=new Error().stack.split(`\n`).slice(2,3).join(`\n`).trim(),u=/(file:|vscode-file:\\/\\/vscode-app)?(\\/[^:]*:\\d+:\\d+)/.exec(a);_r.register(l,u?.[2]??a,l)}return l},this._event}_removeListener(t){if(this._options?.onWillRemoveListener?.(this),!this._listeners)return;if(this._size===1){this._listeners=void 0,this._options?.onDidRemoveLastListener?.(this),this._size=0;return}let e=this._listeners,i=e.indexOf(t);if(i===-1)throw console.log(\"disposed?\",this._disposed),console.log(\"size?\",this._size),console.log(\"arr?\",JSON.stringify(this._listeners)),new Error(\"Attempted to dispose unknown listener\");this._size--,e[i]=void 0;let r=this._deliveryQueue.current===this;if(this._size*ql<=e.length){let n=0;for(let o=0;o<e.length;o++)e[o]?e[n++]=e[o]:r&&(this._deliveryQueue.end--,n<this._deliveryQueue.i&&this._deliveryQueue.i--);e.length=n}}_deliver(t,e){if(!t)return;let i=this._options?.onListenerError||Lt;if(!i){t.value(e);return}try{t.value(e)}catch(r){i(r)}}_deliverQueue(t){let e=t.current._listeners;for(;t.i<t.end;)this._deliver(e[t.i++],t.value);t.reset()}fire(t){if(this._deliveryQueue?.current&&(this._deliverQueue(this._deliveryQueue),this._perfMon?.stop()),this._perfMon?.start(this._size),this._listeners)if(this._listeners instanceof Pt)this._deliver(this._listeners,t);else{let e=this._deliveryQueue;e.enqueue(this,t,this._listeners.length),this._deliverQueue(e)}this._perfMon?.stop()}hasListeners(){return this._size>0}};var jn=class{constructor(){this.i=-1;this.end=0}enqueue(t,e,i){this.i=0,this.end=i,this.current=t,this.value=e}reset(){this.i=this.end,this.current=void 0,this.value=void 0}};var gr=class gr{constructor(){this.mapWindowIdToZoomLevel=new Map;this._onDidChangeZoomLevel=new v;this.onDidChangeZoomLevel=this._onDidChangeZoomLevel.event;this.mapWindowIdToZoomFactor=new Map;this._onDidChangeFullscreen=new v;this.onDidChangeFullscreen=this._onDidChangeFullscreen.event;this.mapWindowIdToFullScreen=new Map}getZoomLevel(t){return this.mapWindowIdToZoomLevel.get(this.getWindowId(t))??0}setZoomLevel(t,e){if(this.getZoomLevel(e)===t)return;let i=this.getWindowId(e);this.mapWindowIdToZoomLevel.set(i,t),this._onDidChangeZoomLevel.fire(i)}getZoomFactor(t){return this.mapWindowIdToZoomFactor.get(this.getWindowId(t))??1}setZoomFactor(t,e){this.mapWindowIdToZoomFactor.set(this.getWindowId(e),t)}setFullscreen(t,e){if(this.isFullscreen(e)===t)return;let i=this.getWindowId(e);this.mapWindowIdToFullScreen.set(i,t),this._onDidChangeFullscreen.fire(i)}isFullscreen(t){return!!this.mapWindowIdToFullScreen.get(this.getWindowId(t))}getWindowId(t){return t.vscodeWindowId}};gr.INSTANCE=new gr;var Si=gr;function Xl(s,t,e){typeof t==\"string\"&&(t=s.matchMedia(t)),t.addEventListener(\"change\",e)}var Eu=Si.INSTANCE.onDidChangeZoomLevel;function mo(s){return Si.INSTANCE.getZoomFactor(s)}var Tu=Si.INSTANCE.onDidChangeFullscreen,Ot=typeof navigator==\"object\"?navigator.userAgent:\"\",Ei=Ot.indexOf(\"Firefox\")>=0,Bt=Ot.indexOf(\"AppleWebKit\")>=0,Ti=Ot.indexOf(\"Chrome\")>=0,Sr=!Ti&&Ot.indexOf(\"Safari\")>=0;var Iu=Ot.indexOf(\"Electron/\")>=0,yu=Ot.indexOf(\"Android\")>=0,vr=!1;if(typeof fe.matchMedia==\"function\"){let s=fe.matchMedia(\"(display-mode: standalone) or (display-mode: window-controls-overlay)\"),t=fe.matchMedia(\"(display-mode: fullscreen)\");vr=s.matches,Xl(fe,s,({matches:e})=>{vr&&t.matches||(vr=e)})}function _o(){return vr}var Nt=\"en\",yr=!1,xr=!1,Ii=!1,Zl=!1,vo=!1,go=!1,Jl=!1,Ql=!1,ea=!1,ta=!1,Tr,Ir=Nt,bo=Nt,ia,$e,Ve=globalThis,xe;typeof Ve.vscode<\"u\"&&typeof Ve.vscode.process<\"u\"?xe=Ve.vscode.process:typeof process<\"u\"&&typeof process?.versions?.node==\"string\"&&(xe=process);var So=typeof xe?.versions?.electron==\"string\",ra=So&&xe?.type===\"renderer\";if(typeof xe==\"object\"){yr=xe.platform===\"win32\",xr=xe.platform===\"darwin\",Ii=xe.platform===\"linux\",Zl=Ii&&!!xe.env.SNAP&&!!xe.env.SNAP_REVISION,Jl=So,ea=!!xe.env.CI||!!xe.env.BUILD_ARTIFACTSTAGINGDIRECTORY,Tr=Nt,Ir=Nt;let s=xe.env.VSCODE_NLS_CONFIG;if(s)try{let t=JSON.parse(s);Tr=t.userLocale,bo=t.osLocale,Ir=t.resolvedLanguage||Nt,ia=t.languagePack?.translationsConfigFile}catch{}vo=!0}else typeof navigator==\"object\"&&!ra?($e=navigator.userAgent,yr=$e.indexOf(\"Windows\")>=0,xr=$e.indexOf(\"Macintosh\")>=0,Ql=($e.indexOf(\"Macintosh\")>=0||$e.indexOf(\"iPad\")>=0||$e.indexOf(\"iPhone\")>=0)&&!!navigator.maxTouchPoints&&navigator.maxTouchPoints>0,Ii=$e.indexOf(\"Linux\")>=0,ta=$e?.indexOf(\"Mobi\")>=0,go=!0,Ir=globalThis._VSCODE_NLS_LANGUAGE||Nt,Tr=navigator.language.toLowerCase(),bo=Tr):console.error(\"Unable to resolve platform.\");var Xn=0;xr?Xn=1:yr?Xn=3:Ii&&(Xn=2);var wr=yr,Te=xr,Zn=Ii;var Dr=vo;var na=go&&typeof Ve.importScripts==\"function\",xu=na?Ve.origin:void 0;var Fe=$e,st=Ir,sa;(i=>{function s(){return st}i.value=s;function t(){return st.length===2?st===\"en\":st.length>=3?st[0]===\"e\"&&st[1]===\"n\"&&st[2]===\"-\":!1}i.isDefaultVariant=t;function e(){return st===\"en\"}i.isDefault=e})(sa||={});var oa=typeof Ve.postMessage==\"function\"&&!Ve.importScripts,Eo=(()=>{if(oa){let s=[];Ve.addEventListener(\"message\",e=>{if(e.data&&e.data.vscodeScheduleAsyncWork)for(let i=0,r=s.length;i<r;i++){let n=s[i];if(n.id===e.data.vscodeScheduleAsyncWork){s.splice(i,1),n.callback();return}}});let t=0;return e=>{let i=++t;s.push({id:i,callback:e}),Ve.postMessage({vscodeScheduleAsyncWork:i},\"*\")}}return s=>setTimeout(s)})();var la=!!(Fe&&Fe.indexOf(\"Chrome\")>=0),wu=!!(Fe&&Fe.indexOf(\"Firefox\")>=0),Du=!!(!la&&Fe&&Fe.indexOf(\"Safari\")>=0),Ru=!!(Fe&&Fe.indexOf(\"Edg/\")>=0),Lu=!!(Fe&&Fe.indexOf(\"Android\")>=0);var ot=typeof navigator==\"object\"?navigator:{},aa={clipboard:{writeText:Dr||document.queryCommandSupported&&document.queryCommandSupported(\"copy\")||!!(ot&&ot.clipboard&&ot.clipboard.writeText),readText:Dr||!!(ot&&ot.clipboard&&ot.clipboard.readText)},keyboard:Dr||_o()?0:ot.keyboard||Sr?1:2,touch:\"ontouchstart\"in fe||ot.maxTouchPoints>0,pointerEvents:fe.PointerEvent&&(\"ontouchstart\"in fe||navigator.maxTouchPoints>0)};var yi=class{constructor(){this._keyCodeToStr=[],this._strToKeyCode=Object.create(null)}define(t,e){this._keyCodeToStr[t]=e,this._strToKeyCode[e.toLowerCase()]=t}keyCodeToStr(t){return this._keyCodeToStr[t]}strToKeyCode(t){return this._strToKeyCode[t.toLowerCase()]||0}},Jn=new yi,To=new yi,Io=new yi,yo=new Array(230);var Qn;(o=>{function s(l){return Jn.keyCodeToStr(l)}o.toString=s;function t(l){return Jn.strToKeyCode(l)}o.fromString=t;function e(l){return To.keyCodeToStr(l)}o.toUserSettingsUS=e;function i(l){return Io.keyCodeToStr(l)}o.toUserSettingsGeneral=i;function r(l){return To.strToKeyCode(l)||Io.strToKeyCode(l)}o.fromUserSettings=r;function n(l){if(l>=98&&l<=113)return null;switch(l){case 16:return\"Up\";case 18:return\"Down\";case 15:return\"Left\";case 17:return\"Right\"}return Jn.keyCodeToStr(l)}o.toElectronAccelerator=n})(Qn||={});var Rr=class s{constructor(t,e,i,r,n){this.ctrlKey=t;this.shiftKey=e;this.altKey=i;this.metaKey=r;this.keyCode=n}equals(t){return t instanceof s&&this.ctrlKey===t.ctrlKey&&this.shiftKey===t.shiftKey&&this.altKey===t.altKey&&this.metaKey===t.metaKey&&this.keyCode===t.keyCode}getHashCode(){let t=this.ctrlKey?\"1\":\"0\",e=this.shiftKey?\"1\":\"0\",i=this.altKey?\"1\":\"0\",r=this.metaKey?\"1\":\"0\";return`K${t}${e}${i}${r}${this.keyCode}`}isModifierKey(){return this.keyCode===0||this.keyCode===5||this.keyCode===57||this.keyCode===6||this.keyCode===4}toKeybinding(){return new es([this])}isDuplicateModifierCase(){return this.ctrlKey&&this.keyCode===5||this.shiftKey&&this.keyCode===4||this.altKey&&this.keyCode===6||this.metaKey&&this.keyCode===57}};var es=class{constructor(t){if(t.length===0)throw eo(\"chords\");this.chords=t}getHashCode(){let t=\"\";for(let e=0,i=this.chords.length;e<i;e++)e!==0&&(t+=\";\"),t+=this.chords[e].getHashCode();return t}equals(t){if(t===null||this.chords.length!==t.chords.length)return!1;for(let e=0;e<this.chords.length;e++)if(!this.chords[e].equals(t.chords[e]))return!1;return!0}};function ca(s){if(s.charCode){let e=String.fromCharCode(s.charCode).toUpperCase();return Qn.fromString(e)}let t=s.keyCode;if(t===3)return 7;if(Ei)switch(t){case 59:return 85;case 60:if(Zn)return 97;break;case 61:return 86;case 107:return 109;case 109:return 111;case 173:return 88;case 224:if(Te)return 57;break}else if(Bt){if(Te&&t===93)return 57;if(!Te&&t===92)return 57}return yo[t]||0}var ua=Te?256:2048,ha=512,da=1024,fa=Te?2048:256;var ft=class{constructor(t){this._standardKeyboardEventBrand=!0;let e=t;this.browserEvent=e,this.target=e.target,this.ctrlKey=e.ctrlKey,this.shiftKey=e.shiftKey,this.altKey=e.altKey,this.metaKey=e.metaKey,this.altGraphKey=e.getModifierState?.(\"AltGraph\"),this.keyCode=ca(e),this.code=e.code,this.ctrlKey=this.ctrlKey||this.keyCode===5,this.altKey=this.altKey||this.keyCode===6,this.shiftKey=this.shiftKey||this.keyCode===4,this.metaKey=this.metaKey||this.keyCode===57,this._asKeybinding=this._computeKeybinding(),this._asKeyCodeChord=this._computeKeyCodeChord()}preventDefault(){this.browserEvent&&this.browserEvent.preventDefault&&this.browserEvent.preventDefault()}stopPropagation(){this.browserEvent&&this.browserEvent.stopPropagation&&this.browserEvent.stopPropagation()}toKeyCodeChord(){return this._asKeyCodeChord}equals(t){return this._asKeybinding===t}_computeKeybinding(){let t=0;this.keyCode!==5&&this.keyCode!==4&&this.keyCode!==6&&this.keyCode!==57&&(t=this.keyCode);let e=0;return this.ctrlKey&&(e|=ua),this.altKey&&(e|=ha),this.shiftKey&&(e|=da),this.metaKey&&(e|=fa),e|=t,e}_computeKeyCodeChord(){let t=0;return this.keyCode!==5&&this.keyCode!==4&&this.keyCode!==6&&this.keyCode!==57&&(t=this.keyCode),new Rr(this.ctrlKey,this.shiftKey,this.altKey,this.metaKey,t)}};var wo=new WeakMap;function pa(s){if(!s.parent||s.parent===s)return null;try{let t=s.location,e=s.parent.location;if(t.origin!==\"null\"&&e.origin!==\"null\"&&t.origin!==e.origin)return null}catch{return null}return s.parent}var Lr=class{static getSameOriginWindowChain(t){let e=wo.get(t);if(!e){e=[],wo.set(t,e);let i=t,r;do r=pa(i),r?e.push({window:new WeakRef(i),iframeElement:i.frameElement||null}):e.push({window:new WeakRef(i),iframeElement:null}),i=r;while(i)}return e.slice(0)}static getPositionOfChildWindowRelativeToAncestorWindow(t,e){if(!e||t===e)return{top:0,left:0};let i=0,r=0,n=this.getSameOriginWindowChain(t);for(let o of n){let l=o.window.deref();if(i+=l?.scrollY??0,r+=l?.scrollX??0,l===e||!o.iframeElement)break;let a=o.iframeElement.getBoundingClientRect();i+=a.top,r+=a.left}return{top:i,left:r}}};var qe=class{constructor(t,e){this.timestamp=Date.now(),this.browserEvent=e,this.leftButton=e.button===0,this.middleButton=e.button===1,this.rightButton=e.button===2,this.buttons=e.buttons,this.target=e.target,this.detail=e.detail||1,e.type===\"dblclick\"&&(this.detail=2),this.ctrlKey=e.ctrlKey,this.shiftKey=e.shiftKey,this.altKey=e.altKey,this.metaKey=e.metaKey,typeof e.pageX==\"number\"?(this.posx=e.pageX,this.posy=e.pageY):(this.posx=e.clientX+this.target.ownerDocument.body.scrollLeft+this.target.ownerDocument.documentElement.scrollLeft,this.posy=e.clientY+this.target.ownerDocument.body.scrollTop+this.target.ownerDocument.documentElement.scrollTop);let i=Lr.getPositionOfChildWindowRelativeToAncestorWindow(t,e.view);this.posx-=i.left,this.posy-=i.top}preventDefault(){this.browserEvent.preventDefault()}stopPropagation(){this.browserEvent.stopPropagation()}};var xi=class{constructor(t,e=0,i=0){this.browserEvent=t||null,this.target=t?t.target||t.targetNode||t.srcElement:null,this.deltaY=i,this.deltaX=e;let r=!1;if(Ti){let n=navigator.userAgent.match(/Chrome\\/(\\d+)/);r=(n?parseInt(n[1]):123)<=122}if(t){let n=t,o=t,l=t.view?.devicePixelRatio||1;if(typeof n.wheelDeltaY<\"u\")r?this.deltaY=n.wheelDeltaY/(120*l):this.deltaY=n.wheelDeltaY/120;else if(typeof o.VERTICAL_AXIS<\"u\"&&o.axis===o.VERTICAL_AXIS)this.deltaY=-o.detail/3;else if(t.type===\"wheel\"){let a=t;a.deltaMode===a.DOM_DELTA_LINE?Ei&&!Te?this.deltaY=-t.deltaY/3:this.deltaY=-t.deltaY:this.deltaY=-t.deltaY/40}if(typeof n.wheelDeltaX<\"u\")Sr&&wr?this.deltaX=-(n.wheelDeltaX/120):r?this.deltaX=n.wheelDeltaX/(120*l):this.deltaX=n.wheelDeltaX/120;else if(typeof o.HORIZONTAL_AXIS<\"u\"&&o.axis===o.HORIZONTAL_AXIS)this.deltaX=-t.detail/3;else if(t.type===\"wheel\"){let a=t;a.deltaMode===a.DOM_DELTA_LINE?Ei&&!Te?this.deltaX=-t.deltaX/3:this.deltaX=-t.deltaX:this.deltaX=-t.deltaX/40}this.deltaY===0&&this.deltaX===0&&t.wheelDelta&&(r?this.deltaY=t.wheelDelta/(120*l):this.deltaY=t.wheelDelta/120)}}preventDefault(){this.browserEvent?.preventDefault()}stopPropagation(){this.browserEvent?.stopPropagation()}};var Do=Object.freeze(function(s,t){let e=setTimeout(s.bind(t),0);return{dispose(){clearTimeout(e)}}}),ma;(i=>{function s(r){return r===i.None||r===i.Cancelled||r instanceof ts?!0:!r||typeof r!=\"object\"?!1:typeof r.isCancellationRequested==\"boolean\"&&typeof r.onCancellationRequested==\"function\"}i.isCancellationToken=s,i.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:$.None}),i.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:Do})})(ma||={});var ts=class{constructor(){this._isCancelled=!1;this._emitter=null}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?Do:(this._emitter||(this._emitter=new v),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=null)}};var _a=Symbol(\"MicrotaskDelay\");var Ye=class{constructor(t,e){this._isDisposed=!1;this._token=-1,typeof t==\"function\"&&typeof e==\"number\"&&this.setIfNotSet(t,e)}dispose(){this.cancel(),this._isDisposed=!0}cancel(){this._token!==-1&&(clearTimeout(this._token),this._token=-1)}cancelAndSet(t,e){if(this._isDisposed)throw new Rt(\"Calling 'cancelAndSet' on a disposed TimeoutTimer\");this.cancel(),this._token=setTimeout(()=>{this._token=-1,t()},e)}setIfNotSet(t,e){if(this._isDisposed)throw new Rt(\"Calling 'setIfNotSet' on a disposed TimeoutTimer\");this._token===-1&&(this._token=setTimeout(()=>{this._token=-1,t()},e))}},kr=class{constructor(){this.disposable=void 0;this.isDisposed=!1}cancel(){this.disposable?.dispose(),this.disposable=void 0}cancelAndSet(t,e,i=globalThis){if(this.isDisposed)throw new Rt(\"Calling 'cancelAndSet' on a disposed IntervalTimer\");this.cancel();let r=i.setInterval(()=>{t()},e);this.disposable=C(()=>{i.clearInterval(r),this.disposable=void 0})}dispose(){this.cancel(),this.isDisposed=!0}};var ba,Ar;(function(){typeof globalThis.requestIdleCallback!=\"function\"||typeof globalThis.cancelIdleCallback!=\"function\"?Ar=(s,t)=>{Eo(()=>{if(e)return;let i=Date.now()+15;t(Object.freeze({didTimeout:!0,timeRemaining(){return Math.max(0,i-Date.now())}}))});let e=!1;return{dispose(){e||(e=!0)}}}:Ar=(s,t,e)=>{let i=s.requestIdleCallback(t,typeof e==\"number\"?{timeout:e}:void 0),r=!1;return{dispose(){r||(r=!0,s.cancelIdleCallback(i))}}},ba=s=>Ar(globalThis,s)})();var va;(e=>{async function s(i){let r,n=await Promise.all(i.map(o=>o.then(l=>l,l=>{r||(r=l)})));if(typeof r<\"u\")throw r;return n}e.settled=s;function t(i){return new Promise(async(r,n)=>{try{await i(r,n)}catch(o){n(o)}})}e.withAsyncBody=t})(va||={});var _e=class _e{static fromArray(t){return new _e(e=>{e.emitMany(t)})}static fromPromise(t){return new _e(async e=>{e.emitMany(await t)})}static fromPromises(t){return new _e(async e=>{await Promise.all(t.map(async i=>e.emitOne(await i)))})}static merge(t){return new _e(async e=>{await Promise.all(t.map(async i=>{for await(let r of i)e.emitOne(r)}))})}constructor(t,e){this._state=0,this._results=[],this._error=null,this._onReturn=e,this._onStateChanged=new v,queueMicrotask(async()=>{let i={emitOne:r=>this.emitOne(r),emitMany:r=>this.emitMany(r),reject:r=>this.reject(r)};try{await Promise.resolve(t(i)),this.resolve()}catch(r){this.reject(r)}finally{i.emitOne=void 0,i.emitMany=void 0,i.reject=void 0}})}[Symbol.asyncIterator](){let t=0;return{next:async()=>{do{if(this._state===2)throw this._error;if(t<this._results.length)return{done:!1,value:this._results[t++]};if(this._state===1)return{done:!0,value:void 0};await $.toPromise(this._onStateChanged.event)}while(!0)},return:async()=>(this._onReturn?.(),{done:!0,value:void 0})}}static map(t,e){return new _e(async i=>{for await(let r of t)i.emitOne(e(r))})}map(t){return _e.map(this,t)}static filter(t,e){return new _e(async i=>{for await(let r of t)e(r)&&i.emitOne(r)})}filter(t){return _e.filter(this,t)}static coalesce(t){return _e.filter(t,e=>!!e)}coalesce(){return _e.coalesce(this)}static async toPromise(t){let e=[];for await(let i of t)e.push(i);return e}toPromise(){return _e.toPromise(this)}emitOne(t){this._state===0&&(this._results.push(t),this._onStateChanged.fire())}emitMany(t){this._state===0&&(this._results=this._results.concat(t),this._onStateChanged.fire())}resolve(){this._state===0&&(this._state=1,this._onStateChanged.fire())}reject(t){this._state===0&&(this._state=2,this._error=t,this._onStateChanged.fire())}};_e.EMPTY=_e.fromArray([]);var Ro=_e;function Lo(s){return 55296<=s&&s<=56319}function is(s){return 56320<=s&&s<=57343}function Ao(s,t){return(s-55296<<10)+(t-56320)+65536}function Mo(s){return ns(s,0)}function ns(s,t){switch(typeof s){case\"object\":return s===null?je(349,t):Array.isArray(s)?Ea(s,t):Ta(s,t);case\"string\":return Po(s,t);case\"boolean\":return Sa(s,t);case\"number\":return je(s,t);case\"undefined\":return je(937,t);default:return je(617,t)}}function je(s,t){return(t<<5)-t+s|0}function Sa(s,t){return je(s?433:863,t)}function Po(s,t){t=je(149417,t);for(let e=0,i=s.length;e<i;e++)t=je(s.charCodeAt(e),t);return t}function Ea(s,t){return t=je(104579,t),s.reduce((e,i)=>ns(i,e),t)}function Ta(s,t){return t=je(181387,t),Object.keys(s).sort().reduce((e,i)=>(e=Po(i,e),ns(s[i],e)),t)}function rs(s,t,e=32){let i=e-t,r=~((1<<i)-1);return(s<<t|(r&s)>>>i)>>>0}function ko(s,t=0,e=s.byteLength,i=0){for(let r=0;r<e;r++)s[t+r]=i}function Ia(s,t,e=\"0\"){for(;s.length<t;)s=e+s;return s}function wi(s,t=32){return s instanceof ArrayBuffer?Array.from(new Uint8Array(s)).map(e=>e.toString(16).padStart(2,\"0\")).join(\"\"):Ia((s>>>0).toString(16),t/4)}var Cr=class Cr{constructor(){this._h0=1732584193;this._h1=4023233417;this._h2=2562383102;this._h3=271733878;this._h4=3285377520;this._buff=new Uint8Array(67),this._buffDV=new DataView(this._buff.buffer),this._buffLen=0,this._totalLen=0,this._leftoverHighSurrogate=0,this._finished=!1}update(t){let e=t.length;if(e===0)return;let i=this._buff,r=this._buffLen,n=this._leftoverHighSurrogate,o,l;for(n!==0?(o=n,l=-1,n=0):(o=t.charCodeAt(0),l=0);;){let a=o;if(Lo(o))if(l+1<e){let u=t.charCodeAt(l+1);is(u)?(l++,a=Ao(o,u)):a=65533}else{n=o;break}else is(o)&&(a=65533);if(r=this._push(i,r,a),l++,l<e)o=t.charCodeAt(l);else break}this._buffLen=r,this._leftoverHighSurrogate=n}_push(t,e,i){return i<128?t[e++]=i:i<2048?(t[e++]=192|(i&1984)>>>6,t[e++]=128|(i&63)>>>0):i<65536?(t[e++]=224|(i&61440)>>>12,t[e++]=128|(i&4032)>>>6,t[e++]=128|(i&63)>>>0):(t[e++]=240|(i&1835008)>>>18,t[e++]=128|(i&258048)>>>12,t[e++]=128|(i&4032)>>>6,t[e++]=128|(i&63)>>>0),e>=64&&(this._step(),e-=64,this._totalLen+=64,t[0]=t[64],t[1]=t[65],t[2]=t[66]),e}digest(){return this._finished||(this._finished=!0,this._leftoverHighSurrogate&&(this._leftoverHighSurrogate=0,this._buffLen=this._push(this._buff,this._buffLen,65533)),this._totalLen+=this._buffLen,this._wrapUp()),wi(this._h0)+wi(this._h1)+wi(this._h2)+wi(this._h3)+wi(this._h4)}_wrapUp(){this._buff[this._buffLen++]=128,ko(this._buff,this._buffLen),this._buffLen>56&&(this._step(),ko(this._buff));let t=8*this._totalLen;this._buffDV.setUint32(56,Math.floor(t/4294967296),!1),this._buffDV.setUint32(60,t%4294967296,!1),this._step()}_step(){let t=Cr._bigBlock32,e=this._buffDV;for(let c=0;c<64;c+=4)t.setUint32(c,e.getUint32(c,!1),!1);for(let c=64;c<320;c+=4)t.setUint32(c,rs(t.getUint32(c-12,!1)^t.getUint32(c-32,!1)^t.getUint32(c-56,!1)^t.getUint32(c-64,!1),1),!1);let i=this._h0,r=this._h1,n=this._h2,o=this._h3,l=this._h4,a,u,h;for(let c=0;c<80;c++)c<20?(a=r&n|~r&o,u=1518500249):c<40?(a=r^n^o,u=1859775393):c<60?(a=r&n|r&o|n&o,u=2400959708):(a=r^n^o,u=3395469782),h=rs(i,5)+a+l+u+t.getUint32(c*4,!1)&4294967295,l=o,o=n,n=rs(r,30),r=i,i=h;this._h0=this._h0+i&4294967295,this._h1=this._h1+r&4294967295,this._h2=this._h2+n&4294967295,this._h3=this._h3+o&4294967295,this._h4=this._h4+l&4294967295}};Cr._bigBlock32=new DataView(new ArrayBuffer(320));var Co=Cr;var{registerWindow:Bh,getWindow:be,getDocument:Nh,getWindows:Fh,getWindowsCount:Hh,getWindowId:Oo,getWindowById:Wh,hasWindow:Uh,onDidRegisterWindow:No,onWillUnregisterWindow:Kh,onDidUnregisterWindow:zh}=function(){let s=new Map;fe;let t={window:fe,disposables:new Ee};s.set(fe.vscodeWindowId,t);let e=new v,i=new v,r=new v;function n(o,l){return(typeof o==\"number\"?s.get(o):void 0)??(l?t:void 0)}return{onDidRegisterWindow:e.event,onWillUnregisterWindow:r.event,onDidUnregisterWindow:i.event,registerWindow(o){if(s.has(o.vscodeWindowId))return D.None;let l=new Ee,a={window:o,disposables:l.add(new Ee)};return s.set(o.vscodeWindowId,a),l.add(C(()=>{s.delete(o.vscodeWindowId),i.fire(o)})),l.add(L(o,Y.BEFORE_UNLOAD,()=>{r.fire(o)})),e.fire(a),l},getWindows(){return s.values()},getWindowsCount(){return s.size},getWindowId(o){return o.vscodeWindowId},hasWindow(o){return s.has(o)},getWindowById:n,getWindow(o){let l=o;if(l?.ownerDocument?.defaultView)return l.ownerDocument.defaultView.window;let a=o;return a?.view?a.view.window:fe},getDocument(o){return be(o).document}}}();var ss=class{constructor(t,e,i,r){this._node=t,this._type=e,this._handler=i,this._options=r||!1,this._node.addEventListener(this._type,this._handler,this._options)}dispose(){this._handler&&(this._node.removeEventListener(this._type,this._handler,this._options),this._node=null,this._handler=null)}};function L(s,t,e,i){return new ss(s,t,e,i)}function ya(s,t){return function(e){return t(new qe(s,e))}}function xa(s){return function(t){return s(new ft(t))}}var os=function(t,e,i,r){let n=i;return e===\"click\"||e===\"mousedown\"||e===\"contextmenu\"?n=ya(be(t),i):(e===\"keydown\"||e===\"keypress\"||e===\"keyup\")&&(n=xa(i)),L(t,e,n,r)};var wa,mt;var Mr=class extends kr{constructor(t){super(),this.defaultTarget=t&&be(t)}cancelAndSet(t,e,i){return super.cancelAndSet(t,e,i??this.defaultTarget)}},Di=class{constructor(t,e=0){this._runner=t,this.priority=e,this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(t){Lt(t)}}static sort(t,e){return e.priority-t.priority}};(function(){let s=new Map,t=new Map,e=new Map,i=new Map,r=n=>{e.set(n,!1);let o=s.get(n)??[];for(t.set(n,o),s.set(n,[]),i.set(n,!0);o.length>0;)o.sort(Di.sort),o.shift().execute();i.set(n,!1)};mt=(n,o,l=0)=>{let a=Oo(n),u=new Di(o,l),h=s.get(a);return h||(h=[],s.set(a,h)),h.push(u),e.get(a)||(e.set(a,!0),n.requestAnimationFrame(()=>r(a))),u},wa=(n,o,l)=>{let a=Oo(n);if(i.get(a)){let u=new Di(o,l),h=t.get(a);return h||(h=[],t.set(a,h)),h.push(u),u}else return mt(n,o,l)}})();var pt=class pt{constructor(t,e){this.width=t;this.height=e}with(t=this.width,e=this.height){return t!==this.width||e!==this.height?new pt(t,e):this}static is(t){return typeof t==\"object\"&&typeof t.height==\"number\"&&typeof t.width==\"number\"}static lift(t){return t instanceof pt?t:new pt(t.width,t.height)}static equals(t,e){return t===e?!0:!t||!e?!1:t.width===e.width&&t.height===e.height}};pt.None=new pt(0,0);var Bo=pt;function Fo(s){let t=s.getBoundingClientRect(),e=be(s);return{left:t.left+e.scrollX,top:t.top+e.scrollY,width:t.width,height:t.height}}var Gh=new class{constructor(){this.mutationObservers=new Map}observe(s,t,e){let i=this.mutationObservers.get(s);i||(i=new Map,this.mutationObservers.set(s,i));let r=Mo(e),n=i.get(r);if(n)n.users+=1;else{let o=new v,l=new MutationObserver(u=>o.fire(u));l.observe(s,e);let a=n={users:1,observer:l,onDidMutate:o.event};t.add(C(()=>{a.users-=1,a.users===0&&(o.dispose(),l.disconnect(),i?.delete(r),i?.size===0&&this.mutationObservers.delete(s))})),i.set(r,n)}return n.onDidMutate}};var Y={CLICK:\"click\",AUXCLICK:\"auxclick\",DBLCLICK:\"dblclick\",MOUSE_UP:\"mouseup\",MOUSE_DOWN:\"mousedown\",MOUSE_OVER:\"mouseover\",MOUSE_MOVE:\"mousemove\",MOUSE_OUT:\"mouseout\",MOUSE_ENTER:\"mouseenter\",MOUSE_LEAVE:\"mouseleave\",MOUSE_WHEEL:\"wheel\",POINTER_UP:\"pointerup\",POINTER_DOWN:\"pointerdown\",POINTER_MOVE:\"pointermove\",POINTER_LEAVE:\"pointerleave\",CONTEXT_MENU:\"contextmenu\",WHEEL:\"wheel\",KEY_DOWN:\"keydown\",KEY_PRESS:\"keypress\",KEY_UP:\"keyup\",LOAD:\"load\",BEFORE_UNLOAD:\"beforeunload\",UNLOAD:\"unload\",PAGE_SHOW:\"pageshow\",PAGE_HIDE:\"pagehide\",PASTE:\"paste\",ABORT:\"abort\",ERROR:\"error\",RESIZE:\"resize\",SCROLL:\"scroll\",FULLSCREEN_CHANGE:\"fullscreenchange\",WK_FULLSCREEN_CHANGE:\"webkitfullscreenchange\",SELECT:\"select\",CHANGE:\"change\",SUBMIT:\"submit\",RESET:\"reset\",FOCUS:\"focus\",FOCUS_IN:\"focusin\",FOCUS_OUT:\"focusout\",BLUR:\"blur\",INPUT:\"input\",STORAGE:\"storage\",DRAG_START:\"dragstart\",DRAG:\"drag\",DRAG_ENTER:\"dragenter\",DRAG_LEAVE:\"dragleave\",DRAG_OVER:\"dragover\",DROP:\"drop\",DRAG_END:\"dragend\",ANIMATION_START:Bt?\"webkitAnimationStart\":\"animationstart\",ANIMATION_END:Bt?\"webkitAnimationEnd\":\"animationend\",ANIMATION_ITERATION:Bt?\"webkitAnimationIteration\":\"animationiteration\"};var Da=/([\\w\\-]+)?(#([\\w\\-]+))?((\\.([\\w\\-]+))*)/;function Ho(s,t,e,...i){let r=Da.exec(t);if(!r)throw new Error(\"Bad use of emmet\");let n=r[1]||\"div\",o;return s!==\"http://www.w3.org/1999/xhtml\"?o=document.createElementNS(s,n):o=document.createElement(n),r[3]&&(o.id=r[3]),r[4]&&(o.className=r[4].replace(/\\./g,\" \").trim()),e&&Object.entries(e).forEach(([l,a])=>{typeof a>\"u\"||(/^on\\w+$/.test(l)?o[l]=a:l===\"selected\"?a&&o.setAttribute(l,\"true\"):o.setAttribute(l,a))}),o.append(...i),o}function Ra(s,t,...e){return Ho(\"http://www.w3.org/1999/xhtml\",s,t,...e)}Ra.SVG=function(s,t,...e){return Ho(\"http://www.w3.org/2000/svg\",s,t,...e)};var ls=class{constructor(t){this.domNode=t;this._maxWidth=\"\";this._width=\"\";this._height=\"\";this._top=\"\";this._left=\"\";this._bottom=\"\";this._right=\"\";this._paddingTop=\"\";this._paddingLeft=\"\";this._paddingBottom=\"\";this._paddingRight=\"\";this._fontFamily=\"\";this._fontWeight=\"\";this._fontSize=\"\";this._fontStyle=\"\";this._fontFeatureSettings=\"\";this._fontVariationSettings=\"\";this._textDecoration=\"\";this._lineHeight=\"\";this._letterSpacing=\"\";this._className=\"\";this._display=\"\";this._position=\"\";this._visibility=\"\";this._color=\"\";this._backgroundColor=\"\";this._layerHint=!1;this._contain=\"none\";this._boxShadow=\"\"}setMaxWidth(t){let e=Ie(t);this._maxWidth!==e&&(this._maxWidth=e,this.domNode.style.maxWidth=this._maxWidth)}setWidth(t){let e=Ie(t);this._width!==e&&(this._width=e,this.domNode.style.width=this._width)}setHeight(t){let e=Ie(t);this._height!==e&&(this._height=e,this.domNode.style.height=this._height)}setTop(t){let e=Ie(t);this._top!==e&&(this._top=e,this.domNode.style.top=this._top)}setLeft(t){let e=Ie(t);this._left!==e&&(this._left=e,this.domNode.style.left=this._left)}setBottom(t){let e=Ie(t);this._bottom!==e&&(this._bottom=e,this.domNode.style.bottom=this._bottom)}setRight(t){let e=Ie(t);this._right!==e&&(this._right=e,this.domNode.style.right=this._right)}setPaddingTop(t){let e=Ie(t);this._paddingTop!==e&&(this._paddingTop=e,this.domNode.style.paddingTop=this._paddingTop)}setPaddingLeft(t){let e=Ie(t);this._paddingLeft!==e&&(this._paddingLeft=e,this.domNode.style.paddingLeft=this._paddingLeft)}setPaddingBottom(t){let e=Ie(t);this._paddingBottom!==e&&(this._paddingBottom=e,this.domNode.style.paddingBottom=this._paddingBottom)}setPaddingRight(t){let e=Ie(t);this._paddingRight!==e&&(this._paddingRight=e,this.domNode.style.paddingRight=this._paddingRight)}setFontFamily(t){this._fontFamily!==t&&(this._fontFamily=t,this.domNode.style.fontFamily=this._fontFamily)}setFontWeight(t){this._fontWeight!==t&&(this._fontWeight=t,this.domNode.style.fontWeight=this._fontWeight)}setFontSize(t){let e=Ie(t);this._fontSize!==e&&(this._fontSize=e,this.domNode.style.fontSize=this._fontSize)}setFontStyle(t){this._fontStyle!==t&&(this._fontStyle=t,this.domNode.style.fontStyle=this._fontStyle)}setFontFeatureSettings(t){this._fontFeatureSettings!==t&&(this._fontFeatureSettings=t,this.domNode.style.fontFeatureSettings=this._fontFeatureSettings)}setFontVariationSettings(t){this._fontVariationSettings!==t&&(this._fontVariationSettings=t,this.domNode.style.fontVariationSettings=this._fontVariationSettings)}setTextDecoration(t){this._textDecoration!==t&&(this._textDecoration=t,this.domNode.style.textDecoration=this._textDecoration)}setLineHeight(t){let e=Ie(t);this._lineHeight!==e&&(this._lineHeight=e,this.domNode.style.lineHeight=this._lineHeight)}setLetterSpacing(t){let e=Ie(t);this._letterSpacing!==e&&(this._letterSpacing=e,this.domNode.style.letterSpacing=this._letterSpacing)}setClassName(t){this._className!==t&&(this._className=t,this.domNode.className=this._className)}toggleClassName(t,e){this.domNode.classList.toggle(t,e),this._className=this.domNode.className}setDisplay(t){this._display!==t&&(this._display=t,this.domNode.style.display=this._display)}setPosition(t){this._position!==t&&(this._position=t,this.domNode.style.position=this._position)}setVisibility(t){this._visibility!==t&&(this._visibility=t,this.domNode.style.visibility=this._visibility)}setColor(t){this._color!==t&&(this._color=t,this.domNode.style.color=this._color)}setBackgroundColor(t){this._backgroundColor!==t&&(this._backgroundColor=t,this.domNode.style.backgroundColor=this._backgroundColor)}setLayerHinting(t){this._layerHint!==t&&(this._layerHint=t,this.domNode.style.transform=this._layerHint?\"translate3d(0px, 0px, 0px)\":\"\")}setBoxShadow(t){this._boxShadow!==t&&(this._boxShadow=t,this.domNode.style.boxShadow=t)}setContain(t){this._contain!==t&&(this._contain=t,this.domNode.style.contain=this._contain)}setAttribute(t,e){this.domNode.setAttribute(t,e)}removeAttribute(t){this.domNode.removeAttribute(t)}appendChild(t){this.domNode.appendChild(t.domNode)}removeChild(t){this.domNode.removeChild(t.domNode)}};function Ie(s){return typeof s==\"number\"?`${s}px`:s}function _t(s){return new ls(s)}var Wt=class{constructor(){this._hooks=new Ee;this._pointerMoveCallback=null;this._onStopCallback=null}dispose(){this.stopMonitoring(!1),this._hooks.dispose()}stopMonitoring(t,e){if(!this.isMonitoring())return;this._hooks.clear(),this._pointerMoveCallback=null;let i=this._onStopCallback;this._onStopCallback=null,t&&i&&i(e)}isMonitoring(){return!!this._pointerMoveCallback}startMonitoring(t,e,i,r,n){this.isMonitoring()&&this.stopMonitoring(!1),this._pointerMoveCallback=r,this._onStopCallback=n;let o=t;try{t.setPointerCapture(e),this._hooks.add(C(()=>{try{t.releasePointerCapture(e)}catch{}}))}catch{o=be(t)}this._hooks.add(L(o,Y.POINTER_MOVE,l=>{if(l.buttons!==i){this.stopMonitoring(!0);return}l.preventDefault(),this._pointerMoveCallback(l)})),this._hooks.add(L(o,Y.POINTER_UP,l=>this.stopMonitoring(!0)))}};function Wo(s,t,e){let i=null,r=null;if(typeof e.value==\"function\"?(i=\"value\",r=e.value,r.length!==0&&console.warn(\"Memoize should only be used in functions with zero parameters\")):typeof e.get==\"function\"&&(i=\"get\",r=e.get),!r)throw new Error(\"not supported\");let n=`$memoize$${t}`;e[i]=function(...o){return this.hasOwnProperty(n)||Object.defineProperty(this,n,{configurable:!1,enumerable:!1,writable:!1,value:r.apply(this,o)}),this[n]}}var He;(n=>(n.Tap=\"-xterm-gesturetap\",n.Change=\"-xterm-gesturechange\",n.Start=\"-xterm-gesturestart\",n.End=\"-xterm-gesturesend\",n.Contextmenu=\"-xterm-gesturecontextmenu\"))(He||={});var Q=class Q extends D{constructor(){super();this.dispatched=!1;this.targets=new Ct;this.ignoreTargets=new Ct;this.activeTouches={},this.handle=null,this._lastSetTapCountTime=0,this._register($.runAndSubscribe(No,({window:e,disposables:i})=>{i.add(L(e.document,\"touchstart\",r=>this.onTouchStart(r),{passive:!1})),i.add(L(e.document,\"touchend\",r=>this.onTouchEnd(e,r))),i.add(L(e.document,\"touchmove\",r=>this.onTouchMove(r),{passive:!1}))},{window:fe,disposables:this._store}))}static addTarget(e){if(!Q.isTouchDevice())return D.None;Q.INSTANCE||(Q.INSTANCE=Gn(new Q));let i=Q.INSTANCE.targets.push(e);return C(i)}static ignoreTarget(e){if(!Q.isTouchDevice())return D.None;Q.INSTANCE||(Q.INSTANCE=Gn(new Q));let i=Q.INSTANCE.ignoreTargets.push(e);return C(i)}static isTouchDevice(){return\"ontouchstart\"in fe||navigator.maxTouchPoints>0}dispose(){this.handle&&(this.handle.dispose(),this.handle=null),super.dispose()}onTouchStart(e){let i=Date.now();this.handle&&(this.handle.dispose(),this.handle=null);for(let r=0,n=e.targetTouches.length;r<n;r++){let o=e.targetTouches.item(r);this.activeTouches[o.identifier]={id:o.identifier,initialTarget:o.target,initialTimeStamp:i,initialPageX:o.pageX,initialPageY:o.pageY,rollingTimestamps:[i],rollingPageX:[o.pageX],rollingPageY:[o.pageY]};let l=this.newGestureEvent(He.Start,o.target);l.pageX=o.pageX,l.pageY=o.pageY,this.dispatchEvent(l)}this.dispatched&&(e.preventDefault(),e.stopPropagation(),this.dispatched=!1)}onTouchEnd(e,i){let r=Date.now(),n=Object.keys(this.activeTouches).length;for(let o=0,l=i.changedTouches.length;o<l;o++){let a=i.changedTouches.item(o);if(!this.activeTouches.hasOwnProperty(String(a.identifier))){console.warn(\"move of an UNKNOWN touch\",a);continue}let u=this.activeTouches[a.identifier],h=Date.now()-u.initialTimeStamp;if(h<Q.HOLD_DELAY&&Math.abs(u.initialPageX-Se(u.rollingPageX))<30&&Math.abs(u.initialPageY-Se(u.rollingPageY))<30){let c=this.newGestureEvent(He.Tap,u.initialTarget);c.pageX=Se(u.rollingPageX),c.pageY=Se(u.rollingPageY),this.dispatchEvent(c)}else if(h>=Q.HOLD_DELAY&&Math.abs(u.initialPageX-Se(u.rollingPageX))<30&&Math.abs(u.initialPageY-Se(u.rollingPageY))<30){let c=this.newGestureEvent(He.Contextmenu,u.initialTarget);c.pageX=Se(u.rollingPageX),c.pageY=Se(u.rollingPageY),this.dispatchEvent(c)}else if(n===1){let c=Se(u.rollingPageX),d=Se(u.rollingPageY),_=Se(u.rollingTimestamps)-u.rollingTimestamps[0],p=c-u.rollingPageX[0],m=d-u.rollingPageY[0],f=[...this.targets].filter(A=>u.initialTarget instanceof Node&&A.contains(u.initialTarget));this.inertia(e,f,r,Math.abs(p)/_,p>0?1:-1,c,Math.abs(m)/_,m>0?1:-1,d)}this.dispatchEvent(this.newGestureEvent(He.End,u.initialTarget)),delete this.activeTouches[a.identifier]}this.dispatched&&(i.preventDefault(),i.stopPropagation(),this.dispatched=!1)}newGestureEvent(e,i){let r=document.createEvent(\"CustomEvent\");return r.initEvent(e,!1,!0),r.initialTarget=i,r.tapCount=0,r}dispatchEvent(e){if(e.type===He.Tap){let i=new Date().getTime(),r=0;i-this._lastSetTapCountTime>Q.CLEAR_TAP_COUNT_TIME?r=1:r=2,this._lastSetTapCountTime=i,e.tapCount=r}else(e.type===He.Change||e.type===He.Contextmenu)&&(this._lastSetTapCountTime=0);if(e.initialTarget instanceof Node){for(let r of this.ignoreTargets)if(r.contains(e.initialTarget))return;let i=[];for(let r of this.targets)if(r.contains(e.initialTarget)){let n=0,o=e.initialTarget;for(;o&&o!==r;)n++,o=o.parentElement;i.push([n,r])}i.sort((r,n)=>r[0]-n[0]);for(let[r,n]of i)n.dispatchEvent(e),this.dispatched=!0}}inertia(e,i,r,n,o,l,a,u,h){this.handle=mt(e,()=>{let c=Date.now(),d=c-r,_=0,p=0,m=!0;n+=Q.SCROLL_FRICTION*d,a+=Q.SCROLL_FRICTION*d,n>0&&(m=!1,_=o*n*d),a>0&&(m=!1,p=u*a*d);let f=this.newGestureEvent(He.Change);f.translationX=_,f.translationY=p,i.forEach(A=>A.dispatchEvent(f)),m||this.inertia(e,i,c,n,o,l+_,a,u,h+p)})}onTouchMove(e){let i=Date.now();for(let r=0,n=e.changedTouches.length;r<n;r++){let o=e.changedTouches.item(r);if(!this.activeTouches.hasOwnProperty(String(o.identifier))){console.warn(\"end of an UNKNOWN touch\",o);continue}let l=this.activeTouches[o.identifier],a=this.newGestureEvent(He.Change,l.initialTarget);a.translationX=o.pageX-Se(l.rollingPageX),a.translationY=o.pageY-Se(l.rollingPageY),a.pageX=o.pageX,a.pageY=o.pageY,this.dispatchEvent(a),l.rollingPageX.length>3&&(l.rollingPageX.shift(),l.rollingPageY.shift(),l.rollingTimestamps.shift()),l.rollingPageX.push(o.pageX),l.rollingPageY.push(o.pageY),l.rollingTimestamps.push(i)}this.dispatched&&(e.preventDefault(),e.stopPropagation(),this.dispatched=!1)}};Q.SCROLL_FRICTION=-.005,Q.HOLD_DELAY=700,Q.CLEAR_TAP_COUNT_TIME=400,M([Wo],Q,\"isTouchDevice\",1);var Pr=Q;var lt=class extends D{onclick(t,e){this._register(L(t,Y.CLICK,i=>e(new qe(be(t),i))))}onmousedown(t,e){this._register(L(t,Y.MOUSE_DOWN,i=>e(new qe(be(t),i))))}onmouseover(t,e){this._register(L(t,Y.MOUSE_OVER,i=>e(new qe(be(t),i))))}onmouseleave(t,e){this._register(L(t,Y.MOUSE_LEAVE,i=>e(new qe(be(t),i))))}onkeydown(t,e){this._register(L(t,Y.KEY_DOWN,i=>e(new ft(i))))}onkeyup(t,e){this._register(L(t,Y.KEY_UP,i=>e(new ft(i))))}oninput(t,e){this._register(L(t,Y.INPUT,e))}onblur(t,e){this._register(L(t,Y.BLUR,e))}onfocus(t,e){this._register(L(t,Y.FOCUS,e))}onchange(t,e){this._register(L(t,Y.CHANGE,e))}ignoreGesture(t){return Pr.ignoreTarget(t)}};var Uo=11,Or=class extends lt{constructor(t){super(),this._onActivate=t.onActivate,this.bgDomNode=document.createElement(\"div\"),this.bgDomNode.className=\"arrow-background\",this.bgDomNode.style.position=\"absolute\",this.bgDomNode.style.width=t.bgWidth+\"px\",this.bgDomNode.style.height=t.bgHeight+\"px\",typeof t.top<\"u\"&&(this.bgDomNode.style.top=\"0px\"),typeof t.left<\"u\"&&(this.bgDomNode.style.left=\"0px\"),typeof t.bottom<\"u\"&&(this.bgDomNode.style.bottom=\"0px\"),typeof t.right<\"u\"&&(this.bgDomNode.style.right=\"0px\"),this.domNode=document.createElement(\"div\"),this.domNode.className=t.className,this.domNode.style.position=\"absolute\",this.domNode.style.width=Uo+\"px\",this.domNode.style.height=Uo+\"px\",typeof t.top<\"u\"&&(this.domNode.style.top=t.top+\"px\"),typeof t.left<\"u\"&&(this.domNode.style.left=t.left+\"px\"),typeof t.bottom<\"u\"&&(this.domNode.style.bottom=t.bottom+\"px\"),typeof t.right<\"u\"&&(this.domNode.style.right=t.right+\"px\"),this._pointerMoveMonitor=this._register(new Wt),this._register(os(this.bgDomNode,Y.POINTER_DOWN,e=>this._arrowPointerDown(e))),this._register(os(this.domNode,Y.POINTER_DOWN,e=>this._arrowPointerDown(e))),this._pointerdownRepeatTimer=this._register(new Mr),this._pointerdownScheduleRepeatTimer=this._register(new Ye)}_arrowPointerDown(t){if(!t.target||!(t.target instanceof Element))return;let e=()=>{this._pointerdownRepeatTimer.cancelAndSet(()=>this._onActivate(),1e3/24,be(t))};this._onActivate(),this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancelAndSet(e,200),this._pointerMoveMonitor.startMonitoring(t.target,t.pointerId,t.buttons,i=>{},()=>{this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancel()}),t.preventDefault()}};var cs=class s{constructor(t,e,i,r,n,o,l){this._forceIntegerValues=t;this._scrollStateBrand=void 0;this._forceIntegerValues&&(e=e|0,i=i|0,r=r|0,n=n|0,o=o|0,l=l|0),this.rawScrollLeft=r,this.rawScrollTop=l,e<0&&(e=0),r+e>i&&(r=i-e),r<0&&(r=0),n<0&&(n=0),l+n>o&&(l=o-n),l<0&&(l=0),this.width=e,this.scrollWidth=i,this.scrollLeft=r,this.height=n,this.scrollHeight=o,this.scrollTop=l}equals(t){return this.rawScrollLeft===t.rawScrollLeft&&this.rawScrollTop===t.rawScrollTop&&this.width===t.width&&this.scrollWidth===t.scrollWidth&&this.scrollLeft===t.scrollLeft&&this.height===t.height&&this.scrollHeight===t.scrollHeight&&this.scrollTop===t.scrollTop}withScrollDimensions(t,e){return new s(this._forceIntegerValues,typeof t.width<\"u\"?t.width:this.width,typeof t.scrollWidth<\"u\"?t.scrollWidth:this.scrollWidth,e?this.rawScrollLeft:this.scrollLeft,typeof t.height<\"u\"?t.height:this.height,typeof t.scrollHeight<\"u\"?t.scrollHeight:this.scrollHeight,e?this.rawScrollTop:this.scrollTop)}withScrollPosition(t){return new s(this._forceIntegerValues,this.width,this.scrollWidth,typeof t.scrollLeft<\"u\"?t.scrollLeft:this.rawScrollLeft,this.height,this.scrollHeight,typeof t.scrollTop<\"u\"?t.scrollTop:this.rawScrollTop)}createScrollEvent(t,e){let i=this.width!==t.width,r=this.scrollWidth!==t.scrollWidth,n=this.scrollLeft!==t.scrollLeft,o=this.height!==t.height,l=this.scrollHeight!==t.scrollHeight,a=this.scrollTop!==t.scrollTop;return{inSmoothScrolling:e,oldWidth:t.width,oldScrollWidth:t.scrollWidth,oldScrollLeft:t.scrollLeft,width:this.width,scrollWidth:this.scrollWidth,scrollLeft:this.scrollLeft,oldHeight:t.height,oldScrollHeight:t.scrollHeight,oldScrollTop:t.scrollTop,height:this.height,scrollHeight:this.scrollHeight,scrollTop:this.scrollTop,widthChanged:i,scrollWidthChanged:r,scrollLeftChanged:n,heightChanged:o,scrollHeightChanged:l,scrollTopChanged:a}}},Ri=class extends D{constructor(e){super();this._scrollableBrand=void 0;this._onScroll=this._register(new v);this.onScroll=this._onScroll.event;this._smoothScrollDuration=e.smoothScrollDuration,this._scheduleAtNextAnimationFrame=e.scheduleAtNextAnimationFrame,this._state=new cs(e.forceIntegerValues,0,0,0,0,0,0),this._smoothScrolling=null}dispose(){this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),super.dispose()}setSmoothScrollDuration(e){this._smoothScrollDuration=e}validateScrollPosition(e){return this._state.withScrollPosition(e)}getScrollDimensions(){return this._state}setScrollDimensions(e,i){let r=this._state.withScrollDimensions(e,i);this._setState(r,!!this._smoothScrolling),this._smoothScrolling?.acceptScrollDimensions(this._state)}getFutureScrollPosition(){return this._smoothScrolling?this._smoothScrolling.to:this._state}getCurrentScrollPosition(){return this._state}setScrollPositionNow(e){let i=this._state.withScrollPosition(e);this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),this._setState(i,!1)}setScrollPositionSmooth(e,i){if(this._smoothScrollDuration===0)return this.setScrollPositionNow(e);if(this._smoothScrolling){e={scrollLeft:typeof e.scrollLeft>\"u\"?this._smoothScrolling.to.scrollLeft:e.scrollLeft,scrollTop:typeof e.scrollTop>\"u\"?this._smoothScrolling.to.scrollTop:e.scrollTop};let r=this._state.withScrollPosition(e);if(this._smoothScrolling.to.scrollLeft===r.scrollLeft&&this._smoothScrolling.to.scrollTop===r.scrollTop)return;let n;i?n=new Nr(this._smoothScrolling.from,r,this._smoothScrolling.startTime,this._smoothScrolling.duration):n=this._smoothScrolling.combine(this._state,r,this._smoothScrollDuration),this._smoothScrolling.dispose(),this._smoothScrolling=n}else{let r=this._state.withScrollPosition(e);this._smoothScrolling=Nr.start(this._state,r,this._smoothScrollDuration)}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}hasPendingScrollAnimation(){return!!this._smoothScrolling}_performSmoothScrolling(){if(!this._smoothScrolling)return;let e=this._smoothScrolling.tick(),i=this._state.withScrollPosition(e);if(this._setState(i,!0),!!this._smoothScrolling){if(e.isDone){this._smoothScrolling.dispose(),this._smoothScrolling=null;return}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}}_setState(e,i){let r=this._state;r.equals(e)||(this._state=e,this._onScroll.fire(this._state.createScrollEvent(r,i)))}},Br=class{constructor(t,e,i){this.scrollLeft=t,this.scrollTop=e,this.isDone=i}};function as(s,t){let e=t-s;return function(i){return s+e*ka(i)}}function La(s,t,e){return function(i){return i<e?s(i/e):t((i-e)/(1-e))}}var Nr=class s{constructor(t,e,i,r){this.from=t,this.to=e,this.duration=r,this.startTime=i,this.animationFrameDisposable=null,this._initAnimations()}_initAnimations(){this.scrollLeft=this._initAnimation(this.from.scrollLeft,this.to.scrollLeft,this.to.width),this.scrollTop=this._initAnimation(this.from.scrollTop,this.to.scrollTop,this.to.height)}_initAnimation(t,e,i){if(Math.abs(t-e)>2.5*i){let n,o;return t<e?(n=t+.75*i,o=e-.75*i):(n=t-.75*i,o=e+.75*i),La(as(t,n),as(o,e),.33)}return as(t,e)}dispose(){this.animationFrameDisposable!==null&&(this.animationFrameDisposable.dispose(),this.animationFrameDisposable=null)}acceptScrollDimensions(t){this.to=t.withScrollPosition(this.to),this._initAnimations()}tick(){return this._tick(Date.now())}_tick(t){let e=(t-this.startTime)/this.duration;if(e<1){let i=this.scrollLeft(e),r=this.scrollTop(e);return new Br(i,r,!1)}return new Br(this.to.scrollLeft,this.to.scrollTop,!0)}combine(t,e,i){return s.start(t,e,i)}static start(t,e,i){i=i+10;let r=Date.now()-10;return new s(t,e,r,i)}};function Aa(s){return Math.pow(s,3)}function ka(s){return 1-Aa(1-s)}var Fr=class extends D{constructor(t,e,i){super(),this._visibility=t,this._visibleClassName=e,this._invisibleClassName=i,this._domNode=null,this._isVisible=!1,this._isNeeded=!1,this._rawShouldBeVisible=!1,this._shouldBeVisible=!1,this._revealTimer=this._register(new Ye)}setVisibility(t){this._visibility!==t&&(this._visibility=t,this._updateShouldBeVisible())}setShouldBeVisible(t){this._rawShouldBeVisible=t,this._updateShouldBeVisible()}_applyVisibilitySetting(){return this._visibility===2?!1:this._visibility===3?!0:this._rawShouldBeVisible}_updateShouldBeVisible(){let t=this._applyVisibilitySetting();this._shouldBeVisible!==t&&(this._shouldBeVisible=t,this.ensureVisibility())}setIsNeeded(t){this._isNeeded!==t&&(this._isNeeded=t,this.ensureVisibility())}setDomNode(t){this._domNode=t,this._domNode.setClassName(this._invisibleClassName),this.setShouldBeVisible(!1)}ensureVisibility(){if(!this._isNeeded){this._hide(!1);return}this._shouldBeVisible?this._reveal():this._hide(!0)}_reveal(){this._isVisible||(this._isVisible=!0,this._revealTimer.setIfNotSet(()=>{this._domNode?.setClassName(this._visibleClassName)},0))}_hide(t){this._revealTimer.cancel(),this._isVisible&&(this._isVisible=!1,this._domNode?.setClassName(this._invisibleClassName+(t?\" fade\":\"\")))}};var Ca=140,Ut=class extends lt{constructor(t){super(),this._lazyRender=t.lazyRender,this._host=t.host,this._scrollable=t.scrollable,this._scrollByPage=t.scrollByPage,this._scrollbarState=t.scrollbarState,this._visibilityController=this._register(new Fr(t.visibility,\"visible scrollbar \"+t.extraScrollbarClassName,\"invisible scrollbar \"+t.extraScrollbarClassName)),this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._pointerMoveMonitor=this._register(new Wt),this._shouldRender=!0,this.domNode=_t(document.createElement(\"div\")),this.domNode.setAttribute(\"role\",\"presentation\"),this.domNode.setAttribute(\"aria-hidden\",\"true\"),this._visibilityController.setDomNode(this.domNode),this.domNode.setPosition(\"absolute\"),this._register(L(this.domNode.domNode,Y.POINTER_DOWN,e=>this._domNodePointerDown(e)))}_createArrow(t){let e=this._register(new Or(t));this.domNode.domNode.appendChild(e.bgDomNode),this.domNode.domNode.appendChild(e.domNode)}_createSlider(t,e,i,r){this.slider=_t(document.createElement(\"div\")),this.slider.setClassName(\"slider\"),this.slider.setPosition(\"absolute\"),this.slider.setTop(t),this.slider.setLeft(e),typeof i==\"number\"&&this.slider.setWidth(i),typeof r==\"number\"&&this.slider.setHeight(r),this.slider.setLayerHinting(!0),this.slider.setContain(\"strict\"),this.domNode.domNode.appendChild(this.slider.domNode),this._register(L(this.slider.domNode,Y.POINTER_DOWN,n=>{n.button===0&&(n.preventDefault(),this._sliderPointerDown(n))})),this.onclick(this.slider.domNode,n=>{n.leftButton&&n.stopPropagation()})}_onElementSize(t){return this._scrollbarState.setVisibleSize(t)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_onElementScrollSize(t){return this._scrollbarState.setScrollSize(t)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_onElementScrollPosition(t){return this._scrollbarState.setScrollPosition(t)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}beginReveal(){this._visibilityController.setShouldBeVisible(!0)}beginHide(){this._visibilityController.setShouldBeVisible(!1)}render(){this._shouldRender&&(this._shouldRender=!1,this._renderDomNode(this._scrollbarState.getRectangleLargeSize(),this._scrollbarState.getRectangleSmallSize()),this._updateSlider(this._scrollbarState.getSliderSize(),this._scrollbarState.getArrowSize()+this._scrollbarState.getSliderPosition()))}_domNodePointerDown(t){t.target===this.domNode.domNode&&this._onPointerDown(t)}delegatePointerDown(t){let e=this.domNode.domNode.getClientRects()[0].top,i=e+this._scrollbarState.getSliderPosition(),r=e+this._scrollbarState.getSliderPosition()+this._scrollbarState.getSliderSize(),n=this._sliderPointerPosition(t);i<=n&&n<=r?t.button===0&&(t.preventDefault(),this._sliderPointerDown(t)):this._onPointerDown(t)}_onPointerDown(t){let e,i;if(t.target===this.domNode.domNode&&typeof t.offsetX==\"number\"&&typeof t.offsetY==\"number\")e=t.offsetX,i=t.offsetY;else{let n=Fo(this.domNode.domNode);e=t.pageX-n.left,i=t.pageY-n.top}let r=this._pointerDownRelativePosition(e,i);this._setDesiredScrollPositionNow(this._scrollByPage?this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(r):this._scrollbarState.getDesiredScrollPositionFromOffset(r)),t.button===0&&(t.preventDefault(),this._sliderPointerDown(t))}_sliderPointerDown(t){if(!t.target||!(t.target instanceof Element))return;let e=this._sliderPointerPosition(t),i=this._sliderOrthogonalPointerPosition(t),r=this._scrollbarState.clone();this.slider.toggleClassName(\"active\",!0),this._pointerMoveMonitor.startMonitoring(t.target,t.pointerId,t.buttons,n=>{let o=this._sliderOrthogonalPointerPosition(n),l=Math.abs(o-i);if(wr&&l>Ca){this._setDesiredScrollPositionNow(r.getScrollPosition());return}let u=this._sliderPointerPosition(n)-e;this._setDesiredScrollPositionNow(r.getDesiredScrollPositionFromDelta(u))},()=>{this.slider.toggleClassName(\"active\",!1),this._host.onDragEnd()}),this._host.onDragStart()}_setDesiredScrollPositionNow(t){let e={};this.writeScrollPosition(e,t),this._scrollable.setScrollPositionNow(e)}updateScrollbarSize(t){this._updateScrollbarSize(t),this._scrollbarState.setScrollbarSize(t),this._shouldRender=!0,this._lazyRender||this.render()}isNeeded(){return this._scrollbarState.isNeeded()}};var Kt=class s{constructor(t,e,i,r,n,o){this._scrollbarSize=Math.round(e),this._oppositeScrollbarSize=Math.round(i),this._arrowSize=Math.round(t),this._visibleSize=r,this._scrollSize=n,this._scrollPosition=o,this._computedAvailableSize=0,this._computedIsNeeded=!1,this._computedSliderSize=0,this._computedSliderRatio=0,this._computedSliderPosition=0,this._refreshComputedValues()}clone(){return new s(this._arrowSize,this._scrollbarSize,this._oppositeScrollbarSize,this._visibleSize,this._scrollSize,this._scrollPosition)}setVisibleSize(t){let e=Math.round(t);return this._visibleSize!==e?(this._visibleSize=e,this._refreshComputedValues(),!0):!1}setScrollSize(t){let e=Math.round(t);return this._scrollSize!==e?(this._scrollSize=e,this._refreshComputedValues(),!0):!1}setScrollPosition(t){let e=Math.round(t);return this._scrollPosition!==e?(this._scrollPosition=e,this._refreshComputedValues(),!0):!1}setScrollbarSize(t){this._scrollbarSize=Math.round(t)}setOppositeScrollbarSize(t){this._oppositeScrollbarSize=Math.round(t)}static _computeValues(t,e,i,r,n){let o=Math.max(0,i-t),l=Math.max(0,o-2*e),a=r>0&&r>i;if(!a)return{computedAvailableSize:Math.round(o),computedIsNeeded:a,computedSliderSize:Math.round(l),computedSliderRatio:0,computedSliderPosition:0};let u=Math.round(Math.max(20,Math.floor(i*l/r))),h=(l-u)/(r-i),c=n*h;return{computedAvailableSize:Math.round(o),computedIsNeeded:a,computedSliderSize:Math.round(u),computedSliderRatio:h,computedSliderPosition:Math.round(c)}}_refreshComputedValues(){let t=s._computeValues(this._oppositeScrollbarSize,this._arrowSize,this._visibleSize,this._scrollSize,this._scrollPosition);this._computedAvailableSize=t.computedAvailableSize,this._computedIsNeeded=t.computedIsNeeded,this._computedSliderSize=t.computedSliderSize,this._computedSliderRatio=t.computedSliderRatio,this._computedSliderPosition=t.computedSliderPosition}getArrowSize(){return this._arrowSize}getScrollPosition(){return this._scrollPosition}getRectangleLargeSize(){return this._computedAvailableSize}getRectangleSmallSize(){return this._scrollbarSize}isNeeded(){return this._computedIsNeeded}getSliderSize(){return this._computedSliderSize}getSliderPosition(){return this._computedSliderPosition}getDesiredScrollPositionFromOffset(t){if(!this._computedIsNeeded)return 0;let e=t-this._arrowSize-this._computedSliderSize/2;return Math.round(e/this._computedSliderRatio)}getDesiredScrollPositionFromOffsetPaged(t){if(!this._computedIsNeeded)return 0;let e=t-this._arrowSize,i=this._scrollPosition;return e<this._computedSliderPosition?i-=this._visibleSize:i+=this._visibleSize,i}getDesiredScrollPositionFromDelta(t){if(!this._computedIsNeeded)return 0;let e=this._computedSliderPosition+t;return Math.round(e/this._computedSliderRatio)}};var Wr=class extends Ut{constructor(t,e,i){let r=t.getScrollDimensions(),n=t.getCurrentScrollPosition();if(super({lazyRender:e.lazyRender,host:i,scrollbarState:new Kt(e.horizontalHasArrows?e.arrowSize:0,e.horizontal===2?0:e.horizontalScrollbarSize,e.vertical===2?0:e.verticalScrollbarSize,r.width,r.scrollWidth,n.scrollLeft),visibility:e.horizontal,extraScrollbarClassName:\"horizontal\",scrollable:t,scrollByPage:e.scrollByPage}),e.horizontalHasArrows)throw new Error(\"horizontalHasArrows is not supported in xterm.js\");this._createSlider(Math.floor((e.horizontalScrollbarSize-e.horizontalSliderSize)/2),0,void 0,e.horizontalSliderSize)}_updateSlider(t,e){this.slider.setWidth(t),this.slider.setLeft(e)}_renderDomNode(t,e){this.domNode.setWidth(t),this.domNode.setHeight(e),this.domNode.setLeft(0),this.domNode.setBottom(0)}onDidScroll(t){return this._shouldRender=this._onElementScrollSize(t.scrollWidth)||this._shouldRender,this._shouldRender=this._onElementScrollPosition(t.scrollLeft)||this._shouldRender,this._shouldRender=this._onElementSize(t.width)||this._shouldRender,this._shouldRender}_pointerDownRelativePosition(t,e){return t}_sliderPointerPosition(t){return t.pageX}_sliderOrthogonalPointerPosition(t){return t.pageY}_updateScrollbarSize(t){this.slider.setHeight(t)}writeScrollPosition(t,e){t.scrollLeft=e}updateOptions(t){this.updateScrollbarSize(t.horizontal===2?0:t.horizontalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(t.vertical===2?0:t.verticalScrollbarSize),this._visibilityController.setVisibility(t.horizontal),this._scrollByPage=t.scrollByPage}};var Ur=class extends Ut{constructor(t,e,i){let r=t.getScrollDimensions(),n=t.getCurrentScrollPosition();if(super({lazyRender:e.lazyRender,host:i,scrollbarState:new Kt(e.verticalHasArrows?e.arrowSize:0,e.vertical===2?0:e.verticalScrollbarSize,0,r.height,r.scrollHeight,n.scrollTop),visibility:e.vertical,extraScrollbarClassName:\"vertical\",scrollable:t,scrollByPage:e.scrollByPage}),e.verticalHasArrows)throw new Error(\"horizontalHasArrows is not supported in xterm.js\");this._createSlider(0,Math.floor((e.verticalScrollbarSize-e.verticalSliderSize)/2),e.verticalSliderSize,void 0)}_updateSlider(t,e){this.slider.setHeight(t),this.slider.setTop(e)}_renderDomNode(t,e){this.domNode.setWidth(e),this.domNode.setHeight(t),this.domNode.setRight(0),this.domNode.setTop(0)}onDidScroll(t){return this._shouldRender=this._onElementScrollSize(t.scrollHeight)||this._shouldRender,this._shouldRender=this._onElementScrollPosition(t.scrollTop)||this._shouldRender,this._shouldRender=this._onElementSize(t.height)||this._shouldRender,this._shouldRender}_pointerDownRelativePosition(t,e){return e}_sliderPointerPosition(t){return t.pageY}_sliderOrthogonalPointerPosition(t){return t.pageX}_updateScrollbarSize(t){this.slider.setWidth(t)}writeScrollPosition(t,e){t.scrollTop=e}updateOptions(t){this.updateScrollbarSize(t.vertical===2?0:t.verticalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(0),this._visibilityController.setVisibility(t.vertical),this._scrollByPage=t.scrollByPage}};var Ma=500,Ko=50,zo=!0,us=class{constructor(t,e,i){this.timestamp=t,this.deltaX=e,this.deltaY=i,this.score=0}},zr=class zr{constructor(){this._capacity=5,this._memory=[],this._front=-1,this._rear=-1}isPhysicalMouseWheel(){if(this._front===-1&&this._rear===-1)return!1;let t=1,e=0,i=1,r=this._rear;do{let n=r===this._front?t:Math.pow(2,-i);if(t-=n,e+=this._memory[r].score*n,r===this._front)break;r=(this._capacity+r-1)%this._capacity,i++}while(!0);return e<=.5}acceptStandardWheelEvent(t){if(Ti){let e=be(t.browserEvent),i=mo(e);this.accept(Date.now(),t.deltaX*i,t.deltaY*i)}else this.accept(Date.now(),t.deltaX,t.deltaY)}accept(t,e,i){let r=null,n=new us(t,e,i);this._front===-1&&this._rear===-1?(this._memory[0]=n,this._front=0,this._rear=0):(r=this._memory[this._rear],this._rear=(this._rear+1)%this._capacity,this._rear===this._front&&(this._front=(this._front+1)%this._capacity),this._memory[this._rear]=n),n.score=this._computeScore(n,r)}_computeScore(t,e){if(Math.abs(t.deltaX)>0&&Math.abs(t.deltaY)>0)return 1;let i=.5;if((!this._isAlmostInt(t.deltaX)||!this._isAlmostInt(t.deltaY))&&(i+=.25),e){let r=Math.abs(t.deltaX),n=Math.abs(t.deltaY),o=Math.abs(e.deltaX),l=Math.abs(e.deltaY),a=Math.max(Math.min(r,o),1),u=Math.max(Math.min(n,l),1),h=Math.max(r,o),c=Math.max(n,l);h%a===0&&c%u===0&&(i-=.5)}return Math.min(Math.max(i,0),1)}_isAlmostInt(t){return Math.abs(Math.round(t)-t)<.01}};zr.INSTANCE=new zr;var hs=zr,ds=class extends lt{constructor(e,i,r){super();this._onScroll=this._register(new v);this.onScroll=this._onScroll.event;this._onWillScroll=this._register(new v);this.onWillScroll=this._onWillScroll.event;this._options=Pa(i),this._scrollable=r,this._register(this._scrollable.onScroll(o=>{this._onWillScroll.fire(o),this._onDidScroll(o),this._onScroll.fire(o)}));let n={onMouseWheel:o=>this._onMouseWheel(o),onDragStart:()=>this._onDragStart(),onDragEnd:()=>this._onDragEnd()};this._verticalScrollbar=this._register(new Ur(this._scrollable,this._options,n)),this._horizontalScrollbar=this._register(new Wr(this._scrollable,this._options,n)),this._domNode=document.createElement(\"div\"),this._domNode.className=\"xterm-scrollable-element \"+this._options.className,this._domNode.setAttribute(\"role\",\"presentation\"),this._domNode.style.position=\"relative\",this._domNode.appendChild(e),this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode),this._domNode.appendChild(this._verticalScrollbar.domNode.domNode),this._options.useShadows?(this._leftShadowDomNode=_t(document.createElement(\"div\")),this._leftShadowDomNode.setClassName(\"shadow\"),this._domNode.appendChild(this._leftShadowDomNode.domNode),this._topShadowDomNode=_t(document.createElement(\"div\")),this._topShadowDomNode.setClassName(\"shadow\"),this._domNode.appendChild(this._topShadowDomNode.domNode),this._topLeftShadowDomNode=_t(document.createElement(\"div\")),this._topLeftShadowDomNode.setClassName(\"shadow\"),this._domNode.appendChild(this._topLeftShadowDomNode.domNode)):(this._leftShadowDomNode=null,this._topShadowDomNode=null,this._topLeftShadowDomNode=null),this._listenOnDomNode=this._options.listenOnDomNode||this._domNode,this._mouseWheelToDispose=[],this._setListeningToMouseWheel(this._options.handleMouseWheel),this.onmouseover(this._listenOnDomNode,o=>this._onMouseOver(o)),this.onmouseleave(this._listenOnDomNode,o=>this._onMouseLeave(o)),this._hideTimeout=this._register(new Ye),this._isDragging=!1,this._mouseIsOver=!1,this._shouldRender=!0,this._revealOnScroll=!0}get options(){return this._options}dispose(){this._mouseWheelToDispose=Ne(this._mouseWheelToDispose),super.dispose()}getDomNode(){return this._domNode}getOverviewRulerLayoutInfo(){return{parent:this._domNode,insertBefore:this._verticalScrollbar.domNode.domNode}}delegateVerticalScrollbarPointerDown(e){this._verticalScrollbar.delegatePointerDown(e)}getScrollDimensions(){return this._scrollable.getScrollDimensions()}setScrollDimensions(e){this._scrollable.setScrollDimensions(e,!1)}updateClassName(e){this._options.className=e,Te&&(this._options.className+=\" mac\"),this._domNode.className=\"xterm-scrollable-element \"+this._options.className}updateOptions(e){typeof e.handleMouseWheel<\"u\"&&(this._options.handleMouseWheel=e.handleMouseWheel,this._setListeningToMouseWheel(this._options.handleMouseWheel)),typeof e.mouseWheelScrollSensitivity<\"u\"&&(this._options.mouseWheelScrollSensitivity=e.mouseWheelScrollSensitivity),typeof e.fastScrollSensitivity<\"u\"&&(this._options.fastScrollSensitivity=e.fastScrollSensitivity),typeof e.scrollPredominantAxis<\"u\"&&(this._options.scrollPredominantAxis=e.scrollPredominantAxis),typeof e.horizontal<\"u\"&&(this._options.horizontal=e.horizontal),typeof e.vertical<\"u\"&&(this._options.vertical=e.vertical),typeof e.horizontalScrollbarSize<\"u\"&&(this._options.horizontalScrollbarSize=e.horizontalScrollbarSize),typeof e.verticalScrollbarSize<\"u\"&&(this._options.verticalScrollbarSize=e.verticalScrollbarSize),typeof e.scrollByPage<\"u\"&&(this._options.scrollByPage=e.scrollByPage),this._horizontalScrollbar.updateOptions(this._options),this._verticalScrollbar.updateOptions(this._options),this._options.lazyRender||this._render()}setRevealOnScroll(e){this._revealOnScroll=e}delegateScrollFromMouseWheelEvent(e){this._onMouseWheel(new xi(e))}_setListeningToMouseWheel(e){if(this._mouseWheelToDispose.length>0!==e&&(this._mouseWheelToDispose=Ne(this._mouseWheelToDispose),e)){let r=n=>{this._onMouseWheel(new xi(n))};this._mouseWheelToDispose.push(L(this._listenOnDomNode,Y.MOUSE_WHEEL,r,{passive:!1}))}}_onMouseWheel(e){if(e.browserEvent?.defaultPrevented)return;let i=hs.INSTANCE;zo&&i.acceptStandardWheelEvent(e);let r=!1;if(e.deltaY||e.deltaX){let o=e.deltaY*this._options.mouseWheelScrollSensitivity,l=e.deltaX*this._options.mouseWheelScrollSensitivity;this._options.scrollPredominantAxis&&(this._options.scrollYToX&&l+o===0?l=o=0:Math.abs(o)>=Math.abs(l)?l=0:o=0),this._options.flipAxes&&([o,l]=[l,o]);let a=!Te&&e.browserEvent&&e.browserEvent.shiftKey;(this._options.scrollYToX||a)&&!l&&(l=o,o=0),e.browserEvent&&e.browserEvent.altKey&&(l=l*this._options.fastScrollSensitivity,o=o*this._options.fastScrollSensitivity);let u=this._scrollable.getFutureScrollPosition(),h={};if(o){let c=Ko*o,d=u.scrollTop-(c<0?Math.floor(c):Math.ceil(c));this._verticalScrollbar.writeScrollPosition(h,d)}if(l){let c=Ko*l,d=u.scrollLeft-(c<0?Math.floor(c):Math.ceil(c));this._horizontalScrollbar.writeScrollPosition(h,d)}h=this._scrollable.validateScrollPosition(h),(u.scrollLeft!==h.scrollLeft||u.scrollTop!==h.scrollTop)&&(zo&&this._options.mouseWheelSmoothScroll&&i.isPhysicalMouseWheel()?this._scrollable.setScrollPositionSmooth(h):this._scrollable.setScrollPositionNow(h),r=!0)}let n=r;!n&&this._options.alwaysConsumeMouseWheel&&(n=!0),!n&&this._options.consumeMouseWheelIfScrollbarIsNeeded&&(this._verticalScrollbar.isNeeded()||this._horizontalScrollbar.isNeeded())&&(n=!0),n&&(e.preventDefault(),e.stopPropagation())}_onDidScroll(e){this._shouldRender=this._horizontalScrollbar.onDidScroll(e)||this._shouldRender,this._shouldRender=this._verticalScrollbar.onDidScroll(e)||this._shouldRender,this._options.useShadows&&(this._shouldRender=!0),this._revealOnScroll&&this._reveal(),this._options.lazyRender||this._render()}renderNow(){if(!this._options.lazyRender)throw new Error(\"Please use `lazyRender` together with `renderNow`!\");this._render()}_render(){if(this._shouldRender&&(this._shouldRender=!1,this._horizontalScrollbar.render(),this._verticalScrollbar.render(),this._options.useShadows)){let e=this._scrollable.getCurrentScrollPosition(),i=e.scrollTop>0,r=e.scrollLeft>0,n=r?\" left\":\"\",o=i?\" top\":\"\",l=r||i?\" top-left-corner\":\"\";this._leftShadowDomNode.setClassName(`shadow${n}`),this._topShadowDomNode.setClassName(`shadow${o}`),this._topLeftShadowDomNode.setClassName(`shadow${l}${o}${n}`)}}_onDragStart(){this._isDragging=!0,this._reveal()}_onDragEnd(){this._isDragging=!1,this._hide()}_onMouseLeave(e){this._mouseIsOver=!1,this._hide()}_onMouseOver(e){this._mouseIsOver=!0,this._reveal()}_reveal(){this._verticalScrollbar.beginReveal(),this._horizontalScrollbar.beginReveal(),this._scheduleHide()}_hide(){!this._mouseIsOver&&!this._isDragging&&(this._verticalScrollbar.beginHide(),this._horizontalScrollbar.beginHide())}_scheduleHide(){!this._mouseIsOver&&!this._isDragging&&this._hideTimeout.cancelAndSet(()=>this._hide(),Ma)}};var Kr=class extends ds{constructor(t,e,i){super(t,e,i)}setScrollPosition(t){t.reuseAnimation?this._scrollable.setScrollPositionSmooth(t,t.reuseAnimation):this._scrollable.setScrollPositionNow(t)}getScrollPosition(){return this._scrollable.getCurrentScrollPosition()}};function Pa(s){let t={lazyRender:typeof s.lazyRender<\"u\"?s.lazyRender:!1,className:typeof s.className<\"u\"?s.className:\"\",useShadows:typeof s.useShadows<\"u\"?s.useShadows:!0,handleMouseWheel:typeof s.handleMouseWheel<\"u\"?s.handleMouseWheel:!0,flipAxes:typeof s.flipAxes<\"u\"?s.flipAxes:!1,consumeMouseWheelIfScrollbarIsNeeded:typeof s.consumeMouseWheelIfScrollbarIsNeeded<\"u\"?s.consumeMouseWheelIfScrollbarIsNeeded:!1,alwaysConsumeMouseWheel:typeof s.alwaysConsumeMouseWheel<\"u\"?s.alwaysConsumeMouseWheel:!1,scrollYToX:typeof s.scrollYToX<\"u\"?s.scrollYToX:!1,mouseWheelScrollSensitivity:typeof s.mouseWheelScrollSensitivity<\"u\"?s.mouseWheelScrollSensitivity:1,fastScrollSensitivity:typeof s.fastScrollSensitivity<\"u\"?s.fastScrollSensitivity:5,scrollPredominantAxis:typeof s.scrollPredominantAxis<\"u\"?s.scrollPredominantAxis:!0,mouseWheelSmoothScroll:typeof s.mouseWheelSmoothScroll<\"u\"?s.mouseWheelSmoothScroll:!0,arrowSize:typeof s.arrowSize<\"u\"?s.arrowSize:11,listenOnDomNode:typeof s.listenOnDomNode<\"u\"?s.listenOnDomNode:null,horizontal:typeof s.horizontal<\"u\"?s.horizontal:1,horizontalScrollbarSize:typeof s.horizontalScrollbarSize<\"u\"?s.horizontalScrollbarSize:10,horizontalSliderSize:typeof s.horizontalSliderSize<\"u\"?s.horizontalSliderSize:0,horizontalHasArrows:typeof s.horizontalHasArrows<\"u\"?s.horizontalHasArrows:!1,vertical:typeof s.vertical<\"u\"?s.vertical:1,verticalScrollbarSize:typeof s.verticalScrollbarSize<\"u\"?s.verticalScrollbarSize:10,verticalHasArrows:typeof s.verticalHasArrows<\"u\"?s.verticalHasArrows:!1,verticalSliderSize:typeof s.verticalSliderSize<\"u\"?s.verticalSliderSize:0,scrollByPage:typeof s.scrollByPage<\"u\"?s.scrollByPage:!1};return t.horizontalSliderSize=typeof s.horizontalSliderSize<\"u\"?s.horizontalSliderSize:t.horizontalScrollbarSize,t.verticalSliderSize=typeof s.verticalSliderSize<\"u\"?s.verticalSliderSize:t.verticalScrollbarSize,Te&&(t.className+=\" mac\"),t}var zt=class extends D{constructor(e,i,r,n,o,l,a,u){super();this._bufferService=r;this._optionsService=a;this._renderService=u;this._onRequestScrollLines=this._register(new v);this.onRequestScrollLines=this._onRequestScrollLines.event;this._isSyncing=!1;this._isHandlingScroll=!1;this._suppressOnScrollHandler=!1;let h=this._register(new Ri({forceIntegerValues:!1,smoothScrollDuration:this._optionsService.rawOptions.smoothScrollDuration,scheduleAtNextAnimationFrame:c=>mt(n.window,c)}));this._register(this._optionsService.onSpecificOptionChange(\"smoothScrollDuration\",()=>{h.setSmoothScrollDuration(this._optionsService.rawOptions.smoothScrollDuration)})),this._scrollableElement=this._register(new Kr(i,{vertical:1,horizontal:2,useShadows:!1,mouseWheelSmoothScroll:!0,...this._getChangeOptions()},h)),this._register(this._optionsService.onMultipleOptionChange([\"scrollSensitivity\",\"fastScrollSensitivity\",\"overviewRuler\"],()=>this._scrollableElement.updateOptions(this._getChangeOptions()))),this._register(o.onProtocolChange(c=>{this._scrollableElement.updateOptions({handleMouseWheel:!(c&16)})})),this._scrollableElement.setScrollDimensions({height:0,scrollHeight:0}),this._register($.runAndSubscribe(l.onChangeColors,()=>{this._scrollableElement.getDomNode().style.backgroundColor=l.colors.background.css})),e.appendChild(this._scrollableElement.getDomNode()),this._register(C(()=>this._scrollableElement.getDomNode().remove())),this._styleElement=n.mainDocument.createElement(\"style\"),i.appendChild(this._styleElement),this._register(C(()=>this._styleElement.remove())),this._register($.runAndSubscribe(l.onChangeColors,()=>{this._styleElement.textContent=[\".xterm .xterm-scrollable-element > .scrollbar > .slider {\",` background: ${l.colors.scrollbarSliderBackground.css};`,\"}\",\".xterm .xterm-scrollable-element > .scrollbar > .slider:hover {\",` background: ${l.colors.scrollbarSliderHoverBackground.css};`,\"}\",\".xterm .xterm-scrollable-element > .scrollbar > .slider.active {\",` background: ${l.colors.scrollbarSliderActiveBackground.css};`,\"}\"].join(`\n`)})),this._register(this._bufferService.onResize(()=>this.queueSync())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._latestYDisp=void 0,this.queueSync()})),this._register(this._bufferService.onScroll(()=>this._sync())),this._register(this._scrollableElement.onScroll(c=>this._handleScroll(c)))}scrollLines(e){let i=this._scrollableElement.getScrollPosition();this._scrollableElement.setScrollPosition({reuseAnimation:!0,scrollTop:i.scrollTop+e*this._renderService.dimensions.css.cell.height})}scrollToLine(e,i){i&&(this._latestYDisp=e),this._scrollableElement.setScrollPosition({reuseAnimation:!i,scrollTop:e*this._renderService.dimensions.css.cell.height})}_getChangeOptions(){return{mouseWheelScrollSensitivity:this._optionsService.rawOptions.scrollSensitivity,fastScrollSensitivity:this._optionsService.rawOptions.fastScrollSensitivity,verticalScrollbarSize:this._optionsService.rawOptions.overviewRuler?.width||14}}queueSync(e){e!==void 0&&(this._latestYDisp=e),this._queuedAnimationFrame===void 0&&(this._queuedAnimationFrame=this._renderService.addRefreshCallback(()=>{this._queuedAnimationFrame=void 0,this._sync(this._latestYDisp)}))}_sync(e=this._bufferService.buffer.ydisp){!this._renderService||this._isSyncing||(this._isSyncing=!0,this._suppressOnScrollHandler=!0,this._scrollableElement.setScrollDimensions({height:this._renderService.dimensions.css.canvas.height,scrollHeight:this._renderService.dimensions.css.cell.height*this._bufferService.buffer.lines.length}),this._suppressOnScrollHandler=!1,e!==this._latestYDisp&&this._scrollableElement.setScrollPosition({scrollTop:e*this._renderService.dimensions.css.cell.height}),this._isSyncing=!1)}_handleScroll(e){if(!this._renderService||this._isHandlingScroll||this._suppressOnScrollHandler)return;this._isHandlingScroll=!0;let i=Math.round(e.scrollTop/this._renderService.dimensions.css.cell.height),r=i-this._bufferService.buffer.ydisp;r!==0&&(this._latestYDisp=i,this._onRequestScrollLines.fire(r)),this._isHandlingScroll=!1}};zt=M([S(2,F),S(3,ae),S(4,rr),S(5,Re),S(6,H),S(7,ce)],zt);var Gt=class extends D{constructor(e,i,r,n,o){super();this._screenElement=e;this._bufferService=i;this._coreBrowserService=r;this._decorationService=n;this._renderService=o;this._decorationElements=new Map;this._altBufferIsActive=!1;this._dimensionsChanged=!1;this._container=document.createElement(\"div\"),this._container.classList.add(\"xterm-decoration-container\"),this._screenElement.appendChild(this._container),this._register(this._renderService.onRenderedViewportChange(()=>this._doRefreshDecorations())),this._register(this._renderService.onDimensionsChange(()=>{this._dimensionsChanged=!0,this._queueRefresh()})),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._altBufferIsActive=this._bufferService.buffer===this._bufferService.buffers.alt})),this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh())),this._register(this._decorationService.onDecorationRemoved(l=>this._removeDecoration(l))),this._register(C(()=>{this._container.remove(),this._decorationElements.clear()}))}_queueRefresh(){this._animationFrame===void 0&&(this._animationFrame=this._renderService.addRefreshCallback(()=>{this._doRefreshDecorations(),this._animationFrame=void 0}))}_doRefreshDecorations(){for(let e of this._decorationService.decorations)this._renderDecoration(e);this._dimensionsChanged=!1}_renderDecoration(e){this._refreshStyle(e),this._dimensionsChanged&&this._refreshXPosition(e)}_createElement(e){let i=this._coreBrowserService.mainDocument.createElement(\"div\");i.classList.add(\"xterm-decoration\"),i.classList.toggle(\"xterm-decoration-top-layer\",e?.options?.layer===\"top\"),i.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,i.style.height=`${(e.options.height||1)*this._renderService.dimensions.css.cell.height}px`,i.style.top=`${(e.marker.line-this._bufferService.buffers.active.ydisp)*this._renderService.dimensions.css.cell.height}px`,i.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`;let r=e.options.x??0;return r&&r>this._bufferService.cols&&(i.style.display=\"none\"),this._refreshXPosition(e,i),i}_refreshStyle(e){let i=e.marker.line-this._bufferService.buffers.active.ydisp;if(i<0||i>=this._bufferService.rows)e.element&&(e.element.style.display=\"none\",e.onRenderEmitter.fire(e.element));else{let r=this._decorationElements.get(e);r||(r=this._createElement(e),e.element=r,this._decorationElements.set(e,r),this._container.appendChild(r),e.onDispose(()=>{this._decorationElements.delete(e),r.remove()})),r.style.display=this._altBufferIsActive?\"none\":\"block\",this._altBufferIsActive||(r.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,r.style.height=`${(e.options.height||1)*this._renderService.dimensions.css.cell.height}px`,r.style.top=`${i*this._renderService.dimensions.css.cell.height}px`,r.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`),e.onRenderEmitter.fire(r)}}_refreshXPosition(e,i=e.element){if(!i)return;let r=e.options.x??0;(e.options.anchor||\"left\")===\"right\"?i.style.right=r?`${r*this._renderService.dimensions.css.cell.width}px`:\"\":i.style.left=r?`${r*this._renderService.dimensions.css.cell.width}px`:\"\"}_removeDecoration(e){this._decorationElements.get(e)?.remove(),this._decorationElements.delete(e),e.dispose()}};Gt=M([S(1,F),S(2,ae),S(3,Be),S(4,ce)],Gt);var Gr=class{constructor(){this._zones=[];this._zonePool=[];this._zonePoolIndex=0;this._linePadding={full:0,left:0,center:0,right:0}}get zones(){return this._zonePool.length=Math.min(this._zonePool.length,this._zones.length),this._zones}clear(){this._zones.length=0,this._zonePoolIndex=0}addDecoration(t){if(t.options.overviewRulerOptions){for(let e of this._zones)if(e.color===t.options.overviewRulerOptions.color&&e.position===t.options.overviewRulerOptions.position){if(this._lineIntersectsZone(e,t.marker.line))return;if(this._lineAdjacentToZone(e,t.marker.line,t.options.overviewRulerOptions.position)){this._addLineToZone(e,t.marker.line);return}}if(this._zonePoolIndex<this._zonePool.length){this._zonePool[this._zonePoolIndex].color=t.options.overviewRulerOptions.color,this._zonePool[this._zonePoolIndex].position=t.options.overviewRulerOptions.position,this._zonePool[this._zonePoolIndex].startBufferLine=t.marker.line,this._zonePool[this._zonePoolIndex].endBufferLine=t.marker.line,this._zones.push(this._zonePool[this._zonePoolIndex++]);return}this._zones.push({color:t.options.overviewRulerOptions.color,position:t.options.overviewRulerOptions.position,startBufferLine:t.marker.line,endBufferLine:t.marker.line}),this._zonePool.push(this._zones[this._zones.length-1]),this._zonePoolIndex++}}setPadding(t){this._linePadding=t}_lineIntersectsZone(t,e){return e>=t.startBufferLine&&e<=t.endBufferLine}_lineAdjacentToZone(t,e,i){return e>=t.startBufferLine-this._linePadding[i||\"full\"]&&e<=t.endBufferLine+this._linePadding[i||\"full\"]}_addLineToZone(t,e){t.startBufferLine=Math.min(t.startBufferLine,e),t.endBufferLine=Math.max(t.endBufferLine,e)}};var We={full:0,left:0,center:0,right:0},at={full:0,left:0,center:0,right:0},Li={full:0,left:0,center:0,right:0},bt=class extends D{constructor(e,i,r,n,o,l,a,u){super();this._viewportElement=e;this._screenElement=i;this._bufferService=r;this._decorationService=n;this._renderService=o;this._optionsService=l;this._themeService=a;this._coreBrowserService=u;this._colorZoneStore=new Gr;this._shouldUpdateDimensions=!0;this._shouldUpdateAnchor=!0;this._lastKnownBufferLength=0;this._canvas=this._coreBrowserService.mainDocument.createElement(\"canvas\"),this._canvas.classList.add(\"xterm-decoration-overview-ruler\"),this._refreshCanvasDimensions(),this._viewportElement.parentElement?.insertBefore(this._canvas,this._viewportElement),this._register(C(()=>this._canvas?.remove()));let h=this._canvas.getContext(\"2d\");if(h)this._ctx=h;else throw new Error(\"Ctx cannot be null\");this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh(void 0,!0))),this._register(this._decorationService.onDecorationRemoved(()=>this._queueRefresh(void 0,!0))),this._register(this._renderService.onRenderedViewportChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._canvas.style.display=this._bufferService.buffer===this._bufferService.buffers.alt?\"none\":\"block\"})),this._register(this._bufferService.onScroll(()=>{this._lastKnownBufferLength!==this._bufferService.buffers.normal.lines.length&&(this._refreshDrawHeightConstants(),this._refreshColorZonePadding())})),this._register(this._renderService.onRender(()=>{(!this._containerHeight||this._containerHeight!==this._screenElement.clientHeight)&&(this._queueRefresh(!0),this._containerHeight=this._screenElement.clientHeight)})),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh(!0))),this._register(this._optionsService.onSpecificOptionChange(\"overviewRuler\",()=>this._queueRefresh(!0))),this._register(this._themeService.onChangeColors(()=>this._queueRefresh())),this._queueRefresh(!0)}get _width(){return this._optionsService.options.overviewRuler?.width||0}_refreshDrawConstants(){let e=Math.floor((this._canvas.width-1)/3),i=Math.ceil((this._canvas.width-1)/3);at.full=this._canvas.width,at.left=e,at.center=i,at.right=e,this._refreshDrawHeightConstants(),Li.full=1,Li.left=1,Li.center=1+at.left,Li.right=1+at.left+at.center}_refreshDrawHeightConstants(){We.full=Math.round(2*this._coreBrowserService.dpr);let e=this._canvas.height/this._bufferService.buffer.lines.length,i=Math.round(Math.max(Math.min(e,12),6)*this._coreBrowserService.dpr);We.left=i,We.center=i,We.right=i}_refreshColorZonePadding(){this._colorZoneStore.setPadding({full:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*We.full),left:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*We.left),center:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*We.center),right:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*We.right)}),this._lastKnownBufferLength=this._bufferService.buffers.normal.lines.length}_refreshCanvasDimensions(){this._canvas.style.width=`${this._width}px`,this._canvas.width=Math.round(this._width*this._coreBrowserService.dpr),this._canvas.style.height=`${this._screenElement.clientHeight}px`,this._canvas.height=Math.round(this._screenElement.clientHeight*this._coreBrowserService.dpr),this._refreshDrawConstants(),this._refreshColorZonePadding()}_refreshDecorations(){this._shouldUpdateDimensions&&this._refreshCanvasDimensions(),this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this._colorZoneStore.clear();for(let i of this._decorationService.decorations)this._colorZoneStore.addDecoration(i);this._ctx.lineWidth=1,this._renderRulerOutline();let e=this._colorZoneStore.zones;for(let i of e)i.position!==\"full\"&&this._renderColorZone(i);for(let i of e)i.position===\"full\"&&this._renderColorZone(i);this._shouldUpdateDimensions=!1,this._shouldUpdateAnchor=!1}_renderRulerOutline(){this._ctx.fillStyle=this._themeService.colors.overviewRulerBorder.css,this._ctx.fillRect(0,0,1,this._canvas.height),this._optionsService.rawOptions.overviewRuler.showTopBorder&&this._ctx.fillRect(1,0,this._canvas.width-1,1),this._optionsService.rawOptions.overviewRuler.showBottomBorder&&this._ctx.fillRect(1,this._canvas.height-1,this._canvas.width-1,this._canvas.height)}_renderColorZone(e){this._ctx.fillStyle=e.color,this._ctx.fillRect(Li[e.position||\"full\"],Math.round((this._canvas.height-1)*(e.startBufferLine/this._bufferService.buffers.active.lines.length)-We[e.position||\"full\"]/2),at[e.position||\"full\"],Math.round((this._canvas.height-1)*((e.endBufferLine-e.startBufferLine)/this._bufferService.buffers.active.lines.length)+We[e.position||\"full\"]))}_queueRefresh(e,i){this._shouldUpdateDimensions=e||this._shouldUpdateDimensions,this._shouldUpdateAnchor=i||this._shouldUpdateAnchor,this._animationFrame===void 0&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._refreshDecorations(),this._animationFrame=void 0}))}};bt=M([S(2,F),S(3,Be),S(4,ce),S(5,H),S(6,Re),S(7,ae)],bt);var b;(E=>(E.NUL=\"\\0\",E.SOH=\"\u0001\",E.STX=\"\u0002\",E.ETX=\"\u0003\",E.EOT=\"\u0004\",E.ENQ=\"\u0005\",E.ACK=\"\u0006\",E.BEL=\"\\x07\",E.BS=\"\\b\",E.HT=\"\t\",E.LF=`\n`,E.VT=\"\\v\",E.FF=\"\\f\",E.CR=\"\\r\",E.SO=\"\u000e\",E.SI=\"\u000f\",E.DLE=\"\u0010\",E.DC1=\"\u0011\",E.DC2=\"\u0012\",E.DC3=\"\u0013\",E.DC4=\"\u0014\",E.NAK=\"\u0015\",E.SYN=\"\u0016\",E.ETB=\"\u0017\",E.CAN=\"\u0018\",E.EM=\"\u0019\",E.SUB=\"\u001a\",E.ESC=\"\\x1B\",E.FS=\"\u001c\",E.GS=\"\u001d\",E.RS=\"\u001e\",E.US=\"\u001f\",E.SP=\" \",E.DEL=\"\\x7F\"))(b||={});var Ai;(g=>(g.PAD=\"\\x80\",g.HOP=\"\\x81\",g.BPH=\"\\x82\",g.NBH=\"\\x83\",g.IND=\"\\x84\",g.NEL=\"\\x85\",g.SSA=\"\\x86\",g.ESA=\"\\x87\",g.HTS=\"\\x88\",g.HTJ=\"\\x89\",g.VTS=\"\\x8A\",g.PLD=\"\\x8B\",g.PLU=\"\\x8C\",g.RI=\"\\x8D\",g.SS2=\"\\x8E\",g.SS3=\"\\x8F\",g.DCS=\"\\x90\",g.PU1=\"\\x91\",g.PU2=\"\\x92\",g.STS=\"\\x93\",g.CCH=\"\\x94\",g.MW=\"\\x95\",g.SPA=\"\\x96\",g.EPA=\"\\x97\",g.SOS=\"\\x98\",g.SGCI=\"\\x99\",g.SCI=\"\\x9A\",g.CSI=\"\\x9B\",g.ST=\"\\x9C\",g.OSC=\"\\x9D\",g.PM=\"\\x9E\",g.APC=\"\\x9F\"))(Ai||={});var fs;(t=>t.ST=`${b.ESC}\\\\`)(fs||={});var $t=class{constructor(t,e,i,r,n,o){this._textarea=t;this._compositionView=e;this._bufferService=i;this._optionsService=r;this._coreService=n;this._renderService=o;this._isComposing=!1,this._isSendingComposition=!1,this._compositionPosition={start:0,end:0},this._dataAlreadySent=\"\"}get isComposing(){return this._isComposing}compositionstart(){this._isComposing=!0,this._compositionPosition.start=this._textarea.value.length,this._compositionView.textContent=\"\",this._dataAlreadySent=\"\",this._compositionView.classList.add(\"active\")}compositionupdate(t){this._compositionView.textContent=t.data,this.updateCompositionElements(),setTimeout(()=>{this._compositionPosition.end=this._textarea.value.length},0)}compositionend(){this._finalizeComposition(!0)}keydown(t){if(this._isComposing||this._isSendingComposition){if(t.keyCode===20||t.keyCode===229||t.keyCode===16||t.keyCode===17||t.keyCode===18)return!1;this._finalizeComposition(!1)}return t.keyCode===229?(this._handleAnyTextareaChanges(),!1):!0}_finalizeComposition(t){if(this._compositionView.classList.remove(\"active\"),this._isComposing=!1,t){let e={start:this._compositionPosition.start,end:this._compositionPosition.end};this._isSendingComposition=!0,setTimeout(()=>{if(this._isSendingComposition){this._isSendingComposition=!1;let i;e.start+=this._dataAlreadySent.length,this._isComposing?i=this._textarea.value.substring(e.start,this._compositionPosition.start):i=this._textarea.value.substring(e.start),i.length>0&&this._coreService.triggerDataEvent(i,!0)}},0)}else{this._isSendingComposition=!1;let e=this._textarea.value.substring(this._compositionPosition.start,this._compositionPosition.end);this._coreService.triggerDataEvent(e,!0)}}_handleAnyTextareaChanges(){let t=this._textarea.value;setTimeout(()=>{if(!this._isComposing){let e=this._textarea.value,i=e.replace(t,\"\");this._dataAlreadySent=i,e.length>t.length?this._coreService.triggerDataEvent(i,!0):e.length<t.length?this._coreService.triggerDataEvent(`${b.DEL}`,!0):e.length===t.length&&e!==t&&this._coreService.triggerDataEvent(e,!0)}},0)}updateCompositionElements(t){if(this._isComposing){if(this._bufferService.buffer.isCursorInViewport){let e=Math.min(this._bufferService.buffer.x,this._bufferService.cols-1),i=this._renderService.dimensions.css.cell.height,r=this._bufferService.buffer.y*this._renderService.dimensions.css.cell.height,n=e*this._renderService.dimensions.css.cell.width;this._compositionView.style.left=n+\"px\",this._compositionView.style.top=r+\"px\",this._compositionView.style.height=i+\"px\",this._compositionView.style.lineHeight=i+\"px\",this._compositionView.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._compositionView.style.fontSize=this._optionsService.rawOptions.fontSize+\"px\";let o=this._compositionView.getBoundingClientRect();this._textarea.style.left=n+\"px\",this._textarea.style.top=r+\"px\",this._textarea.style.width=Math.max(o.width,1)+\"px\",this._textarea.style.height=Math.max(o.height,1)+\"px\",this._textarea.style.lineHeight=o.height+\"px\"}t||setTimeout(()=>this.updateCompositionElements(!0),0)}}};$t=M([S(2,F),S(3,H),S(4,ge),S(5,ce)],$t);var ue=0,he=0,de=0,J=0,ps={css:\"#00000000\",rgba:0},j;(i=>{function s(r,n,o,l){return l!==void 0?`#${vt(r)}${vt(n)}${vt(o)}${vt(l)}`:`#${vt(r)}${vt(n)}${vt(o)}`}i.toCss=s;function t(r,n,o,l=255){return(r<<24|n<<16|o<<8|l)>>>0}i.toRgba=t;function e(r,n,o,l){return{css:i.toCss(r,n,o,l),rgba:i.toRgba(r,n,o,l)}}i.toColor=e})(j||={});var U;(l=>{function s(a,u){if(J=(u.rgba&255)/255,J===1)return{css:u.css,rgba:u.rgba};let h=u.rgba>>24&255,c=u.rgba>>16&255,d=u.rgba>>8&255,_=a.rgba>>24&255,p=a.rgba>>16&255,m=a.rgba>>8&255;ue=_+Math.round((h-_)*J),he=p+Math.round((c-p)*J),de=m+Math.round((d-m)*J);let f=j.toCss(ue,he,de),A=j.toRgba(ue,he,de);return{css:f,rgba:A}}l.blend=s;function t(a){return(a.rgba&255)===255}l.isOpaque=t;function e(a,u,h){let c=$r.ensureContrastRatio(a.rgba,u.rgba,h);if(c)return j.toColor(c>>24&255,c>>16&255,c>>8&255)}l.ensureContrastRatio=e;function i(a){let u=(a.rgba|255)>>>0;return[ue,he,de]=$r.toChannels(u),{css:j.toCss(ue,he,de),rgba:u}}l.opaque=i;function r(a,u){return J=Math.round(u*255),[ue,he,de]=$r.toChannels(a.rgba),{css:j.toCss(ue,he,de,J),rgba:j.toRgba(ue,he,de,J)}}l.opacity=r;function n(a,u){return J=a.rgba&255,r(a,J*u/255)}l.multiplyOpacity=n;function o(a){return[a.rgba>>24&255,a.rgba>>16&255,a.rgba>>8&255]}l.toColorRGB=o})(U||={});var z;(i=>{let s,t;try{let r=document.createElement(\"canvas\");r.width=1,r.height=1;let n=r.getContext(\"2d\",{willReadFrequently:!0});n&&(s=n,s.globalCompositeOperation=\"copy\",t=s.createLinearGradient(0,0,1,1))}catch{}function e(r){if(r.match(/#[\\da-f]{3,8}/i))switch(r.length){case 4:return ue=parseInt(r.slice(1,2).repeat(2),16),he=parseInt(r.slice(2,3).repeat(2),16),de=parseInt(r.slice(3,4).repeat(2),16),j.toColor(ue,he,de);case 5:return ue=parseInt(r.slice(1,2).repeat(2),16),he=parseInt(r.slice(2,3).repeat(2),16),de=parseInt(r.slice(3,4).repeat(2),16),J=parseInt(r.slice(4,5).repeat(2),16),j.toColor(ue,he,de,J);case 7:return{css:r,rgba:(parseInt(r.slice(1),16)<<8|255)>>>0};case 9:return{css:r,rgba:parseInt(r.slice(1),16)>>>0}}let n=r.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);if(n)return ue=parseInt(n[1]),he=parseInt(n[2]),de=parseInt(n[3]),J=Math.round((n[5]===void 0?1:parseFloat(n[5]))*255),j.toColor(ue,he,de,J);if(!s||!t)throw new Error(\"css.toColor: Unsupported css format\");if(s.fillStyle=t,s.fillStyle=r,typeof s.fillStyle!=\"string\")throw new Error(\"css.toColor: Unsupported css format\");if(s.fillRect(0,0,1,1),[ue,he,de,J]=s.getImageData(0,0,1,1).data,J!==255)throw new Error(\"css.toColor: Unsupported css format\");return{rgba:j.toRgba(ue,he,de,J),css:r}}i.toColor=e})(z||={});var ve;(e=>{function s(i){return t(i>>16&255,i>>8&255,i&255)}e.relativeLuminance=s;function t(i,r,n){let o=i/255,l=r/255,a=n/255,u=o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4),h=l<=.03928?l/12.92:Math.pow((l+.055)/1.055,2.4),c=a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4);return u*.2126+h*.7152+c*.0722}e.relativeLuminance2=t})(ve||={});var $r;(n=>{function s(o,l){if(J=(l&255)/255,J===1)return l;let a=l>>24&255,u=l>>16&255,h=l>>8&255,c=o>>24&255,d=o>>16&255,_=o>>8&255;return ue=c+Math.round((a-c)*J),he=d+Math.round((u-d)*J),de=_+Math.round((h-_)*J),j.toRgba(ue,he,de)}n.blend=s;function t(o,l,a){let u=ve.relativeLuminance(o>>8),h=ve.relativeLuminance(l>>8);if(Xe(u,h)<a){if(h<u){let p=e(o,l,a),m=Xe(u,ve.relativeLuminance(p>>8));if(m<a){let f=i(o,l,a),A=Xe(u,ve.relativeLuminance(f>>8));return m>A?p:f}return p}let d=i(o,l,a),_=Xe(u,ve.relativeLuminance(d>>8));if(_<a){let p=e(o,l,a),m=Xe(u,ve.relativeLuminance(p>>8));return _>m?d:p}return d}}n.ensureContrastRatio=t;function e(o,l,a){let u=o>>24&255,h=o>>16&255,c=o>>8&255,d=l>>24&255,_=l>>16&255,p=l>>8&255,m=Xe(ve.relativeLuminance2(d,_,p),ve.relativeLuminance2(u,h,c));for(;m<a&&(d>0||_>0||p>0);)d-=Math.max(0,Math.ceil(d*.1)),_-=Math.max(0,Math.ceil(_*.1)),p-=Math.max(0,Math.ceil(p*.1)),m=Xe(ve.relativeLuminance2(d,_,p),ve.relativeLuminance2(u,h,c));return(d<<24|_<<16|p<<8|255)>>>0}n.reduceLuminance=e;function i(o,l,a){let u=o>>24&255,h=o>>16&255,c=o>>8&255,d=l>>24&255,_=l>>16&255,p=l>>8&255,m=Xe(ve.relativeLuminance2(d,_,p),ve.relativeLuminance2(u,h,c));for(;m<a&&(d<255||_<255||p<255);)d=Math.min(255,d+Math.ceil((255-d)*.1)),_=Math.min(255,_+Math.ceil((255-_)*.1)),p=Math.min(255,p+Math.ceil((255-p)*.1)),m=Xe(ve.relativeLuminance2(d,_,p),ve.relativeLuminance2(u,h,c));return(d<<24|_<<16|p<<8|255)>>>0}n.increaseLuminance=i;function r(o){return[o>>24&255,o>>16&255,o>>8&255,o&255]}n.toChannels=r})($r||={});function vt(s){let t=s.toString(16);return t.length<2?\"0\"+t:t}function Xe(s,t){return s<t?(t+.05)/(s+.05):(s+.05)/(t+.05)}var Vr=class extends De{constructor(e,i,r){super();this.content=0;this.combinedData=\"\";this.fg=e.fg,this.bg=e.bg,this.combinedData=i,this._width=r}isCombined(){return 2097152}getWidth(){return this._width}getChars(){return this.combinedData}getCode(){return 2097151}setFromCharData(e){throw new Error(\"not implemented\")}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}},ct=class{constructor(t){this._bufferService=t;this._characterJoiners=[];this._nextCharacterJoinerId=0;this._workCell=new q}register(t){let e={id:this._nextCharacterJoinerId++,handler:t};return this._characterJoiners.push(e),e.id}deregister(t){for(let e=0;e<this._characterJoiners.length;e++)if(this._characterJoiners[e].id===t)return this._characterJoiners.splice(e,1),!0;return!1}getJoinedCharacters(t){if(this._characterJoiners.length===0)return[];let e=this._bufferService.buffer.lines.get(t);if(!e||e.length===0)return[];let i=[],r=e.translateToString(!0),n=0,o=0,l=0,a=e.getFg(0),u=e.getBg(0);for(let h=0;h<e.getTrimmedLength();h++)if(e.loadCell(h,this._workCell),this._workCell.getWidth()!==0){if(this._workCell.fg!==a||this._workCell.bg!==u){if(h-n>1){let c=this._getJoinedRanges(r,l,o,e,n);for(let d=0;d<c.length;d++)i.push(c[d])}n=h,l=o,a=this._workCell.fg,u=this._workCell.bg}o+=this._workCell.getChars().length||we.length}if(this._bufferService.cols-n>1){let h=this._getJoinedRanges(r,l,o,e,n);for(let c=0;c<h.length;c++)i.push(h[c])}return i}_getJoinedRanges(t,e,i,r,n){let o=t.substring(e,i),l=[];try{l=this._characterJoiners[0].handler(o)}catch(a){console.error(a)}for(let a=1;a<this._characterJoiners.length;a++)try{let u=this._characterJoiners[a].handler(o);for(let h=0;h<u.length;h++)ct._mergeRanges(l,u[h])}catch(u){console.error(u)}return this._stringRangesToCellRanges(l,r,n),l}_stringRangesToCellRanges(t,e,i){let r=0,n=!1,o=0,l=t[r];if(l){for(let a=i;a<this._bufferService.cols;a++){let u=e.getWidth(a),h=e.getString(a).length||we.length;if(u!==0){if(!n&&l[0]<=o&&(l[0]=a,n=!0),l[1]<=o){if(l[1]=a,l=t[++r],!l)break;l[0]<=o?(l[0]=a,n=!0):n=!1}o+=h}}l&&(l[1]=this._bufferService.cols)}}static _mergeRanges(t,e){let i=!1;for(let r=0;r<t.length;r++){let n=t[r];if(i){if(e[1]<=n[0])return t[r-1][1]=e[1],t;if(e[1]<=n[1])return t[r-1][1]=Math.max(e[1],n[1]),t.splice(r,1),t;t.splice(r,1),r--}else{if(e[1]<=n[0])return t.splice(r,0,e),t;if(e[1]<=n[1])return n[0]=Math.min(e[0],n[0]),t;e[0]<n[1]&&(n[0]=Math.min(e[0],n[0]),i=!0);continue}}return i?t[t.length-1][1]=e[1]:t.push(e),t}};ct=M([S(0,F)],ct);function Oa(s){return 57508<=s&&s<=57558}function Ba(s){return 9472<=s&&s<=9631}function $o(s){return Oa(s)||Ba(s)}function Vo(){return{css:{canvas:qr(),cell:qr()},device:{canvas:qr(),cell:qr(),char:{width:0,height:0,left:0,top:0}}}}function qr(){return{width:0,height:0}}var Vt=class{constructor(t,e,i,r,n,o,l){this._document=t;this._characterJoinerService=e;this._optionsService=i;this._coreBrowserService=r;this._coreService=n;this._decorationService=o;this._themeService=l;this._workCell=new q;this._columnSelectMode=!1;this.defaultSpacing=0}handleSelectionChanged(t,e,i){this._selectionStart=t,this._selectionEnd=e,this._columnSelectMode=i}createRow(t,e,i,r,n,o,l,a,u,h,c){let d=[],_=this._characterJoinerService.getJoinedCharacters(e),p=this._themeService.colors,m=t.getNoBgTrimmedLength();i&&m<o+1&&(m=o+1);let f,A=0,R=\"\",O=0,I=0,k=0,P=0,oe=!1,Me=0,Pe=!1,Ke=0,di=0,V=[],Qe=h!==-1&&c!==-1;for(let y=0;y<m;y++){t.loadCell(y,this._workCell);let T=this._workCell.getWidth();if(T===0)continue;let g=!1,w=y>=di,E=y,x=this._workCell;if(_.length>0&&y===_[0][0]&&w){let W=_.shift(),An=this._isCellInSelection(W[0],e);for(O=W[0]+1;O<W[1];O++)w&&=An===this._isCellInSelection(O,e);w&&=!i||o<W[0]||o>=W[1],w?(g=!0,x=new Vr(this._workCell,t.translateToString(!0,W[0],W[1]),W[1]-W[0]),E=W[1]-1,T=x.getWidth()):di=W[1]}let N=this._isCellInSelection(y,e),Z=i&&y===o,te=Qe&&y>=h&&y<=c,Oe=!1;this._decorationService.forEachDecorationAtCell(y,e,void 0,W=>{Oe=!0});let ze=x.getChars()||we;if(ze===\" \"&&(x.isUnderline()||x.isOverline())&&(ze=\"\\xA0\"),Ke=T*a-u.get(ze,x.isBold(),x.isItalic()),!f)f=this._document.createElement(\"span\");else if(A&&(N&&Pe||!N&&!Pe&&x.bg===I)&&(N&&Pe&&p.selectionForeground||x.fg===k)&&x.extended.ext===P&&te===oe&&Ke===Me&&!Z&&!g&&!Oe&&w){x.isInvisible()?R+=we:R+=ze,A++;continue}else A&&(f.textContent=R),f=this._document.createElement(\"span\"),A=0,R=\"\";if(I=x.bg,k=x.fg,P=x.extended.ext,oe=te,Me=Ke,Pe=N,g&&o>=y&&o<=E&&(o=y),!this._coreService.isCursorHidden&&Z&&this._coreService.isCursorInitialized){if(V.push(\"xterm-cursor\"),this._coreBrowserService.isFocused)l&&V.push(\"xterm-cursor-blink\"),V.push(r===\"bar\"?\"xterm-cursor-bar\":r===\"underline\"?\"xterm-cursor-underline\":\"xterm-cursor-block\");else if(n)switch(n){case\"outline\":V.push(\"xterm-cursor-outline\");break;case\"block\":V.push(\"xterm-cursor-block\");break;case\"bar\":V.push(\"xterm-cursor-bar\");break;case\"underline\":V.push(\"xterm-cursor-underline\");break;default:break}}if(x.isBold()&&V.push(\"xterm-bold\"),x.isItalic()&&V.push(\"xterm-italic\"),x.isDim()&&V.push(\"xterm-dim\"),x.isInvisible()?R=we:R=x.getChars()||we,x.isUnderline()&&(V.push(`xterm-underline-${x.extended.underlineStyle}`),R===\" \"&&(R=\"\\xA0\"),!x.isUnderlineColorDefault()))if(x.isUnderlineColorRGB())f.style.textDecorationColor=`rgb(${De.toColorRGB(x.getUnderlineColor()).join(\",\")})`;else{let W=x.getUnderlineColor();this._optionsService.rawOptions.drawBoldTextInBrightColors&&x.isBold()&&W<8&&(W+=8),f.style.textDecorationColor=p.ansi[W].css}x.isOverline()&&(V.push(\"xterm-overline\"),R===\" \"&&(R=\"\\xA0\")),x.isStrikethrough()&&V.push(\"xterm-strikethrough\"),te&&(f.style.textDecoration=\"underline\");let le=x.getFgColor(),et=x.getFgColorMode(),me=x.getBgColor(),ht=x.getBgColorMode(),fi=!!x.isInverse();if(fi){let W=le;le=me,me=W;let An=et;et=ht,ht=An}let tt,Qi,pi=!1;this._decorationService.forEachDecorationAtCell(y,e,void 0,W=>{W.options.layer!==\"top\"&&pi||(W.backgroundColorRGB&&(ht=50331648,me=W.backgroundColorRGB.rgba>>8&16777215,tt=W.backgroundColorRGB),W.foregroundColorRGB&&(et=50331648,le=W.foregroundColorRGB.rgba>>8&16777215,Qi=W.foregroundColorRGB),pi=W.options.layer===\"top\")}),!pi&&N&&(tt=this._coreBrowserService.isFocused?p.selectionBackgroundOpaque:p.selectionInactiveBackgroundOpaque,me=tt.rgba>>8&16777215,ht=50331648,pi=!0,p.selectionForeground&&(et=50331648,le=p.selectionForeground.rgba>>8&16777215,Qi=p.selectionForeground)),pi&&V.push(\"xterm-decoration-top\");let it;switch(ht){case 16777216:case 33554432:it=p.ansi[me],V.push(`xterm-bg-${me}`);break;case 50331648:it=j.toColor(me>>16,me>>8&255,me&255),this._addStyle(f,`background-color:#${qo((me>>>0).toString(16),\"0\",6)}`);break;case 0:default:fi?(it=p.foreground,V.push(`xterm-bg-${257}`)):it=p.background}switch(tt||x.isDim()&&(tt=U.multiplyOpacity(it,.5)),et){case 16777216:case 33554432:x.isBold()&&le<8&&this._optionsService.rawOptions.drawBoldTextInBrightColors&&(le+=8),this._applyMinimumContrast(f,it,p.ansi[le],x,tt,void 0)||V.push(`xterm-fg-${le}`);break;case 50331648:let W=j.toColor(le>>16&255,le>>8&255,le&255);this._applyMinimumContrast(f,it,W,x,tt,Qi)||this._addStyle(f,`color:#${qo(le.toString(16),\"0\",6)}`);break;case 0:default:this._applyMinimumContrast(f,it,p.foreground,x,tt,Qi)||fi&&V.push(`xterm-fg-${257}`)}V.length&&(f.className=V.join(\" \"),V.length=0),!Z&&!g&&!Oe&&w?A++:f.textContent=R,Ke!==this.defaultSpacing&&(f.style.letterSpacing=`${Ke}px`),d.push(f),y=E}return f&&A&&(f.textContent=R),d}_applyMinimumContrast(t,e,i,r,n,o){if(this._optionsService.rawOptions.minimumContrastRatio===1||$o(r.getCode()))return!1;let l=this._getContrastCache(r),a;if(!n&&!o&&(a=l.getColor(e.rgba,i.rgba)),a===void 0){let u=this._optionsService.rawOptions.minimumContrastRatio/(r.isDim()?2:1);a=U.ensureContrastRatio(n||e,o||i,u),l.setColor((n||e).rgba,(o||i).rgba,a??null)}return a?(this._addStyle(t,`color:${a.css}`),!0):!1}_getContrastCache(t){return t.isDim()?this._themeService.colors.halfContrastCache:this._themeService.colors.contrastCache}_addStyle(t,e){t.setAttribute(\"style\",`${t.getAttribute(\"style\")||\"\"}${e};`)}_isCellInSelection(t,e){let i=this._selectionStart,r=this._selectionEnd;return!i||!r?!1:this._columnSelectMode?i[0]<=r[0]?t>=i[0]&&e>=i[1]&&t<r[0]&&e<=r[1]:t<i[0]&&e>=i[1]&&t>=r[0]&&e<=r[1]:e>i[1]&&e<r[1]||i[1]===r[1]&&e===i[1]&&t>=i[0]&&t<r[0]||i[1]<r[1]&&e===r[1]&&t<r[0]||i[1]<r[1]&&e===i[1]&&t>=i[0]}};Vt=M([S(1,or),S(2,H),S(3,ae),S(4,ge),S(5,Be),S(6,Re)],Vt);function qo(s,t,e){for(;s.length<e;)s=t+s;return s}var Yr=class{constructor(t,e){this._flat=new Float32Array(256);this._font=\"\";this._fontSize=0;this._weight=\"normal\";this._weightBold=\"bold\";this._measureElements=[];this._container=t.createElement(\"div\"),this._container.classList.add(\"xterm-width-cache-measure-container\"),this._container.setAttribute(\"aria-hidden\",\"true\"),this._container.style.whiteSpace=\"pre\",this._container.style.fontKerning=\"none\";let i=t.createElement(\"span\");i.classList.add(\"xterm-char-measure-element\");let r=t.createElement(\"span\");r.classList.add(\"xterm-char-measure-element\"),r.style.fontWeight=\"bold\";let n=t.createElement(\"span\");n.classList.add(\"xterm-char-measure-element\"),n.style.fontStyle=\"italic\";let o=t.createElement(\"span\");o.classList.add(\"xterm-char-measure-element\"),o.style.fontWeight=\"bold\",o.style.fontStyle=\"italic\",this._measureElements=[i,r,n,o],this._container.appendChild(i),this._container.appendChild(r),this._container.appendChild(n),this._container.appendChild(o),e.appendChild(this._container),this.clear()}dispose(){this._container.remove(),this._measureElements.length=0,this._holey=void 0}clear(){this._flat.fill(-9999),this._holey=new Map}setFont(t,e,i,r){t===this._font&&e===this._fontSize&&i===this._weight&&r===this._weightBold||(this._font=t,this._fontSize=e,this._weight=i,this._weightBold=r,this._container.style.fontFamily=this._font,this._container.style.fontSize=`${this._fontSize}px`,this._measureElements[0].style.fontWeight=`${i}`,this._measureElements[1].style.fontWeight=`${r}`,this._measureElements[2].style.fontWeight=`${i}`,this._measureElements[3].style.fontWeight=`${r}`,this.clear())}get(t,e,i){let r=0;if(!e&&!i&&t.length===1&&(r=t.charCodeAt(0))<256){if(this._flat[r]!==-9999)return this._flat[r];let l=this._measure(t,0);return l>0&&(this._flat[r]=l),l}let n=t;e&&(n+=\"B\"),i&&(n+=\"I\");let o=this._holey.get(n);if(o===void 0){let l=0;e&&(l|=1),i&&(l|=2),o=this._measure(t,l),o>0&&this._holey.set(n,o)}return o}_measure(t,e){let i=this._measureElements[e];return i.textContent=t.repeat(32),i.offsetWidth/32}};var ms=class{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(t,e,i,r=!1){if(this.selectionStart=e,this.selectionEnd=i,!e||!i||e[0]===i[0]&&e[1]===i[1]){this.clear();return}let n=t.buffers.active.ydisp,o=e[1]-n,l=i[1]-n,a=Math.max(o,0),u=Math.min(l,t.rows-1);if(a>=t.rows||u<0){this.clear();return}this.hasSelection=!0,this.columnSelectMode=r,this.viewportStartRow=o,this.viewportEndRow=l,this.viewportCappedStartRow=a,this.viewportCappedEndRow=u,this.startCol=e[0],this.endCol=i[0]}isCellSelected(t,e,i){return this.hasSelection?(i-=t.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?e>=this.startCol&&i>=this.viewportCappedStartRow&&e<this.endCol&&i<=this.viewportCappedEndRow:e<this.startCol&&i>=this.viewportCappedStartRow&&e>=this.endCol&&i<=this.viewportCappedEndRow:i>this.viewportStartRow&&i<this.viewportEndRow||this.viewportStartRow===this.viewportEndRow&&i===this.viewportStartRow&&e>=this.startCol&&e<this.endCol||this.viewportStartRow<this.viewportEndRow&&i===this.viewportEndRow&&e<this.endCol||this.viewportStartRow<this.viewportEndRow&&i===this.viewportStartRow&&e>=this.startCol):!1}};function Yo(){return new ms}var _s=\"xterm-dom-renderer-owner-\",Le=\"xterm-rows\",jr=\"xterm-fg-\",jo=\"xterm-bg-\",ki=\"xterm-focus\",Xr=\"xterm-selection\",Na=1,Yt=class extends D{constructor(e,i,r,n,o,l,a,u,h,c,d,_,p,m){super();this._terminal=e;this._document=i;this._element=r;this._screenElement=n;this._viewportElement=o;this._helperContainer=l;this._linkifier2=a;this._charSizeService=h;this._optionsService=c;this._bufferService=d;this._coreService=_;this._coreBrowserService=p;this._themeService=m;this._terminalClass=Na++;this._rowElements=[];this._selectionRenderModel=Yo();this.onRequestRedraw=this._register(new v).event;this._rowContainer=this._document.createElement(\"div\"),this._rowContainer.classList.add(Le),this._rowContainer.style.lineHeight=\"normal\",this._rowContainer.setAttribute(\"aria-hidden\",\"true\"),this._refreshRowElements(this._bufferService.cols,this._bufferService.rows),this._selectionContainer=this._document.createElement(\"div\"),this._selectionContainer.classList.add(Xr),this._selectionContainer.setAttribute(\"aria-hidden\",\"true\"),this.dimensions=Vo(),this._updateDimensions(),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._themeService.onChangeColors(f=>this._injectCss(f))),this._injectCss(this._themeService.colors),this._rowFactory=u.createInstance(Vt,document),this._element.classList.add(_s+this._terminalClass),this._screenElement.appendChild(this._rowContainer),this._screenElement.appendChild(this._selectionContainer),this._register(this._linkifier2.onShowLinkUnderline(f=>this._handleLinkHover(f))),this._register(this._linkifier2.onHideLinkUnderline(f=>this._handleLinkLeave(f))),this._register(C(()=>{this._element.classList.remove(_s+this._terminalClass),this._rowContainer.remove(),this._selectionContainer.remove(),this._widthCache.dispose(),this._themeStyleElement.remove(),this._dimensionsStyleElement.remove()})),this._widthCache=new Yr(this._document,this._helperContainer),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}_updateDimensions(){let e=this._coreBrowserService.dpr;this.dimensions.device.char.width=this._charSizeService.width*e,this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*e),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.left=0,this.dimensions.device.char.top=0,this.dimensions.device.canvas.width=this.dimensions.device.cell.width*this._bufferService.cols,this.dimensions.device.canvas.height=this.dimensions.device.cell.height*this._bufferService.rows,this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/e),this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/e),this.dimensions.css.cell.width=this.dimensions.css.canvas.width/this._bufferService.cols,this.dimensions.css.cell.height=this.dimensions.css.canvas.height/this._bufferService.rows;for(let r of this._rowElements)r.style.width=`${this.dimensions.css.canvas.width}px`,r.style.height=`${this.dimensions.css.cell.height}px`,r.style.lineHeight=`${this.dimensions.css.cell.height}px`,r.style.overflow=\"hidden\";this._dimensionsStyleElement||(this._dimensionsStyleElement=this._document.createElement(\"style\"),this._screenElement.appendChild(this._dimensionsStyleElement));let i=`${this._terminalSelector} .${Le} span { display: inline-block; height: 100%; vertical-align: top;}`;this._dimensionsStyleElement.textContent=i,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._screenElement.style.height=`${this.dimensions.css.canvas.height}px`}_injectCss(e){this._themeStyleElement||(this._themeStyleElement=this._document.createElement(\"style\"),this._screenElement.appendChild(this._themeStyleElement));let i=`${this._terminalSelector} .${Le} { pointer-events: none; color: ${e.foreground.css}; font-family: ${this._optionsService.rawOptions.fontFamily}; font-size: ${this._optionsService.rawOptions.fontSize}px; font-kerning: none; white-space: pre}`;i+=`${this._terminalSelector} .${Le} .xterm-dim { color: ${U.multiplyOpacity(e.foreground,.5).css};}`,i+=`${this._terminalSelector} span:not(.xterm-bold) { font-weight: ${this._optionsService.rawOptions.fontWeight};}${this._terminalSelector} span.xterm-bold { font-weight: ${this._optionsService.rawOptions.fontWeightBold};}${this._terminalSelector} span.xterm-italic { font-style: italic;}`;let r=`blink_underline_${this._terminalClass}`,n=`blink_bar_${this._terminalClass}`,o=`blink_block_${this._terminalClass}`;i+=`@keyframes ${r} { 50% { border-bottom-style: hidden; }}`,i+=`@keyframes ${n} { 50% { box-shadow: none; }}`,i+=`@keyframes ${o} { 0% { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css}; } 50% { background-color: inherit; color: ${e.cursor.css}; }}`,i+=`${this._terminalSelector} .${Le}.${ki} .xterm-cursor.xterm-cursor-blink.xterm-cursor-underline { animation: ${r} 1s step-end infinite;}${this._terminalSelector} .${Le}.${ki} .xterm-cursor.xterm-cursor-blink.xterm-cursor-bar { animation: ${n} 1s step-end infinite;}${this._terminalSelector} .${Le}.${ki} .xterm-cursor.xterm-cursor-blink.xterm-cursor-block { animation: ${o} 1s step-end infinite;}${this._terminalSelector} .${Le} .xterm-cursor.xterm-cursor-block { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css};}${this._terminalSelector} .${Le} .xterm-cursor.xterm-cursor-block:not(.xterm-cursor-blink) { background-color: ${e.cursor.css} !important; color: ${e.cursorAccent.css} !important;}${this._terminalSelector} .${Le} .xterm-cursor.xterm-cursor-outline { outline: 1px solid ${e.cursor.css}; outline-offset: -1px;}${this._terminalSelector} .${Le} .xterm-cursor.xterm-cursor-bar { box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${e.cursor.css} inset;}${this._terminalSelector} .${Le} .xterm-cursor.xterm-cursor-underline { border-bottom: 1px ${e.cursor.css}; border-bottom-style: solid; height: calc(100% - 1px);}`,i+=`${this._terminalSelector} .${Xr} { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}${this._terminalSelector}.focus .${Xr} div { position: absolute; background-color: ${e.selectionBackgroundOpaque.css};}${this._terminalSelector} .${Xr} div { position: absolute; background-color: ${e.selectionInactiveBackgroundOpaque.css};}`;for(let[l,a]of e.ansi.entries())i+=`${this._terminalSelector} .${jr}${l} { color: ${a.css}; }${this._terminalSelector} .${jr}${l}.xterm-dim { color: ${U.multiplyOpacity(a,.5).css}; }${this._terminalSelector} .${jo}${l} { background-color: ${a.css}; }`;i+=`${this._terminalSelector} .${jr}${257} { color: ${U.opaque(e.background).css}; }${this._terminalSelector} .${jr}${257}.xterm-dim { color: ${U.multiplyOpacity(U.opaque(e.background),.5).css}; }${this._terminalSelector} .${jo}${257} { background-color: ${e.foreground.css}; }`,this._themeStyleElement.textContent=i}_setDefaultSpacing(){let e=this.dimensions.css.cell.width-this._widthCache.get(\"W\",!1,!1);this._rowContainer.style.letterSpacing=`${e}px`,this._rowFactory.defaultSpacing=e}handleDevicePixelRatioChange(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}_refreshRowElements(e,i){for(let r=this._rowElements.length;r<=i;r++){let n=this._document.createElement(\"div\");this._rowContainer.appendChild(n),this._rowElements.push(n)}for(;this._rowElements.length>i;)this._rowContainer.removeChild(this._rowElements.pop())}handleResize(e,i){this._refreshRowElements(e,i),this._updateDimensions(),this.handleSelectionChanged(this._selectionRenderModel.selectionStart,this._selectionRenderModel.selectionEnd,this._selectionRenderModel.columnSelectMode)}handleCharSizeChanged(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}handleBlur(){this._rowContainer.classList.remove(ki),this.renderRows(0,this._bufferService.rows-1)}handleFocus(){this._rowContainer.classList.add(ki),this.renderRows(this._bufferService.buffer.y,this._bufferService.buffer.y)}handleSelectionChanged(e,i,r){if(this._selectionContainer.replaceChildren(),this._rowFactory.handleSelectionChanged(e,i,r),this.renderRows(0,this._bufferService.rows-1),!e||!i||(this._selectionRenderModel.update(this._terminal,e,i,r),!this._selectionRenderModel.hasSelection))return;let n=this._selectionRenderModel.viewportStartRow,o=this._selectionRenderModel.viewportEndRow,l=this._selectionRenderModel.viewportCappedStartRow,a=this._selectionRenderModel.viewportCappedEndRow,u=this._document.createDocumentFragment();if(r){let h=e[0]>i[0];u.appendChild(this._createSelectionElement(l,h?i[0]:e[0],h?e[0]:i[0],a-l+1))}else{let h=n===l?e[0]:0,c=l===o?i[0]:this._bufferService.cols;u.appendChild(this._createSelectionElement(l,h,c));let d=a-l-1;if(u.appendChild(this._createSelectionElement(l+1,0,this._bufferService.cols,d)),l!==a){let _=o===a?i[0]:this._bufferService.cols;u.appendChild(this._createSelectionElement(a,0,_))}}this._selectionContainer.appendChild(u)}_createSelectionElement(e,i,r,n=1){let o=this._document.createElement(\"div\"),l=i*this.dimensions.css.cell.width,a=this.dimensions.css.cell.width*(r-i);return l+a>this.dimensions.css.canvas.width&&(a=this.dimensions.css.canvas.width-l),o.style.height=`${n*this.dimensions.css.cell.height}px`,o.style.top=`${e*this.dimensions.css.cell.height}px`,o.style.left=`${l}px`,o.style.width=`${a}px`,o}handleCursorMove(){}_handleOptionsChanged(){this._updateDimensions(),this._injectCss(this._themeService.colors),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}clear(){for(let e of this._rowElements)e.replaceChildren()}renderRows(e,i){let r=this._bufferService.buffer,n=r.ybase+r.y,o=Math.min(r.x,this._bufferService.cols-1),l=this._coreService.decPrivateModes.cursorBlink??this._optionsService.rawOptions.cursorBlink,a=this._coreService.decPrivateModes.cursorStyle??this._optionsService.rawOptions.cursorStyle,u=this._optionsService.rawOptions.cursorInactiveStyle;for(let h=e;h<=i;h++){let c=h+r.ydisp,d=this._rowElements[h],_=r.lines.get(c);if(!d||!_)break;d.replaceChildren(...this._rowFactory.createRow(_,c,c===n,a,u,o,l,this.dimensions.css.cell.width,this._widthCache,-1,-1))}}get _terminalSelector(){return`.${_s}${this._terminalClass}`}_handleLinkHover(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!0)}_handleLinkLeave(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!1)}_setCellUnderline(e,i,r,n,o,l){r<0&&(e=0),n<0&&(i=0);let a=this._bufferService.rows-1;r=Math.max(Math.min(r,a),0),n=Math.max(Math.min(n,a),0),o=Math.min(o,this._bufferService.cols);let u=this._bufferService.buffer,h=u.ybase+u.y,c=Math.min(u.x,o-1),d=this._optionsService.rawOptions.cursorBlink,_=this._optionsService.rawOptions.cursorStyle,p=this._optionsService.rawOptions.cursorInactiveStyle;for(let m=r;m<=n;++m){let f=m+u.ydisp,A=this._rowElements[m],R=u.lines.get(f);if(!A||!R)break;A.replaceChildren(...this._rowFactory.createRow(R,f,f===h,_,p,c,d,this.dimensions.css.cell.width,this._widthCache,l?m===r?e:0:-1,l?(m===n?i:o)-1:-1))}}};Yt=M([S(7,xt),S(8,nt),S(9,H),S(10,F),S(11,ge),S(12,ae),S(13,Re)],Yt);var jt=class extends D{constructor(e,i,r){super();this._optionsService=r;this.width=0;this.height=0;this._onCharSizeChange=this._register(new v);this.onCharSizeChange=this._onCharSizeChange.event;try{this._measureStrategy=this._register(new vs(this._optionsService))}catch{this._measureStrategy=this._register(new bs(e,i,this._optionsService))}this._register(this._optionsService.onMultipleOptionChange([\"fontFamily\",\"fontSize\"],()=>this.measure()))}get hasValidSize(){return this.width>0&&this.height>0}measure(){let e=this._measureStrategy.measure();(e.width!==this.width||e.height!==this.height)&&(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())}};jt=M([S(2,H)],jt);var Zr=class extends D{constructor(){super(...arguments);this._result={width:0,height:0}}_validateAndSet(e,i){e!==void 0&&e>0&&i!==void 0&&i>0&&(this._result.width=e,this._result.height=i)}},bs=class extends Zr{constructor(e,i,r){super();this._document=e;this._parentElement=i;this._optionsService=r;this._measureElement=this._document.createElement(\"span\"),this._measureElement.classList.add(\"xterm-char-measure-element\"),this._measureElement.textContent=\"W\".repeat(32),this._measureElement.setAttribute(\"aria-hidden\",\"true\"),this._measureElement.style.whiteSpace=\"pre\",this._measureElement.style.fontKerning=\"none\",this._parentElement.appendChild(this._measureElement)}measure(){return this._measureElement.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._measureElement.style.fontSize=`${this._optionsService.rawOptions.fontSize}px`,this._validateAndSet(Number(this._measureElement.offsetWidth)/32,Number(this._measureElement.offsetHeight)),this._result}},vs=class extends Zr{constructor(e){super();this._optionsService=e;this._canvas=new OffscreenCanvas(100,100),this._ctx=this._canvas.getContext(\"2d\");let i=this._ctx.measureText(\"W\");if(!(\"width\"in i&&\"fontBoundingBoxAscent\"in i&&\"fontBoundingBoxDescent\"in i))throw new Error(\"Required font metrics not supported\")}measure(){this._ctx.font=`${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;let e=this._ctx.measureText(\"W\");return this._validateAndSet(e.width,e.fontBoundingBoxAscent+e.fontBoundingBoxDescent),this._result}};var Jr=class extends D{constructor(e,i,r){super();this._textarea=e;this._window=i;this.mainDocument=r;this._isFocused=!1;this._cachedIsFocused=void 0;this._screenDprMonitor=this._register(new gs(this._window));this._onDprChange=this._register(new v);this.onDprChange=this._onDprChange.event;this._onWindowChange=this._register(new v);this.onWindowChange=this._onWindowChange.event;this._register(this.onWindowChange(n=>this._screenDprMonitor.setWindow(n))),this._register($.forward(this._screenDprMonitor.onDprChange,this._onDprChange)),this._register(L(this._textarea,\"focus\",()=>this._isFocused=!0)),this._register(L(this._textarea,\"blur\",()=>this._isFocused=!1))}get window(){return this._window}set window(e){this._window!==e&&(this._window=e,this._onWindowChange.fire(this._window))}get dpr(){return this.window.devicePixelRatio}get isFocused(){return this._cachedIsFocused===void 0&&(this._cachedIsFocused=this._isFocused&&this._textarea.ownerDocument.hasFocus(),queueMicrotask(()=>this._cachedIsFocused=void 0)),this._cachedIsFocused}},gs=class extends D{constructor(e){super();this._parentWindow=e;this._windowResizeListener=this._register(new ye);this._onDprChange=this._register(new v);this.onDprChange=this._onDprChange.event;this._outerListener=()=>this._setDprAndFireIfDiffers(),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._updateDpr(),this._setWindowResizeListener(),this._register(C(()=>this.clearListener()))}setWindow(e){this._parentWindow=e,this._setWindowResizeListener(),this._setDprAndFireIfDiffers()}_setWindowResizeListener(){this._windowResizeListener.value=L(this._parentWindow,\"resize\",()=>this._setDprAndFireIfDiffers())}_setDprAndFireIfDiffers(){this._parentWindow.devicePixelRatio!==this._currentDevicePixelRatio&&this._onDprChange.fire(this._parentWindow.devicePixelRatio),this._updateDpr()}_updateDpr(){this._outerListener&&(this._resolutionMediaMatchList?.removeListener(this._outerListener),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._resolutionMediaMatchList=this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`),this._resolutionMediaMatchList.addListener(this._outerListener))}clearListener(){!this._resolutionMediaMatchList||!this._outerListener||(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._outerListener=void 0)}};var Qr=class extends D{constructor(){super();this.linkProviders=[];this._register(C(()=>this.linkProviders.length=0))}registerLinkProvider(e){return this.linkProviders.push(e),{dispose:()=>{let i=this.linkProviders.indexOf(e);i!==-1&&this.linkProviders.splice(i,1)}}}};function Ci(s,t,e){let i=e.getBoundingClientRect(),r=s.getComputedStyle(e),n=parseInt(r.getPropertyValue(\"padding-left\")),o=parseInt(r.getPropertyValue(\"padding-top\"));return[t.clientX-i.left-n,t.clientY-i.top-o]}function Xo(s,t,e,i,r,n,o,l,a){if(!n)return;let u=Ci(s,t,e);if(u)return u[0]=Math.ceil((u[0]+(a?o/2:0))/o),u[1]=Math.ceil(u[1]/l),u[0]=Math.min(Math.max(u[0],1),i+(a?1:0)),u[1]=Math.min(Math.max(u[1],1),r),u}var Xt=class{constructor(t,e){this._renderService=t;this._charSizeService=e}getCoords(t,e,i,r,n){return Xo(window,t,e,i,r,this._charSizeService.hasValidSize,this._renderService.dimensions.css.cell.width,this._renderService.dimensions.css.cell.height,n)}getMouseReportCoords(t,e){let i=Ci(window,t,e);if(this._charSizeService.hasValidSize)return i[0]=Math.min(Math.max(i[0],0),this._renderService.dimensions.css.canvas.width-1),i[1]=Math.min(Math.max(i[1],0),this._renderService.dimensions.css.canvas.height-1),{col:Math.floor(i[0]/this._renderService.dimensions.css.cell.width),row:Math.floor(i[1]/this._renderService.dimensions.css.cell.height),x:Math.floor(i[0]),y:Math.floor(i[1])}}};Xt=M([S(0,ce),S(1,nt)],Xt);var en=class{constructor(t,e){this._renderCallback=t;this._coreBrowserService=e;this._refreshCallbacks=[]}dispose(){this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)}addRefreshCallback(t){return this._refreshCallbacks.push(t),this._animationFrame||(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh())),this._animationFrame}refresh(t,e,i){this._rowCount=i,t=t!==void 0?t:0,e=e!==void 0?e:this._rowCount-1,this._rowStart=this._rowStart!==void 0?Math.min(this._rowStart,t):t,this._rowEnd=this._rowEnd!==void 0?Math.max(this._rowEnd,e):e,!this._animationFrame&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()))}_innerRefresh(){if(this._animationFrame=void 0,this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0){this._runRefreshCallbacks();return}let t=Math.max(this._rowStart,0),e=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(t,e),this._runRefreshCallbacks()}_runRefreshCallbacks(){for(let t of this._refreshCallbacks)t(0);this._refreshCallbacks=[]}};var tn={};Ll(tn,{getSafariVersion:()=>Ha,isChromeOS:()=>Ts,isFirefox:()=>Ss,isIpad:()=>Wa,isIphone:()=>Ua,isLegacyEdge:()=>Fa,isLinux:()=>Bi,isMac:()=>Zt,isNode:()=>Mi,isSafari:()=>Zo,isWindows:()=>Es});var Mi=typeof process<\"u\"&&\"title\"in process,Pi=Mi?\"node\":navigator.userAgent,Oi=Mi?\"node\":navigator.platform,Ss=Pi.includes(\"Firefox\"),Fa=Pi.includes(\"Edge\"),Zo=/^((?!chrome|android).)*safari/i.test(Pi);function Ha(){if(!Zo)return 0;let s=Pi.match(/Version\\/(\\d+)/);return s===null||s.length<2?0:parseInt(s[1])}var Zt=[\"Macintosh\",\"MacIntel\",\"MacPPC\",\"Mac68K\"].includes(Oi),Wa=Oi===\"iPad\",Ua=Oi===\"iPhone\",Es=[\"Windows\",\"Win16\",\"Win32\",\"WinCE\"].includes(Oi),Bi=Oi.indexOf(\"Linux\")>=0,Ts=/\\bCrOS\\b/.test(Pi);var rn=class{constructor(){this._tasks=[];this._i=0}enqueue(t){this._tasks.push(t),this._start()}flush(){for(;this._i<this._tasks.length;)this._tasks[this._i]()||this._i++;this.clear()}clear(){this._idleCallback&&(this._cancelCallback(this._idleCallback),this._idleCallback=void 0),this._i=0,this._tasks.length=0}_start(){this._idleCallback||(this._idleCallback=this._requestCallback(this._process.bind(this)))}_process(t){this._idleCallback=void 0;let e=0,i=0,r=t.timeRemaining(),n=0;for(;this._i<this._tasks.length;){if(e=performance.now(),this._tasks[this._i]()||this._i++,e=Math.max(1,performance.now()-e),i=Math.max(e,i),n=t.timeRemaining(),i*1.5>n){r-e<-20&&console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(r-e))}ms`),this._start();return}r=n}this.clear()}},Is=class extends rn{_requestCallback(t){return setTimeout(()=>t(this._createDeadline(16)))}_cancelCallback(t){clearTimeout(t)}_createDeadline(t){let e=performance.now()+t;return{timeRemaining:()=>Math.max(0,e-performance.now())}}},ys=class extends rn{_requestCallback(t){return requestIdleCallback(t)}_cancelCallback(t){cancelIdleCallback(t)}},Jt=!Mi&&\"requestIdleCallback\"in window?ys:Is,nn=class{constructor(){this._queue=new Jt}set(t){this._queue.clear(),this._queue.enqueue(t)}flush(){this._queue.flush()}};var Qt=class extends D{constructor(e,i,r,n,o,l,a,u,h){super();this._rowCount=e;this._optionsService=r;this._charSizeService=n;this._coreService=o;this._coreBrowserService=u;this._renderer=this._register(new ye);this._pausedResizeTask=new nn;this._observerDisposable=this._register(new ye);this._isPaused=!1;this._needsFullRefresh=!1;this._isNextRenderRedrawOnly=!0;this._needsSelectionRefresh=!1;this._canvasWidth=0;this._canvasHeight=0;this._selectionState={start:void 0,end:void 0,columnSelectMode:!1};this._onDimensionsChange=this._register(new v);this.onDimensionsChange=this._onDimensionsChange.event;this._onRenderedViewportChange=this._register(new v);this.onRenderedViewportChange=this._onRenderedViewportChange.event;this._onRender=this._register(new v);this.onRender=this._onRender.event;this._onRefreshRequest=this._register(new v);this.onRefreshRequest=this._onRefreshRequest.event;this._renderDebouncer=new en((c,d)=>this._renderRows(c,d),this._coreBrowserService),this._register(this._renderDebouncer),this._syncOutputHandler=new xs(this._coreBrowserService,this._coreService,()=>this._fullRefresh()),this._register(C(()=>this._syncOutputHandler.dispose())),this._register(this._coreBrowserService.onDprChange(()=>this.handleDevicePixelRatioChange())),this._register(a.onResize(()=>this._fullRefresh())),this._register(a.buffers.onBufferActivate(()=>this._renderer.value?.clear())),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._charSizeService.onCharSizeChange(()=>this.handleCharSizeChanged())),this._register(l.onDecorationRegistered(()=>this._fullRefresh())),this._register(l.onDecorationRemoved(()=>this._fullRefresh())),this._register(this._optionsService.onMultipleOptionChange([\"customGlyphs\",\"drawBoldTextInBrightColors\",\"letterSpacing\",\"lineHeight\",\"fontFamily\",\"fontSize\",\"fontWeight\",\"fontWeightBold\",\"minimumContrastRatio\",\"rescaleOverlappingGlyphs\"],()=>{this.clear(),this.handleResize(a.cols,a.rows),this._fullRefresh()})),this._register(this._optionsService.onMultipleOptionChange([\"cursorBlink\",\"cursorStyle\"],()=>this.refreshRows(a.buffer.y,a.buffer.y,!0))),this._register(h.onChangeColors(()=>this._fullRefresh())),this._registerIntersectionObserver(this._coreBrowserService.window,i),this._register(this._coreBrowserService.onWindowChange(c=>this._registerIntersectionObserver(c,i)))}get dimensions(){return this._renderer.value.dimensions}_registerIntersectionObserver(e,i){if(\"IntersectionObserver\"in e){let r=new e.IntersectionObserver(n=>this._handleIntersectionChange(n[n.length-1]),{threshold:0});r.observe(i),this._observerDisposable.value=C(()=>r.disconnect())}}_handleIntersectionChange(e){this._isPaused=e.isIntersecting===void 0?e.intersectionRatio===0:!e.isIntersecting,!this._isPaused&&!this._charSizeService.hasValidSize&&this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this._pausedResizeTask.flush(),this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)}refreshRows(e,i,r=!1){if(this._isPaused){this._needsFullRefresh=!0;return}if(this._coreService.decPrivateModes.synchronizedOutput){this._syncOutputHandler.bufferRows(e,i);return}let n=this._syncOutputHandler.flush();n&&(e=Math.min(e,n.start),i=Math.max(i,n.end)),r||(this._isNextRenderRedrawOnly=!1),this._renderDebouncer.refresh(e,i,this._rowCount)}_renderRows(e,i){if(this._renderer.value){if(this._coreService.decPrivateModes.synchronizedOutput){this._syncOutputHandler.bufferRows(e,i);return}e=Math.min(e,this._rowCount-1),i=Math.min(i,this._rowCount-1),this._renderer.value.renderRows(e,i),this._needsSelectionRefresh&&(this._renderer.value.handleSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),this._needsSelectionRefresh=!1),this._isNextRenderRedrawOnly||this._onRenderedViewportChange.fire({start:e,end:i}),this._onRender.fire({start:e,end:i}),this._isNextRenderRedrawOnly=!0}}resize(e,i){this._rowCount=i,this._fireOnCanvasResize()}_handleOptionsChanged(){this._renderer.value&&(this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize())}_fireOnCanvasResize(){this._renderer.value&&(this._renderer.value.dimensions.css.canvas.width===this._canvasWidth&&this._renderer.value.dimensions.css.canvas.height===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.value.dimensions))}hasRenderer(){return!!this._renderer.value}setRenderer(e){this._renderer.value=e,this._renderer.value&&(this._renderer.value.onRequestRedraw(i=>this.refreshRows(i.start,i.end,!0)),this._needsSelectionRefresh=!0,this._fullRefresh())}addRefreshCallback(e){return this._renderDebouncer.addRefreshCallback(e)}_fullRefresh(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)}clearTextureAtlas(){this._renderer.value&&(this._renderer.value.clearTextureAtlas?.(),this._fullRefresh())}handleDevicePixelRatioChange(){this._charSizeService.measure(),this._renderer.value&&(this._renderer.value.handleDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1))}handleResize(e,i){this._renderer.value&&(this._isPaused?this._pausedResizeTask.set(()=>this._renderer.value?.handleResize(e,i)):this._renderer.value.handleResize(e,i),this._fullRefresh())}handleCharSizeChanged(){this._renderer.value?.handleCharSizeChanged()}handleBlur(){this._renderer.value?.handleBlur()}handleFocus(){this._renderer.value?.handleFocus()}handleSelectionChanged(e,i,r){this._selectionState.start=e,this._selectionState.end=i,this._selectionState.columnSelectMode=r,this._renderer.value?.handleSelectionChanged(e,i,r)}handleCursorMove(){this._renderer.value?.handleCursorMove()}clear(){this._renderer.value?.clear()}};Qt=M([S(2,H),S(3,nt),S(4,ge),S(5,Be),S(6,F),S(7,ae),S(8,Re)],Qt);var xs=class{constructor(t,e,i){this._coreBrowserService=t;this._coreService=e;this._onTimeout=i;this._start=0;this._end=0;this._isBuffering=!1}bufferRows(t,e){this._isBuffering?(this._start=Math.min(this._start,t),this._end=Math.max(this._end,e)):(this._start=t,this._end=e,this._isBuffering=!0),this._timeout===void 0&&(this._timeout=this._coreBrowserService.window.setTimeout(()=>{this._timeout=void 0,this._coreService.decPrivateModes.synchronizedOutput=!1,this._onTimeout()},1e3))}flush(){if(this._timeout!==void 0&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0),!this._isBuffering)return;let t={start:this._start,end:this._end};return this._isBuffering=!1,t}dispose(){this._timeout!==void 0&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0)}};function Jo(s,t,e,i){let r=e.buffer.x,n=e.buffer.y;if(!e.buffer.hasScrollback)return Ga(r,n,s,t,e,i)+sn(n,t,e,i)+$a(r,n,s,t,e,i);let o;if(n===t)return o=r>s?\"D\":\"C\",Fi(Math.abs(r-s),Ni(o,i));o=n>t?\"D\":\"C\";let l=Math.abs(n-t),a=za(n>t?s:r,e)+(l-1)*e.cols+1+Ka(n>t?r:s,e);return Fi(a,Ni(o,i))}function Ka(s,t){return s-1}function za(s,t){return t.cols-s}function Ga(s,t,e,i,r,n){return sn(t,i,r,n).length===0?\"\":Fi(el(s,t,s,t-gt(t,r),!1,r).length,Ni(\"D\",n))}function sn(s,t,e,i){let r=s-gt(s,e),n=t-gt(t,e),o=Math.abs(r-n)-Va(s,t,e);return Fi(o,Ni(Qo(s,t),i))}function $a(s,t,e,i,r,n){let o;sn(t,i,r,n).length>0?o=i-gt(i,r):o=t;let l=i,a=qa(s,t,e,i,r,n);return Fi(el(s,o,e,l,a===\"C\",r).length,Ni(a,n))}function Va(s,t,e){let i=0,r=s-gt(s,e),n=t-gt(t,e);for(let o=0;o<Math.abs(r-n);o++){let l=Qo(s,t)===\"A\"?-1:1;e.buffer.lines.get(r+l*o)?.isWrapped&&i++}return i}function gt(s,t){let e=0,i=t.buffer.lines.get(s),r=i?.isWrapped;for(;r&&s>=0&&s<t.rows;)e++,i=t.buffer.lines.get(--s),r=i?.isWrapped;return e}function qa(s,t,e,i,r,n){let o;return sn(e,i,r,n).length>0?o=i-gt(i,r):o=t,s<e&&o<=i||s>=e&&o<i?\"C\":\"D\"}function Qo(s,t){return s>t?\"A\":\"B\"}function el(s,t,e,i,r,n){let o=s,l=t,a=\"\";for(;(o!==e||l!==i)&&l>=0&&l<n.buffer.lines.length;)o+=r?1:-1,r&&o>n.cols-1?(a+=n.buffer.translateBufferLineToString(l,!1,s,o),o=0,s=0,l++):!r&&o<0&&(a+=n.buffer.translateBufferLineToString(l,!1,0,s+1),o=n.cols-1,s=o,l--);return a+n.buffer.translateBufferLineToString(l,!1,s,o)}function Ni(s,t){let e=t?\"O\":\"[\";return b.ESC+e+s}function Fi(s,t){s=Math.floor(s);let e=\"\";for(let i=0;i<s;i++)e+=t;return e}var on=class{constructor(t){this._bufferService=t;this.isSelectAllActive=!1;this.selectionStartLength=0}clearSelection(){this.selectionStart=void 0,this.selectionEnd=void 0,this.isSelectAllActive=!1,this.selectionStartLength=0}get finalSelectionStart(){return this.isSelectAllActive?[0,0]:!this.selectionEnd||!this.selectionStart?this.selectionStart:this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart}get finalSelectionEnd(){if(this.isSelectAllActive)return[this._bufferService.cols,this._bufferService.buffer.ybase+this._bufferService.rows-1];if(this.selectionStart){if(!this.selectionEnd||this.areSelectionValuesReversed()){let t=this.selectionStart[0]+this.selectionStartLength;return t>this._bufferService.cols?t%this._bufferService.cols===0?[this._bufferService.cols,this.selectionStart[1]+Math.floor(t/this._bufferService.cols)-1]:[t%this._bufferService.cols,this.selectionStart[1]+Math.floor(t/this._bufferService.cols)]:[t,this.selectionStart[1]]}if(this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]){let t=this.selectionStart[0]+this.selectionStartLength;return t>this._bufferService.cols?[t%this._bufferService.cols,this.selectionStart[1]+Math.floor(t/this._bufferService.cols)]:[Math.max(t,this.selectionEnd[0]),this.selectionEnd[1]]}return this.selectionEnd}}areSelectionValuesReversed(){let t=this.selectionStart,e=this.selectionEnd;return!t||!e?!1:t[1]>e[1]||t[1]===e[1]&&t[0]>e[0]}handleTrim(t){return this.selectionStart&&(this.selectionStart[1]-=t),this.selectionEnd&&(this.selectionEnd[1]-=t),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):(this.selectionStart&&this.selectionStart[1]<0&&(this.selectionStart[1]=0),!1)}};function ws(s,t){if(s.start.y>s.end.y)throw new Error(`Buffer range end (${s.end.x}, ${s.end.y}) cannot be before start (${s.start.x}, ${s.start.y})`);return t*(s.end.y-s.start.y)+(s.end.x-s.start.x+1)}var Ds=50,Ya=15,ja=50,Xa=500,Za=\"\\xA0\",Ja=new RegExp(Za,\"g\");var ei=class extends D{constructor(e,i,r,n,o,l,a,u,h){super();this._element=e;this._screenElement=i;this._linkifier=r;this._bufferService=n;this._coreService=o;this._mouseService=l;this._optionsService=a;this._renderService=u;this._coreBrowserService=h;this._dragScrollAmount=0;this._enabled=!0;this._workCell=new q;this._mouseDownTimeStamp=0;this._oldHasSelection=!1;this._oldSelectionStart=void 0;this._oldSelectionEnd=void 0;this._onLinuxMouseSelection=this._register(new v);this.onLinuxMouseSelection=this._onLinuxMouseSelection.event;this._onRedrawRequest=this._register(new v);this.onRequestRedraw=this._onRedrawRequest.event;this._onSelectionChange=this._register(new v);this.onSelectionChange=this._onSelectionChange.event;this._onRequestScrollLines=this._register(new v);this.onRequestScrollLines=this._onRequestScrollLines.event;this._mouseMoveListener=c=>this._handleMouseMove(c),this._mouseUpListener=c=>this._handleMouseUp(c),this._coreService.onUserInput(()=>{this.hasSelection&&this.clearSelection()}),this._trimListener=this._bufferService.buffer.lines.onTrim(c=>this._handleTrim(c)),this._register(this._bufferService.buffers.onBufferActivate(c=>this._handleBufferActivate(c))),this.enable(),this._model=new on(this._bufferService),this._activeSelectionMode=0,this._register(C(()=>{this._removeMouseDownListeners()})),this._register(this._bufferService.onResize(c=>{c.rowsChanged&&this.clearSelection()}))}reset(){this.clearSelection()}disable(){this.clearSelection(),this._enabled=!1}enable(){this._enabled=!0}get selectionStart(){return this._model.finalSelectionStart}get selectionEnd(){return this._model.finalSelectionEnd}get hasSelection(){let e=this._model.finalSelectionStart,i=this._model.finalSelectionEnd;return!e||!i?!1:e[0]!==i[0]||e[1]!==i[1]}get selectionText(){let e=this._model.finalSelectionStart,i=this._model.finalSelectionEnd;if(!e||!i)return\"\";let r=this._bufferService.buffer,n=[];if(this._activeSelectionMode===3){if(e[0]===i[0])return\"\";let l=e[0]<i[0]?e[0]:i[0],a=e[0]<i[0]?i[0]:e[0];for(let u=e[1];u<=i[1];u++){let h=r.translateBufferLineToString(u,!0,l,a);n.push(h)}}else{let l=e[1]===i[1]?i[0]:void 0;n.push(r.translateBufferLineToString(e[1],!0,e[0],l));for(let a=e[1]+1;a<=i[1]-1;a++){let u=r.lines.get(a),h=r.translateBufferLineToString(a,!0);u?.isWrapped?n[n.length-1]+=h:n.push(h)}if(e[1]!==i[1]){let a=r.lines.get(i[1]),u=r.translateBufferLineToString(i[1],!0,0,i[0]);a&&a.isWrapped?n[n.length-1]+=u:n.push(u)}}return n.map(l=>l.replace(Ja,\" \")).join(Es?`\\r\n`:`\n`)}clearSelection(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()}refresh(e){this._refreshAnimationFrame||(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._refresh())),Bi&&e&&this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText)}_refresh(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:this._activeSelectionMode===3})}_isClickInSelection(e){let i=this._getMouseBufferCoords(e),r=this._model.finalSelectionStart,n=this._model.finalSelectionEnd;return!r||!n||!i?!1:this._areCoordsInSelection(i,r,n)}isCellInSelection(e,i){let r=this._model.finalSelectionStart,n=this._model.finalSelectionEnd;return!r||!n?!1:this._areCoordsInSelection([e,i],r,n)}_areCoordsInSelection(e,i,r){return e[1]>i[1]&&e[1]<r[1]||i[1]===r[1]&&e[1]===i[1]&&e[0]>=i[0]&&e[0]<r[0]||i[1]<r[1]&&e[1]===r[1]&&e[0]<r[0]||i[1]<r[1]&&e[1]===i[1]&&e[0]>=i[0]}_selectWordAtCursor(e,i){let r=this._linkifier.currentLink?.link?.range;if(r)return this._model.selectionStart=[r.start.x-1,r.start.y-1],this._model.selectionStartLength=ws(r,this._bufferService.cols),this._model.selectionEnd=void 0,!0;let n=this._getMouseBufferCoords(e);return n?(this._selectWordAt(n,i),this._model.selectionEnd=void 0,!0):!1}selectAll(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()}selectLines(e,i){this._model.clearSelection(),e=Math.max(e,0),i=Math.min(i,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,e],this._model.selectionEnd=[this._bufferService.cols,i],this.refresh(),this._onSelectionChange.fire()}_handleTrim(e){this._model.handleTrim(e)&&this.refresh()}_getMouseBufferCoords(e){let i=this._mouseService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(i)return i[0]--,i[1]--,i[1]+=this._bufferService.buffer.ydisp,i}_getMouseEventScrollAmount(e){let i=Ci(this._coreBrowserService.window,e,this._screenElement)[1],r=this._renderService.dimensions.css.canvas.height;return i>=0&&i<=r?0:(i>r&&(i-=r),i=Math.min(Math.max(i,-Ds),Ds),i/=Ds,i/Math.abs(i)+Math.round(i*(Ya-1)))}shouldForceSelection(e){return Zt?e.altKey&&this._optionsService.rawOptions.macOptionClickForcesSelection:e.shiftKey}handleMouseDown(e){if(this._mouseDownTimeStamp=e.timeStamp,!(e.button===2&&this.hasSelection)&&e.button===0){if(!this._enabled){if(!this.shouldForceSelection(e))return;e.stopPropagation()}e.preventDefault(),this._dragScrollAmount=0,this._enabled&&e.shiftKey?this._handleIncrementalClick(e):e.detail===1?this._handleSingleClick(e):e.detail===2?this._handleDoubleClick(e):e.detail===3&&this._handleTripleClick(e),this._addMouseDownListeners(),this.refresh(!0)}}_addMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener(\"mousemove\",this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener(\"mouseup\",this._mouseUpListener)),this._dragScrollIntervalTimer=this._coreBrowserService.window.setInterval(()=>this._dragScroll(),ja)}_removeMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener(\"mousemove\",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener(\"mouseup\",this._mouseUpListener)),this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0}_handleIncrementalClick(e){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(e))}_handleSingleClick(e){if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(e)?3:0,this._model.selectionStart=this._getMouseBufferCoords(e),!this._model.selectionStart)return;this._model.selectionEnd=void 0;let i=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);i&&i.length!==this._model.selectionStart[0]&&i.hasWidth(this._model.selectionStart[0])===0&&this._model.selectionStart[0]++}_handleDoubleClick(e){this._selectWordAtCursor(e,!0)&&(this._activeSelectionMode=1)}_handleTripleClick(e){let i=this._getMouseBufferCoords(e);i&&(this._activeSelectionMode=2,this._selectLineAt(i[1]))}shouldColumnSelect(e){return e.altKey&&!(Zt&&this._optionsService.rawOptions.macOptionClickForcesSelection)}_handleMouseMove(e){if(e.stopImmediatePropagation(),!this._model.selectionStart)return;let i=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(e),!this._model.selectionEnd){this.refresh(!0);return}this._activeSelectionMode===2?this._model.selectionEnd[1]<this._model.selectionStart[1]?this._model.selectionEnd[0]=0:this._model.selectionEnd[0]=this._bufferService.cols:this._activeSelectionMode===1&&this._selectToWordAt(this._model.selectionEnd),this._dragScrollAmount=this._getMouseEventScrollAmount(e),this._activeSelectionMode!==3&&(this._dragScrollAmount>0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));let r=this._bufferService.buffer;if(this._model.selectionEnd[1]<r.lines.length){let n=r.lines.get(this._model.selectionEnd[1]);n&&n.hasWidth(this._model.selectionEnd[0])===0&&this._model.selectionEnd[0]<this._bufferService.cols&&this._model.selectionEnd[0]++}(!i||i[0]!==this._model.selectionEnd[0]||i[1]!==this._model.selectionEnd[1])&&this.refresh(!0)}_dragScroll(){if(!(!this._model.selectionEnd||!this._model.selectionStart)&&this._dragScrollAmount){this._onRequestScrollLines.fire({amount:this._dragScrollAmount,suppressScrollEvent:!1});let e=this._bufferService.buffer;this._dragScrollAmount>0?(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(e.ydisp+this._bufferService.rows,e.lines.length-1)):(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=e.ydisp),this.refresh()}}_handleMouseUp(e){let i=e.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&i<Xa&&e.altKey&&this._optionsService.rawOptions.altClickMovesCursor){if(this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp){let r=this._mouseService.getCoords(e,this._element,this._bufferService.cols,this._bufferService.rows,!1);if(r&&r[0]!==void 0&&r[1]!==void 0){let n=Jo(r[0]-1,r[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys);this._coreService.triggerDataEvent(n,!0)}}}else this._fireEventIfSelectionChanged()}_fireEventIfSelectionChanged(){let e=this._model.finalSelectionStart,i=this._model.finalSelectionEnd,r=!!e&&!!i&&(e[0]!==i[0]||e[1]!==i[1]);if(!r){this._oldHasSelection&&this._fireOnSelectionChange(e,i,r);return}!e||!i||(!this._oldSelectionStart||!this._oldSelectionEnd||e[0]!==this._oldSelectionStart[0]||e[1]!==this._oldSelectionStart[1]||i[0]!==this._oldSelectionEnd[0]||i[1]!==this._oldSelectionEnd[1])&&this._fireOnSelectionChange(e,i,r)}_fireOnSelectionChange(e,i,r){this._oldSelectionStart=e,this._oldSelectionEnd=i,this._oldHasSelection=r,this._onSelectionChange.fire()}_handleBufferActivate(e){this.clearSelection(),this._trimListener.dispose(),this._trimListener=e.activeBuffer.lines.onTrim(i=>this._handleTrim(i))}_convertViewportColToCharacterIndex(e,i){let r=i;for(let n=0;i>=n;n++){let o=e.loadCell(n,this._workCell).getChars().length;this._workCell.getWidth()===0?r--:o>1&&i!==n&&(r+=o-1)}return r}setSelection(e,i,r){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[e,i],this._model.selectionStartLength=r,this.refresh(),this._fireEventIfSelectionChanged()}rightClickSelect(e){this._isClickInSelection(e)||(this._selectWordAtCursor(e,!1)&&this.refresh(!0),this._fireEventIfSelectionChanged())}_getWordAt(e,i,r=!0,n=!0){if(e[0]>=this._bufferService.cols)return;let o=this._bufferService.buffer,l=o.lines.get(e[1]);if(!l)return;let a=o.translateBufferLineToString(e[1],!1),u=this._convertViewportColToCharacterIndex(l,e[0]),h=u,c=e[0]-u,d=0,_=0,p=0,m=0;if(a.charAt(u)===\" \"){for(;u>0&&a.charAt(u-1)===\" \";)u--;for(;h<a.length&&a.charAt(h+1)===\" \";)h++}else{let R=e[0],O=e[0];l.getWidth(R)===0&&(d++,R--),l.getWidth(O)===2&&(_++,O++);let I=l.getString(O).length;for(I>1&&(m+=I-1,h+=I-1);R>0&&u>0&&!this._isCharWordSeparator(l.loadCell(R-1,this._workCell));){l.loadCell(R-1,this._workCell);let k=this._workCell.getChars().length;this._workCell.getWidth()===0?(d++,R--):k>1&&(p+=k-1,u-=k-1),u--,R--}for(;O<l.length&&h+1<a.length&&!this._isCharWordSeparator(l.loadCell(O+1,this._workCell));){l.loadCell(O+1,this._workCell);let k=this._workCell.getChars().length;this._workCell.getWidth()===2?(_++,O++):k>1&&(m+=k-1,h+=k-1),h++,O++}}h++;let f=u+c-d+p,A=Math.min(this._bufferService.cols,h-u+d+_-p-m);if(!(!i&&a.slice(u,h).trim()===\"\")){if(r&&f===0&&l.getCodePoint(0)!==32){let R=o.lines.get(e[1]-1);if(R&&l.isWrapped&&R.getCodePoint(this._bufferService.cols-1)!==32){let O=this._getWordAt([this._bufferService.cols-1,e[1]-1],!1,!0,!1);if(O){let I=this._bufferService.cols-O.start;f-=I,A+=I}}}if(n&&f+A===this._bufferService.cols&&l.getCodePoint(this._bufferService.cols-1)!==32){let R=o.lines.get(e[1]+1);if(R?.isWrapped&&R.getCodePoint(0)!==32){let O=this._getWordAt([0,e[1]+1],!1,!1,!0);O&&(A+=O.length)}}return{start:f,length:A}}}_selectWordAt(e,i){let r=this._getWordAt(e,i);if(r){for(;r.start<0;)r.start+=this._bufferService.cols,e[1]--;this._model.selectionStart=[r.start,e[1]],this._model.selectionStartLength=r.length}}_selectToWordAt(e){let i=this._getWordAt(e,!0);if(i){let r=e[1];for(;i.start<0;)i.start+=this._bufferService.cols,r--;if(!this._model.areSelectionValuesReversed())for(;i.start+i.length>this._bufferService.cols;)i.length-=this._bufferService.cols,r++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?i.start:i.start+i.length,r]}}_isCharWordSeparator(e){return e.getWidth()===0?!1:this._optionsService.rawOptions.wordSeparator.indexOf(e.getChars())>=0}_selectLineAt(e){let i=this._bufferService.buffer.getWrappedRangeForLine(e),r={start:{x:0,y:i.first},end:{x:this._bufferService.cols-1,y:i.last}};this._model.selectionStart=[0,i.first],this._model.selectionEnd=void 0,this._model.selectionStartLength=ws(r,this._bufferService.cols)}};ei=M([S(3,F),S(4,ge),S(5,Dt),S(6,H),S(7,ce),S(8,ae)],ei);var Hi=class{constructor(){this._data={}}set(t,e,i){this._data[t]||(this._data[t]={}),this._data[t][e]=i}get(t,e){return this._data[t]?this._data[t][e]:void 0}clear(){this._data={}}};var Wi=class{constructor(){this._color=new Hi;this._css=new Hi}setCss(t,e,i){this._css.set(t,e,i)}getCss(t,e){return this._css.get(t,e)}setColor(t,e,i){this._color.set(t,e,i)}getColor(t,e){return this._color.get(t,e)}clear(){this._color.clear(),this._css.clear()}};var re=Object.freeze((()=>{let s=[z.toColor(\"#2e3436\"),z.toColor(\"#cc0000\"),z.toColor(\"#4e9a06\"),z.toColor(\"#c4a000\"),z.toColor(\"#3465a4\"),z.toColor(\"#75507b\"),z.toColor(\"#06989a\"),z.toColor(\"#d3d7cf\"),z.toColor(\"#555753\"),z.toColor(\"#ef2929\"),z.toColor(\"#8ae234\"),z.toColor(\"#fce94f\"),z.toColor(\"#729fcf\"),z.toColor(\"#ad7fa8\"),z.toColor(\"#34e2e2\"),z.toColor(\"#eeeeec\")],t=[0,95,135,175,215,255];for(let e=0;e<216;e++){let i=t[e/36%6|0],r=t[e/6%6|0],n=t[e%6];s.push({css:j.toCss(i,r,n),rgba:j.toRgba(i,r,n)})}for(let e=0;e<24;e++){let i=8+e*10;s.push({css:j.toCss(i,i,i),rgba:j.toRgba(i,i,i)})}return s})());var St=z.toColor(\"#ffffff\"),Ki=z.toColor(\"#000000\"),tl=z.toColor(\"#ffffff\"),il=Ki,Ui={css:\"rgba(255, 255, 255, 0.3)\",rgba:4294967117},Qa=St,ti=class extends D{constructor(e){super();this._optionsService=e;this._contrastCache=new Wi;this._halfContrastCache=new Wi;this._onChangeColors=this._register(new v);this.onChangeColors=this._onChangeColors.event;this._colors={foreground:St,background:Ki,cursor:tl,cursorAccent:il,selectionForeground:void 0,selectionBackgroundTransparent:Ui,selectionBackgroundOpaque:U.blend(Ki,Ui),selectionInactiveBackgroundTransparent:Ui,selectionInactiveBackgroundOpaque:U.blend(Ki,Ui),scrollbarSliderBackground:U.opacity(St,.2),scrollbarSliderHoverBackground:U.opacity(St,.4),scrollbarSliderActiveBackground:U.opacity(St,.5),overviewRulerBorder:St,ansi:re.slice(),contrastCache:this._contrastCache,halfContrastCache:this._halfContrastCache},this._updateRestoreColors(),this._setTheme(this._optionsService.rawOptions.theme),this._register(this._optionsService.onSpecificOptionChange(\"minimumContrastRatio\",()=>this._contrastCache.clear())),this._register(this._optionsService.onSpecificOptionChange(\"theme\",()=>this._setTheme(this._optionsService.rawOptions.theme)))}get colors(){return this._colors}_setTheme(e={}){let i=this._colors;if(i.foreground=K(e.foreground,St),i.background=K(e.background,Ki),i.cursor=U.blend(i.background,K(e.cursor,tl)),i.cursorAccent=U.blend(i.background,K(e.cursorAccent,il)),i.selectionBackgroundTransparent=K(e.selectionBackground,Ui),i.selectionBackgroundOpaque=U.blend(i.background,i.selectionBackgroundTransparent),i.selectionInactiveBackgroundTransparent=K(e.selectionInactiveBackground,i.selectionBackgroundTransparent),i.selectionInactiveBackgroundOpaque=U.blend(i.background,i.selectionInactiveBackgroundTransparent),i.selectionForeground=e.selectionForeground?K(e.selectionForeground,ps):void 0,i.selectionForeground===ps&&(i.selectionForeground=void 0),U.isOpaque(i.selectionBackgroundTransparent)&&(i.selectionBackgroundTransparent=U.opacity(i.selectionBackgroundTransparent,.3)),U.isOpaque(i.selectionInactiveBackgroundTransparent)&&(i.selectionInactiveBackgroundTransparent=U.opacity(i.selectionInactiveBackgroundTransparent,.3)),i.scrollbarSliderBackground=K(e.scrollbarSliderBackground,U.opacity(i.foreground,.2)),i.scrollbarSliderHoverBackground=K(e.scrollbarSliderHoverBackground,U.opacity(i.foreground,.4)),i.scrollbarSliderActiveBackground=K(e.scrollbarSliderActiveBackground,U.opacity(i.foreground,.5)),i.overviewRulerBorder=K(e.overviewRulerBorder,Qa),i.ansi=re.slice(),i.ansi[0]=K(e.black,re[0]),i.ansi[1]=K(e.red,re[1]),i.ansi[2]=K(e.green,re[2]),i.ansi[3]=K(e.yellow,re[3]),i.ansi[4]=K(e.blue,re[4]),i.ansi[5]=K(e.magenta,re[5]),i.ansi[6]=K(e.cyan,re[6]),i.ansi[7]=K(e.white,re[7]),i.ansi[8]=K(e.brightBlack,re[8]),i.ansi[9]=K(e.brightRed,re[9]),i.ansi[10]=K(e.brightGreen,re[10]),i.ansi[11]=K(e.brightYellow,re[11]),i.ansi[12]=K(e.brightBlue,re[12]),i.ansi[13]=K(e.brightMagenta,re[13]),i.ansi[14]=K(e.brightCyan,re[14]),i.ansi[15]=K(e.brightWhite,re[15]),e.extendedAnsi){let r=Math.min(i.ansi.length-16,e.extendedAnsi.length);for(let n=0;n<r;n++)i.ansi[n+16]=K(e.extendedAnsi[n],re[n+16])}this._contrastCache.clear(),this._halfContrastCache.clear(),this._updateRestoreColors(),this._onChangeColors.fire(this.colors)}restoreColor(e){this._restoreColor(e),this._onChangeColors.fire(this.colors)}_restoreColor(e){if(e===void 0){for(let i=0;i<this._restoreColors.ansi.length;++i)this._colors.ansi[i]=this._restoreColors.ansi[i];return}switch(e){case 256:this._colors.foreground=this._restoreColors.foreground;break;case 257:this._colors.background=this._restoreColors.background;break;case 258:this._colors.cursor=this._restoreColors.cursor;break;default:this._colors.ansi[e]=this._restoreColors.ansi[e]}}modifyColors(e){e(this._colors),this._onChangeColors.fire(this.colors)}_updateRestoreColors(){this._restoreColors={foreground:this._colors.foreground,background:this._colors.background,cursor:this._colors.cursor,ansi:this._colors.ansi.slice()}}};ti=M([S(0,H)],ti);function K(s,t){if(s!==void 0)try{return z.toColor(s)}catch{}return t}var Rs=class{constructor(...t){this._entries=new Map;for(let[e,i]of t)this.set(e,i)}set(t,e){let i=this._entries.get(t);return this._entries.set(t,e),i}forEach(t){for(let[e,i]of this._entries.entries())t(e,i)}has(t){return this._entries.has(t)}get(t){return this._entries.get(t)}},ln=class{constructor(){this._services=new Rs;this._services.set(xt,this)}setService(t,e){this._services.set(t,e)}getService(t){return this._services.get(t)}createInstance(t,...e){let i=Xs(t).sort((o,l)=>o.index-l.index),r=[];for(let o of i){let l=this._services.get(o.id);if(!l)throw new Error(`[createInstance] ${t.name} depends on UNKNOWN service ${o.id._id}.`);r.push(l)}let n=i.length>0?i[0].index:e.length;if(e.length!==n)throw new Error(`[createInstance] First service dependency of ${t.name} at position ${n+1} conflicts with ${e.length} static arguments`);return new t(...e,...r)}};var ec={trace:0,debug:1,info:2,warn:3,error:4,off:5},tc=\"xterm.js: \",ii=class extends D{constructor(e){super();this._optionsService=e;this._logLevel=5;this._updateLogLevel(),this._register(this._optionsService.onSpecificOptionChange(\"logLevel\",()=>this._updateLogLevel())),ic=this}get logLevel(){return this._logLevel}_updateLogLevel(){this._logLevel=ec[this._optionsService.rawOptions.logLevel]}_evalLazyOptionalParams(e){for(let i=0;i<e.length;i++)typeof e[i]==\"function\"&&(e[i]=e[i]())}_log(e,i,r){this._evalLazyOptionalParams(r),e.call(console,(this._optionsService.options.logger?\"\":tc)+i,...r)}trace(e,...i){this._logLevel<=0&&this._log(this._optionsService.options.logger?.trace.bind(this._optionsService.options.logger)??console.log,e,i)}debug(e,...i){this._logLevel<=1&&this._log(this._optionsService.options.logger?.debug.bind(this._optionsService.options.logger)??console.log,e,i)}info(e,...i){this._logLevel<=2&&this._log(this._optionsService.options.logger?.info.bind(this._optionsService.options.logger)??console.info,e,i)}warn(e,...i){this._logLevel<=3&&this._log(this._optionsService.options.logger?.warn.bind(this._optionsService.options.logger)??console.warn,e,i)}error(e,...i){this._logLevel<=4&&this._log(this._optionsService.options.logger?.error.bind(this._optionsService.options.logger)??console.error,e,i)}};ii=M([S(0,H)],ii);var ic;var zi=class extends D{constructor(e){super();this._maxLength=e;this.onDeleteEmitter=this._register(new v);this.onDelete=this.onDeleteEmitter.event;this.onInsertEmitter=this._register(new v);this.onInsert=this.onInsertEmitter.event;this.onTrimEmitter=this._register(new v);this.onTrim=this.onTrimEmitter.event;this._array=new Array(this._maxLength),this._startIndex=0,this._length=0}get maxLength(){return this._maxLength}set maxLength(e){if(this._maxLength===e)return;let i=new Array(e);for(let r=0;r<Math.min(e,this.length);r++)i[r]=this._array[this._getCyclicIndex(r)];this._array=i,this._maxLength=e,this._startIndex=0}get length(){return this._length}set length(e){if(e>this._length)for(let i=this._length;i<e;i++)this._array[i]=void 0;this._length=e}get(e){return this._array[this._getCyclicIndex(e)]}set(e,i){this._array[this._getCyclicIndex(e)]=i}push(e){this._array[this._getCyclicIndex(this._length)]=e,this._length===this._maxLength?(this._startIndex=++this._startIndex%this._maxLength,this.onTrimEmitter.fire(1)):this._length++}recycle(){if(this._length!==this._maxLength)throw new Error(\"Can only recycle when the buffer is full\");return this._startIndex=++this._startIndex%this._maxLength,this.onTrimEmitter.fire(1),this._array[this._getCyclicIndex(this._length-1)]}get isFull(){return this._length===this._maxLength}pop(){return this._array[this._getCyclicIndex(this._length---1)]}splice(e,i,...r){if(i){for(let n=e;n<this._length-i;n++)this._array[this._getCyclicIndex(n)]=this._array[this._getCyclicIndex(n+i)];this._length-=i,this.onDeleteEmitter.fire({index:e,amount:i})}for(let n=this._length-1;n>=e;n--)this._array[this._getCyclicIndex(n+r.length)]=this._array[this._getCyclicIndex(n)];for(let n=0;n<r.length;n++)this._array[this._getCyclicIndex(e+n)]=r[n];if(r.length&&this.onInsertEmitter.fire({index:e,amount:r.length}),this._length+r.length>this._maxLength){let n=this._length+r.length-this._maxLength;this._startIndex+=n,this._length=this._maxLength,this.onTrimEmitter.fire(n)}else this._length+=r.length}trimStart(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)}shiftElements(e,i,r){if(!(i<=0)){if(e<0||e>=this._length)throw new Error(\"start argument out of range\");if(e+r<0)throw new Error(\"Cannot shift elements in list beyond index 0\");if(r>0){for(let o=i-1;o>=0;o--)this.set(e+o+r,this.get(e+o));let n=e+i+r-this._length;if(n>0)for(this._length+=n;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let n=0;n<i;n++)this.set(e+n+r,this.get(e+n))}}_getCyclicIndex(e){return(this._startIndex+e)%this._maxLength}};var B=3;var X=Object.freeze(new De),an=0,Ls=2,Ze=class s{constructor(t,e,i=!1){this.isWrapped=i;this._combined={};this._extendedAttrs={};this._data=new Uint32Array(t*B);let r=e||q.fromCharData([0,ir,1,0]);for(let n=0;n<t;++n)this.setCell(n,r);this.length=t}get(t){let e=this._data[t*B+0],i=e&2097151;return[this._data[t*B+1],e&2097152?this._combined[t]:i?Ce(i):\"\",e>>22,e&2097152?this._combined[t].charCodeAt(this._combined[t].length-1):i]}set(t,e){this._data[t*B+1]=e[0],e[1].length>1?(this._combined[t]=e[1],this._data[t*B+0]=t|2097152|e[2]<<22):this._data[t*B+0]=e[1].charCodeAt(0)|e[2]<<22}getWidth(t){return this._data[t*B+0]>>22}hasWidth(t){return this._data[t*B+0]&12582912}getFg(t){return this._data[t*B+1]}getBg(t){return this._data[t*B+2]}hasContent(t){return this._data[t*B+0]&4194303}getCodePoint(t){let e=this._data[t*B+0];return e&2097152?this._combined[t].charCodeAt(this._combined[t].length-1):e&2097151}isCombined(t){return this._data[t*B+0]&2097152}getString(t){let e=this._data[t*B+0];return e&2097152?this._combined[t]:e&2097151?Ce(e&2097151):\"\"}isProtected(t){return this._data[t*B+2]&536870912}loadCell(t,e){return an=t*B,e.content=this._data[an+0],e.fg=this._data[an+1],e.bg=this._data[an+2],e.content&2097152&&(e.combinedData=this._combined[t]),e.bg&268435456&&(e.extended=this._extendedAttrs[t]),e}setCell(t,e){e.content&2097152&&(this._combined[t]=e.combinedData),e.bg&268435456&&(this._extendedAttrs[t]=e.extended),this._data[t*B+0]=e.content,this._data[t*B+1]=e.fg,this._data[t*B+2]=e.bg}setCellFromCodepoint(t,e,i,r){r.bg&268435456&&(this._extendedAttrs[t]=r.extended),this._data[t*B+0]=e|i<<22,this._data[t*B+1]=r.fg,this._data[t*B+2]=r.bg}addCodepointToCell(t,e,i){let r=this._data[t*B+0];r&2097152?this._combined[t]+=Ce(e):r&2097151?(this._combined[t]=Ce(r&2097151)+Ce(e),r&=-2097152,r|=2097152):r=e|1<<22,i&&(r&=-12582913,r|=i<<22),this._data[t*B+0]=r}insertCells(t,e,i){if(t%=this.length,t&&this.getWidth(t-1)===2&&this.setCellFromCodepoint(t-1,0,1,i),e<this.length-t){let r=new q;for(let n=this.length-t-e-1;n>=0;--n)this.setCell(t+e+n,this.loadCell(t+n,r));for(let n=0;n<e;++n)this.setCell(t+n,i)}else for(let r=t;r<this.length;++r)this.setCell(r,i);this.getWidth(this.length-1)===2&&this.setCellFromCodepoint(this.length-1,0,1,i)}deleteCells(t,e,i){if(t%=this.length,e<this.length-t){let r=new q;for(let n=0;n<this.length-t-e;++n)this.setCell(t+n,this.loadCell(t+e+n,r));for(let n=this.length-e;n<this.length;++n)this.setCell(n,i)}else for(let r=t;r<this.length;++r)this.setCell(r,i);t&&this.getWidth(t-1)===2&&this.setCellFromCodepoint(t-1,0,1,i),this.getWidth(t)===0&&!this.hasContent(t)&&this.setCellFromCodepoint(t,0,1,i)}replaceCells(t,e,i,r=!1){if(r){for(t&&this.getWidth(t-1)===2&&!this.isProtected(t-1)&&this.setCellFromCodepoint(t-1,0,1,i),e<this.length&&this.getWidth(e-1)===2&&!this.isProtected(e)&&this.setCellFromCodepoint(e,0,1,i);t<e&&t<this.length;)this.isProtected(t)||this.setCell(t,i),t++;return}for(t&&this.getWidth(t-1)===2&&this.setCellFromCodepoint(t-1,0,1,i),e<this.length&&this.getWidth(e-1)===2&&this.setCellFromCodepoint(e,0,1,i);t<e&&t<this.length;)this.setCell(t++,i)}resize(t,e){if(t===this.length)return this._data.length*4*Ls<this._data.buffer.byteLength;let i=t*B;if(t>this.length){if(this._data.buffer.byteLength>=i*4)this._data=new Uint32Array(this._data.buffer,0,i);else{let r=new Uint32Array(i);r.set(this._data),this._data=r}for(let r=this.length;r<t;++r)this.setCell(r,e)}else{this._data=this._data.subarray(0,i);let r=Object.keys(this._combined);for(let o=0;o<r.length;o++){let l=parseInt(r[o],10);l>=t&&delete this._combined[l]}let n=Object.keys(this._extendedAttrs);for(let o=0;o<n.length;o++){let l=parseInt(n[o],10);l>=t&&delete this._extendedAttrs[l]}}return this.length=t,i*4*Ls<this._data.buffer.byteLength}cleanupMemory(){if(this._data.length*4*Ls<this._data.buffer.byteLength){let t=new Uint32Array(this._data.length);return t.set(this._data),this._data=t,1}return 0}fill(t,e=!1){if(e){for(let i=0;i<this.length;++i)this.isProtected(i)||this.setCell(i,t);return}this._combined={},this._extendedAttrs={};for(let i=0;i<this.length;++i)this.setCell(i,t)}copyFrom(t){this.length!==t.length?this._data=new Uint32Array(t._data):this._data.set(t._data),this.length=t.length,this._combined={};for(let e in t._combined)this._combined[e]=t._combined[e];this._extendedAttrs={};for(let e in t._extendedAttrs)this._extendedAttrs[e]=t._extendedAttrs[e];this.isWrapped=t.isWrapped}clone(){let t=new s(0);t._data=new Uint32Array(this._data),t.length=this.length;for(let e in this._combined)t._combined[e]=this._combined[e];for(let e in this._extendedAttrs)t._extendedAttrs[e]=this._extendedAttrs[e];return t.isWrapped=this.isWrapped,t}getTrimmedLength(){for(let t=this.length-1;t>=0;--t)if(this._data[t*B+0]&4194303)return t+(this._data[t*B+0]>>22);return 0}getNoBgTrimmedLength(){for(let t=this.length-1;t>=0;--t)if(this._data[t*B+0]&4194303||this._data[t*B+2]&50331648)return t+(this._data[t*B+0]>>22);return 0}copyCellsFrom(t,e,i,r,n){let o=t._data;if(n)for(let a=r-1;a>=0;a--){for(let u=0;u<B;u++)this._data[(i+a)*B+u]=o[(e+a)*B+u];o[(e+a)*B+2]&268435456&&(this._extendedAttrs[i+a]=t._extendedAttrs[e+a])}else for(let a=0;a<r;a++){for(let u=0;u<B;u++)this._data[(i+a)*B+u]=o[(e+a)*B+u];o[(e+a)*B+2]&268435456&&(this._extendedAttrs[i+a]=t._extendedAttrs[e+a])}let l=Object.keys(t._combined);for(let a=0;a<l.length;a++){let u=parseInt(l[a],10);u>=e&&(this._combined[u-e+i]=t._combined[u])}}translateToString(t,e,i,r){e=e??0,i=i??this.length,t&&(i=Math.min(i,this.getTrimmedLength())),r&&(r.length=0);let n=\"\";for(;e<i;){let o=this._data[e*B+0],l=o&2097151,a=o&2097152?this._combined[e]:l?Ce(l):we;if(n+=a,r)for(let u=0;u<a.length;++u)r.push(e);e+=o>>22||1}return r&&r.push(e),n}};function sl(s,t,e,i,r,n){let o=[];for(let l=0;l<s.length-1;l++){let a=l,u=s.get(++a);if(!u.isWrapped)continue;let h=[s.get(l)];for(;a<s.length&&u.isWrapped;)h.push(u),u=s.get(++a);if(!n&&i>=l&&i<a){l+=h.length-1;continue}let c=0,d=ri(h,c,t),_=1,p=0;for(;_<h.length;){let f=ri(h,_,t),A=f-p,R=e-d,O=Math.min(A,R);h[c].copyCellsFrom(h[_],p,d,O,!1),d+=O,d===e&&(c++,d=0),p+=O,p===f&&(_++,p=0),d===0&&c!==0&&h[c-1].getWidth(e-1)===2&&(h[c].copyCellsFrom(h[c-1],e-1,d++,1,!1),h[c-1].setCell(e-1,r))}h[c].replaceCells(d,e,r);let m=0;for(let f=h.length-1;f>0&&(f>c||h[f].getTrimmedLength()===0);f--)m++;m>0&&(o.push(l+h.length-m),o.push(m)),l+=h.length-1}return o}function ol(s,t){let e=[],i=0,r=t[i],n=0;for(let o=0;o<s.length;o++)if(r===o){let l=t[++i];s.onDeleteEmitter.fire({index:o-n,amount:l}),o+=l-1,n+=l,r=t[++i]}else e.push(o);return{layout:e,countRemoved:n}}function ll(s,t){let e=[];for(let i=0;i<t.length;i++)e.push(s.get(t[i]));for(let i=0;i<e.length;i++)s.set(i,e[i]);s.length=t.length}function al(s,t,e){let i=[],r=s.map((a,u)=>ri(s,u,t)).reduce((a,u)=>a+u),n=0,o=0,l=0;for(;l<r;){if(r-l<e){i.push(r-l);break}n+=e;let a=ri(s,o,t);n>a&&(n-=a,o++);let u=s[o].getWidth(n-1)===2;u&&n--;let h=u?e-1:e;i.push(h),l+=h}return i}function ri(s,t,e){if(t===s.length-1)return s[t].getTrimmedLength();let i=!s[t].hasContent(e-1)&&s[t].getWidth(e-1)===1,r=s[t+1].getWidth(0)===2;return i&&r?e-1:e}var un=class un{constructor(t){this.line=t;this.isDisposed=!1;this._disposables=[];this._id=un._nextId++;this._onDispose=this.register(new v);this.onDispose=this._onDispose.event}get id(){return this._id}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),Ne(this._disposables),this._disposables.length=0)}register(t){return this._disposables.push(t),t}};un._nextId=1;var cn=un;var ne={},Je=ne.B;ne[0]={\"`\":\"\\u25C6\",a:\"\\u2592\",b:\"\\u2409\",c:\"\\u240C\",d:\"\\u240D\",e:\"\\u240A\",f:\"\\xB0\",g:\"\\xB1\",h:\"\\u2424\",i:\"\\u240B\",j:\"\\u2518\",k:\"\\u2510\",l:\"\\u250C\",m:\"\\u2514\",n:\"\\u253C\",o:\"\\u23BA\",p:\"\\u23BB\",q:\"\\u2500\",r:\"\\u23BC\",s:\"\\u23BD\",t:\"\\u251C\",u:\"\\u2524\",v:\"\\u2534\",w:\"\\u252C\",x:\"\\u2502\",y:\"\\u2264\",z:\"\\u2265\",\"{\":\"\\u03C0\",\"|\":\"\\u2260\",\"}\":\"\\xA3\",\"~\":\"\\xB7\"};ne.A={\"#\":\"\\xA3\"};ne.B=void 0;ne[4]={\"#\":\"\\xA3\",\"@\":\"\\xBE\",\"[\":\"ij\",\"\\\\\":\"\\xBD\",\"]\":\"|\",\"{\":\"\\xA8\",\"|\":\"f\",\"}\":\"\\xBC\",\"~\":\"\\xB4\"};ne.C=ne[5]={\"[\":\"\\xC4\",\"\\\\\":\"\\xD6\",\"]\":\"\\xC5\",\"^\":\"\\xDC\",\"`\":\"\\xE9\",\"{\":\"\\xE4\",\"|\":\"\\xF6\",\"}\":\"\\xE5\",\"~\":\"\\xFC\"};ne.R={\"#\":\"\\xA3\",\"@\":\"\\xE0\",\"[\":\"\\xB0\",\"\\\\\":\"\\xE7\",\"]\":\"\\xA7\",\"{\":\"\\xE9\",\"|\":\"\\xF9\",\"}\":\"\\xE8\",\"~\":\"\\xA8\"};ne.Q={\"@\":\"\\xE0\",\"[\":\"\\xE2\",\"\\\\\":\"\\xE7\",\"]\":\"\\xEA\",\"^\":\"\\xEE\",\"`\":\"\\xF4\",\"{\":\"\\xE9\",\"|\":\"\\xF9\",\"}\":\"\\xE8\",\"~\":\"\\xFB\"};ne.K={\"@\":\"\\xA7\",\"[\":\"\\xC4\",\"\\\\\":\"\\xD6\",\"]\":\"\\xDC\",\"{\":\"\\xE4\",\"|\":\"\\xF6\",\"}\":\"\\xFC\",\"~\":\"\\xDF\"};ne.Y={\"#\":\"\\xA3\",\"@\":\"\\xA7\",\"[\":\"\\xB0\",\"\\\\\":\"\\xE7\",\"]\":\"\\xE9\",\"`\":\"\\xF9\",\"{\":\"\\xE0\",\"|\":\"\\xF2\",\"}\":\"\\xE8\",\"~\":\"\\xEC\"};ne.E=ne[6]={\"@\":\"\\xC4\",\"[\":\"\\xC6\",\"\\\\\":\"\\xD8\",\"]\":\"\\xC5\",\"^\":\"\\xDC\",\"`\":\"\\xE4\",\"{\":\"\\xE6\",\"|\":\"\\xF8\",\"}\":\"\\xE5\",\"~\":\"\\xFC\"};ne.Z={\"#\":\"\\xA3\",\"@\":\"\\xA7\",\"[\":\"\\xA1\",\"\\\\\":\"\\xD1\",\"]\":\"\\xBF\",\"{\":\"\\xB0\",\"|\":\"\\xF1\",\"}\":\"\\xE7\"};ne.H=ne[7]={\"@\":\"\\xC9\",\"[\":\"\\xC4\",\"\\\\\":\"\\xD6\",\"]\":\"\\xC5\",\"^\":\"\\xDC\",\"`\":\"\\xE9\",\"{\":\"\\xE4\",\"|\":\"\\xF6\",\"}\":\"\\xE5\",\"~\":\"\\xFC\"};ne[\"=\"]={\"#\":\"\\xF9\",\"@\":\"\\xE0\",\"[\":\"\\xE9\",\"\\\\\":\"\\xE7\",\"]\":\"\\xEA\",\"^\":\"\\xEE\",_:\"\\xE8\",\"`\":\"\\xF4\",\"{\":\"\\xE4\",\"|\":\"\\xF6\",\"}\":\"\\xFC\",\"~\":\"\\xFB\"};var cl=4294967295,$i=class{constructor(t,e,i){this._hasScrollback=t;this._optionsService=e;this._bufferService=i;this.ydisp=0;this.ybase=0;this.y=0;this.x=0;this.tabs={};this.savedY=0;this.savedX=0;this.savedCurAttrData=X.clone();this.savedCharset=Je;this.markers=[];this._nullCell=q.fromCharData([0,ir,1,0]);this._whitespaceCell=q.fromCharData([0,we,1,32]);this._isClearing=!1;this._memoryCleanupQueue=new Jt;this._memoryCleanupPosition=0;this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new zi(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}getNullCell(t){return t?(this._nullCell.fg=t.fg,this._nullCell.bg=t.bg,this._nullCell.extended=t.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new rt),this._nullCell}getWhitespaceCell(t){return t?(this._whitespaceCell.fg=t.fg,this._whitespaceCell.bg=t.bg,this._whitespaceCell.extended=t.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new rt),this._whitespaceCell}getBlankLine(t,e){return new Ze(this._bufferService.cols,this.getNullCell(t),e)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){let e=this.ybase+this.y-this.ydisp;return e>=0&&e<this._rows}_getCorrectBufferLength(t){if(!this._hasScrollback)return t;let e=t+this._optionsService.rawOptions.scrollback;return e>cl?cl:e}fillViewportRows(t){if(this.lines.length===0){t===void 0&&(t=X);let e=this._rows;for(;e--;)this.lines.push(this.getBlankLine(t))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new zi(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(t,e){let i=this.getNullCell(X),r=0,n=this._getCorrectBufferLength(e);if(n>this.lines.maxLength&&(this.lines.maxLength=n),this.lines.length>0){if(this._cols<t)for(let l=0;l<this.lines.length;l++)r+=+this.lines.get(l).resize(t,i);let o=0;if(this._rows<e)for(let l=this._rows;l<e;l++)this.lines.length<e+this.ybase&&(this._optionsService.rawOptions.windowsMode||this._optionsService.rawOptions.windowsPty.backend!==void 0||this._optionsService.rawOptions.windowsPty.buildNumber!==void 0?this.lines.push(new Ze(t,i)):this.ybase>0&&this.lines.length<=this.ybase+this.y+o+1?(this.ybase--,o++,this.ydisp>0&&this.ydisp--):this.lines.push(new Ze(t,i)));else for(let l=this._rows;l>e;l--)this.lines.length>e+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(n<this.lines.maxLength){let l=this.lines.length-n;l>0&&(this.lines.trimStart(l),this.ybase=Math.max(this.ybase-l,0),this.ydisp=Math.max(this.ydisp-l,0),this.savedY=Math.max(this.savedY-l,0)),this.lines.maxLength=n}this.x=Math.min(this.x,t-1),this.y=Math.min(this.y,e-1),o&&(this.y+=o),this.savedX=Math.min(this.savedX,t-1),this.scrollTop=0}if(this.scrollBottom=e-1,this._isReflowEnabled&&(this._reflow(t,e),this._cols>t))for(let o=0;o<this.lines.length;o++)r+=+this.lines.get(o).resize(t,i);this._cols=t,this._rows=e,this._memoryCleanupQueue.clear(),r>.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue(()=>this._batchedMemoryCleanup()))}_batchedMemoryCleanup(){let t=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,t=!1);let e=0;for(;this._memoryCleanupPosition<this.lines.length;)if(e+=this.lines.get(this._memoryCleanupPosition++).cleanupMemory(),e>100)return!0;return t}get _isReflowEnabled(){let t=this._optionsService.rawOptions.windowsPty;return t&&t.buildNumber?this._hasScrollback&&t.backend===\"conpty\"&&t.buildNumber>=21376:this._hasScrollback&&!this._optionsService.rawOptions.windowsMode}_reflow(t,e){this._cols!==t&&(t>this._cols?this._reflowLarger(t,e):this._reflowSmaller(t,e))}_reflowLarger(t,e){let i=this._optionsService.rawOptions.reflowCursorLine,r=sl(this.lines,this._cols,t,this.ybase+this.y,this.getNullCell(X),i);if(r.length>0){let n=ol(this.lines,r);ll(this.lines,n.layout),this._reflowLargerAdjustViewport(t,e,n.countRemoved)}}_reflowLargerAdjustViewport(t,e,i){let r=this.getNullCell(X),n=i;for(;n-- >0;)this.ybase===0?(this.y>0&&this.y--,this.lines.length<e&&this.lines.push(new Ze(t,r))):(this.ydisp===this.ybase&&this.ydisp--,this.ybase--);this.savedY=Math.max(this.savedY-i,0)}_reflowSmaller(t,e){let i=this._optionsService.rawOptions.reflowCursorLine,r=this.getNullCell(X),n=[],o=0;for(let l=this.lines.length-1;l>=0;l--){let a=this.lines.get(l);if(!a||!a.isWrapped&&a.getTrimmedLength()<=t)continue;let u=[a];for(;a.isWrapped&&l>0;)a=this.lines.get(--l),u.unshift(a);if(!i){let I=this.ybase+this.y;if(I>=l&&I<l+u.length)continue}let h=u[u.length-1].getTrimmedLength(),c=al(u,this._cols,t),d=c.length-u.length,_;this.ybase===0&&this.y!==this.lines.length-1?_=Math.max(0,this.y-this.lines.maxLength+d):_=Math.max(0,this.lines.length-this.lines.maxLength+d);let p=[];for(let I=0;I<d;I++){let k=this.getBlankLine(X,!0);p.push(k)}p.length>0&&(n.push({start:l+u.length+o,newLines:p}),o+=p.length),u.push(...p);let m=c.length-1,f=c[m];f===0&&(m--,f=c[m]);let A=u.length-d-1,R=h;for(;A>=0;){let I=Math.min(R,f);if(u[m]===void 0)break;if(u[m].copyCellsFrom(u[A],R-I,f-I,I,!0),f-=I,f===0&&(m--,f=c[m]),R-=I,R===0){A--;let k=Math.max(A,0);R=ri(u,k,this._cols)}}for(let I=0;I<u.length;I++)c[I]<t&&u[I].setCell(c[I],r);let O=d-_;for(;O-- >0;)this.ybase===0?this.y<e-1?(this.y++,this.lines.pop()):(this.ybase++,this.ydisp++):this.ybase<Math.min(this.lines.maxLength,this.lines.length+o)-e&&(this.ybase===this.ydisp&&this.ydisp++,this.ybase++);this.savedY=Math.min(this.savedY+d,this.ybase+e-1)}if(n.length>0){let l=[],a=[];for(let f=0;f<this.lines.length;f++)a.push(this.lines.get(f));let u=this.lines.length,h=u-1,c=0,d=n[c];this.lines.length=Math.min(this.lines.maxLength,this.lines.length+o);let _=0;for(let f=Math.min(this.lines.maxLength-1,u+o-1);f>=0;f--)if(d&&d.start>h+_){for(let A=d.newLines.length-1;A>=0;A--)this.lines.set(f--,d.newLines[A]);f++,l.push({index:h+1,amount:d.newLines.length}),_+=d.newLines.length,d=n[++c]}else this.lines.set(f,a[h--]);let p=0;for(let f=l.length-1;f>=0;f--)l[f].index+=p,this.lines.onInsertEmitter.fire(l[f]),p+=l[f].amount;let m=Math.max(0,u+o-this.lines.maxLength);m>0&&this.lines.onTrimEmitter.fire(m)}}translateBufferLineToString(t,e,i=0,r){let n=this.lines.get(t);return n?n.translateToString(e,i,r):\"\"}getWrappedRangeForLine(t){let e=t,i=t;for(;e>0&&this.lines.get(e).isWrapped;)e--;for(;i+1<this.lines.length&&this.lines.get(i+1).isWrapped;)i++;return{first:e,last:i}}setupTabStops(t){for(t!=null?this.tabs[t]||(t=this.prevStop(t)):(this.tabs={},t=0);t<this._cols;t+=this._optionsService.rawOptions.tabStopWidth)this.tabs[t]=!0}prevStop(t){for(t==null&&(t=this.x);!this.tabs[--t]&&t>0;);return t>=this._cols?this._cols-1:t<0?0:t}nextStop(t){for(t==null&&(t=this.x);!this.tabs[++t]&&t<this._cols;);return t>=this._cols?this._cols-1:t<0?0:t}clearMarkers(t){this._isClearing=!0;for(let e=0;e<this.markers.length;e++)this.markers[e].line===t&&(this.markers[e].dispose(),this.markers.splice(e--,1));this._isClearing=!1}clearAllMarkers(){this._isClearing=!0;for(let t=0;t<this.markers.length;t++)this.markers[t].dispose();this.markers.length=0,this._isClearing=!1}addMarker(t){let e=new cn(t);return this.markers.push(e),e.register(this.lines.onTrim(i=>{e.line-=i,e.line<0&&e.dispose()})),e.register(this.lines.onInsert(i=>{e.line>=i.index&&(e.line+=i.amount)})),e.register(this.lines.onDelete(i=>{e.line>=i.index&&e.line<i.index+i.amount&&e.dispose(),e.line>i.index&&(e.line-=i.amount)})),e.register(e.onDispose(()=>this._removeMarker(e))),e}_removeMarker(t){this._isClearing||this.markers.splice(this.markers.indexOf(t),1)}};var hn=class extends D{constructor(e,i){super();this._optionsService=e;this._bufferService=i;this._onBufferActivate=this._register(new v);this.onBufferActivate=this._onBufferActivate.event;this.reset(),this._register(this._optionsService.onSpecificOptionChange(\"scrollback\",()=>this.resize(this._bufferService.cols,this._bufferService.rows))),this._register(this._optionsService.onSpecificOptionChange(\"tabStopWidth\",()=>this.setupTabStops()))}reset(){this._normal=new $i(!0,this._optionsService,this._bufferService),this._normal.fillViewportRows(),this._alt=new $i(!1,this._optionsService,this._bufferService),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()}get alt(){return this._alt}get active(){return this._activeBuffer}get normal(){return this._normal}activateNormalBuffer(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clearAllMarkers(),this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))}activateAltBuffer(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))}resize(e,i){this._normal.resize(e,i),this._alt.resize(e,i),this.setupTabStops(e)}setupTabStops(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)}};var ks=2,Cs=1,ni=class extends D{constructor(e){super();this.isUserScrolling=!1;this._onResize=this._register(new v);this.onResize=this._onResize.event;this._onScroll=this._register(new v);this.onScroll=this._onScroll.event;this.cols=Math.max(e.rawOptions.cols||0,ks),this.rows=Math.max(e.rawOptions.rows||0,Cs),this.buffers=this._register(new hn(e,this)),this._register(this.buffers.onBufferActivate(i=>{this._onScroll.fire(i.activeBuffer.ydisp)}))}get buffer(){return this.buffers.active}resize(e,i){let r=this.cols!==e,n=this.rows!==i;this.cols=e,this.rows=i,this.buffers.resize(e,i),this._onResize.fire({cols:e,rows:i,colsChanged:r,rowsChanged:n})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(e,i=!1){let r=this.buffer,n;n=this._cachedBlankLine,(!n||n.length!==this.cols||n.getFg(0)!==e.fg||n.getBg(0)!==e.bg)&&(n=r.getBlankLine(e,i),this._cachedBlankLine=n),n.isWrapped=i;let o=r.ybase+r.scrollTop,l=r.ybase+r.scrollBottom;if(r.scrollTop===0){let a=r.lines.isFull;l===r.lines.length-1?a?r.lines.recycle().copyFrom(n):r.lines.push(n.clone()):r.lines.splice(l+1,0,n.clone()),a?this.isUserScrolling&&(r.ydisp=Math.max(r.ydisp-1,0)):(r.ybase++,this.isUserScrolling||r.ydisp++)}else{let a=l-o+1;r.lines.shiftElements(o+1,a-1,-1),r.lines.set(l,n.clone())}this.isUserScrolling||(r.ydisp=r.ybase),this._onScroll.fire(r.ydisp)}scrollLines(e,i){let r=this.buffer;if(e<0){if(r.ydisp===0)return;this.isUserScrolling=!0}else e+r.ydisp>=r.ybase&&(this.isUserScrolling=!1);let n=r.ydisp;r.ydisp=Math.max(Math.min(r.ydisp+e,r.ybase),0),n!==r.ydisp&&(i||this._onScroll.fire(r.ydisp))}};ni=M([S(0,H)],ni);var si={cols:80,rows:24,cursorBlink:!1,cursorStyle:\"block\",cursorWidth:1,cursorInactiveStyle:\"outline\",customGlyphs:!0,drawBoldTextInBrightColors:!0,documentOverride:null,fastScrollModifier:\"alt\",fastScrollSensitivity:5,fontFamily:\"monospace\",fontSize:15,fontWeight:\"normal\",fontWeightBold:\"bold\",ignoreBracketedPasteMode:!1,lineHeight:1,letterSpacing:0,linkHandler:null,logLevel:\"info\",logger:null,scrollback:1e3,scrollOnEraseInDisplay:!1,scrollOnUserInput:!0,scrollSensitivity:1,screenReaderMode:!1,smoothScrollDuration:0,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,disableStdin:!1,allowProposedApi:!1,allowTransparency:!1,tabStopWidth:8,theme:{},reflowCursorLine:!1,rescaleOverlappingGlyphs:!1,rightClickSelectsWord:Zt,windowOptions:{},windowsMode:!1,windowsPty:{},wordSeparator:\" ()[]{}',\\\"`\",altClickMovesCursor:!0,convertEol:!1,termName:\"xterm\",cancelEvents:!1,overviewRuler:{}},nc=[\"normal\",\"bold\",\"100\",\"200\",\"300\",\"400\",\"500\",\"600\",\"700\",\"800\",\"900\"],dn=class extends D{constructor(e){super();this._onOptionChange=this._register(new v);this.onOptionChange=this._onOptionChange.event;let i={...si};for(let r in e)if(r in i)try{let n=e[r];i[r]=this._sanitizeAndValidateOption(r,n)}catch(n){console.error(n)}this.rawOptions=i,this.options={...i},this._setupOptions(),this._register(C(()=>{this.rawOptions.linkHandler=null,this.rawOptions.documentOverride=null}))}onSpecificOptionChange(e,i){return this.onOptionChange(r=>{r===e&&i(this.rawOptions[e])})}onMultipleOptionChange(e,i){return this.onOptionChange(r=>{e.indexOf(r)!==-1&&i()})}_setupOptions(){let e=r=>{if(!(r in si))throw new Error(`No option with key \"${r}\"`);return this.rawOptions[r]},i=(r,n)=>{if(!(r in si))throw new Error(`No option with key \"${r}\"`);n=this._sanitizeAndValidateOption(r,n),this.rawOptions[r]!==n&&(this.rawOptions[r]=n,this._onOptionChange.fire(r))};for(let r in this.rawOptions){let n={get:e.bind(this,r),set:i.bind(this,r)};Object.defineProperty(this.options,r,n)}}_sanitizeAndValidateOption(e,i){switch(e){case\"cursorStyle\":if(i||(i=si[e]),!sc(i))throw new Error(`\"${i}\" is not a valid value for ${e}`);break;case\"wordSeparator\":i||(i=si[e]);break;case\"fontWeight\":case\"fontWeightBold\":if(typeof i==\"number\"&&1<=i&&i<=1e3)break;i=nc.includes(i)?i:si[e];break;case\"cursorWidth\":i=Math.floor(i);case\"lineHeight\":case\"tabStopWidth\":if(i<1)throw new Error(`${e} cannot be less than 1, value: ${i}`);break;case\"minimumContrastRatio\":i=Math.max(1,Math.min(21,Math.round(i*10)/10));break;case\"scrollback\":if(i=Math.min(i,4294967295),i<0)throw new Error(`${e} cannot be less than 0, value: ${i}`);break;case\"fastScrollSensitivity\":case\"scrollSensitivity\":if(i<=0)throw new Error(`${e} cannot be less than or equal to 0, value: ${i}`);break;case\"rows\":case\"cols\":if(!i&&i!==0)throw new Error(`${e} must be numeric, value: ${i}`);break;case\"windowsPty\":i=i??{};break}return i}};function sc(s){return s===\"block\"||s===\"underline\"||s===\"bar\"}function oi(s,t=5){if(typeof s!=\"object\")return s;let e=Array.isArray(s)?[]:{};for(let i in s)e[i]=t<=1?s[i]:s[i]&&oi(s[i],t-1);return e}var ul=Object.freeze({insertMode:!1}),hl=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,cursorBlink:void 0,cursorStyle:void 0,origin:!1,reverseWraparound:!1,sendFocus:!1,synchronizedOutput:!1,wraparound:!0}),li=class extends D{constructor(e,i,r){super();this._bufferService=e;this._logService=i;this._optionsService=r;this.isCursorInitialized=!1;this.isCursorHidden=!1;this._onData=this._register(new v);this.onData=this._onData.event;this._onUserInput=this._register(new v);this.onUserInput=this._onUserInput.event;this._onBinary=this._register(new v);this.onBinary=this._onBinary.event;this._onRequestScrollToBottom=this._register(new v);this.onRequestScrollToBottom=this._onRequestScrollToBottom.event;this.modes=oi(ul),this.decPrivateModes=oi(hl)}reset(){this.modes=oi(ul),this.decPrivateModes=oi(hl)}triggerDataEvent(e,i=!1){if(this._optionsService.rawOptions.disableStdin)return;let r=this._bufferService.buffer;i&&this._optionsService.rawOptions.scrollOnUserInput&&r.ybase!==r.ydisp&&this._onRequestScrollToBottom.fire(),i&&this._onUserInput.fire(),this._logService.debug(`sending data \"${e}\"`),this._logService.trace(\"sending data (codes)\",()=>e.split(\"\").map(n=>n.charCodeAt(0))),this._onData.fire(e)}triggerBinaryEvent(e){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary \"${e}\"`),this._logService.trace(\"sending binary (codes)\",()=>e.split(\"\").map(i=>i.charCodeAt(0))),this._onBinary.fire(e))}};li=M([S(0,F),S(1,nr),S(2,H)],li);var dl={NONE:{events:0,restrict:()=>!1},X10:{events:1,restrict:s=>s.button===4||s.action!==1?!1:(s.ctrl=!1,s.alt=!1,s.shift=!1,!0)},VT200:{events:19,restrict:s=>s.action!==32},DRAG:{events:23,restrict:s=>!(s.action===32&&s.button===3)},ANY:{events:31,restrict:s=>!0}};function Ms(s,t){let e=(s.ctrl?16:0)|(s.shift?4:0)|(s.alt?8:0);return s.button===4?(e|=64,e|=s.action):(e|=s.button&3,s.button&4&&(e|=64),s.button&8&&(e|=128),s.action===32?e|=32:s.action===0&&!t&&(e|=3)),e}var Ps=String.fromCharCode,fl={DEFAULT:s=>{let t=[Ms(s,!1)+32,s.col+32,s.row+32];return t[0]>255||t[1]>255||t[2]>255?\"\":`\\x1B[M${Ps(t[0])}${Ps(t[1])}${Ps(t[2])}`},SGR:s=>{let t=s.action===0&&s.button!==4?\"m\":\"M\";return`\\x1B[<${Ms(s,!0)};${s.col};${s.row}${t}`},SGR_PIXELS:s=>{let t=s.action===0&&s.button!==4?\"m\":\"M\";return`\\x1B[<${Ms(s,!0)};${s.x};${s.y}${t}`}},ai=class extends D{constructor(e,i,r){super();this._bufferService=e;this._coreService=i;this._optionsService=r;this._protocols={};this._encodings={};this._activeProtocol=\"\";this._activeEncoding=\"\";this._lastEvent=null;this._wheelPartialScroll=0;this._onProtocolChange=this._register(new v);this.onProtocolChange=this._onProtocolChange.event;for(let n of Object.keys(dl))this.addProtocol(n,dl[n]);for(let n of Object.keys(fl))this.addEncoding(n,fl[n]);this.reset()}addProtocol(e,i){this._protocols[e]=i}addEncoding(e,i){this._encodings[e]=i}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return this._protocols[this._activeProtocol].events!==0}set activeProtocol(e){if(!this._protocols[e])throw new Error(`unknown protocol \"${e}\"`);this._activeProtocol=e,this._onProtocolChange.fire(this._protocols[e].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(e){if(!this._encodings[e])throw new Error(`unknown encoding \"${e}\"`);this._activeEncoding=e}reset(){this.activeProtocol=\"NONE\",this.activeEncoding=\"DEFAULT\",this._lastEvent=null,this._wheelPartialScroll=0}consumeWheelEvent(e,i,r){if(e.deltaY===0||e.shiftKey||i===void 0||r===void 0)return 0;let n=i/r,o=this._applyScrollModifier(e.deltaY,e);return e.deltaMode===WheelEvent.DOM_DELTA_PIXEL?(o/=n+0,Math.abs(e.deltaY)<50&&(o*=.3),this._wheelPartialScroll+=o,o=Math.floor(Math.abs(this._wheelPartialScroll))*(this._wheelPartialScroll>0?1:-1),this._wheelPartialScroll%=1):e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(o*=this._bufferService.rows),o}_applyScrollModifier(e,i){return i.altKey||i.ctrlKey||i.shiftKey?e*this._optionsService.rawOptions.fastScrollSensitivity*this._optionsService.rawOptions.scrollSensitivity:e*this._optionsService.rawOptions.scrollSensitivity}triggerMouseEvent(e){if(e.col<0||e.col>=this._bufferService.cols||e.row<0||e.row>=this._bufferService.rows||e.button===4&&e.action===32||e.button===3&&e.action!==32||e.button!==4&&(e.action===2||e.action===3)||(e.col++,e.row++,e.action===32&&this._lastEvent&&this._equalEvents(this._lastEvent,e,this._activeEncoding===\"SGR_PIXELS\"))||!this._protocols[this._activeProtocol].restrict(e))return!1;let i=this._encodings[this._activeEncoding](e);return i&&(this._activeEncoding===\"DEFAULT\"?this._coreService.triggerBinaryEvent(i):this._coreService.triggerDataEvent(i,!0)),this._lastEvent=e,!0}explainEvents(e){return{down:!!(e&1),up:!!(e&2),drag:!!(e&4),move:!!(e&8),wheel:!!(e&16)}}_equalEvents(e,i,r){if(r){if(e.x!==i.x||e.y!==i.y)return!1}else if(e.col!==i.col||e.row!==i.row)return!1;return!(e.button!==i.button||e.action!==i.action||e.ctrl!==i.ctrl||e.alt!==i.alt||e.shift!==i.shift)}};ai=M([S(0,F),S(1,ge),S(2,H)],ai);var Os=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],ac=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]],se;function cc(s,t){let e=0,i=t.length-1,r;if(s<t[0][0]||s>t[i][1])return!1;for(;i>=e;)if(r=e+i>>1,s>t[r][1])e=r+1;else if(s<t[r][0])i=r-1;else return!0;return!1}var fn=class{constructor(){this.version=\"6\";if(!se){se=new Uint8Array(65536),se.fill(1),se[0]=0,se.fill(0,1,32),se.fill(0,127,160),se.fill(2,4352,4448),se[9001]=2,se[9002]=2,se.fill(2,11904,42192),se[12351]=1,se.fill(2,44032,55204),se.fill(2,63744,64256),se.fill(2,65040,65050),se.fill(2,65072,65136),se.fill(2,65280,65377),se.fill(2,65504,65511);for(let t=0;t<Os.length;++t)se.fill(0,Os[t][0],Os[t][1]+1)}}wcwidth(t){return t<32?0:t<127?1:t<65536?se[t]:cc(t,ac)?0:t>=131072&&t<=196605||t>=196608&&t<=262141?2:1}charProperties(t,e){let i=this.wcwidth(t),r=i===0&&e!==0;if(r){let n=Ae.extractWidth(e);n===0?r=!1:n>i&&(i=n)}return Ae.createPropertyValue(0,i,r)}};var Ae=class s{constructor(){this._providers=Object.create(null);this._active=\"\";this._onChange=new v;this.onChange=this._onChange.event;let t=new fn;this.register(t),this._active=t.version,this._activeProvider=t}static extractShouldJoin(t){return(t&1)!==0}static extractWidth(t){return t>>1&3}static extractCharKind(t){return t>>3}static createPropertyValue(t,e,i=!1){return(t&16777215)<<3|(e&3)<<1|(i?1:0)}dispose(){this._onChange.dispose()}get versions(){return Object.keys(this._providers)}get activeVersion(){return this._active}set activeVersion(t){if(!this._providers[t])throw new Error(`unknown Unicode version \"${t}\"`);this._active=t,this._activeProvider=this._providers[t],this._onChange.fire(t)}register(t){this._providers[t.version]=t}wcwidth(t){return this._activeProvider.wcwidth(t)}getStringCellWidth(t){let e=0,i=0,r=t.length;for(let n=0;n<r;++n){let o=t.charCodeAt(n);if(55296<=o&&o<=56319){if(++n>=r)return e+this.wcwidth(o);let u=t.charCodeAt(n);56320<=u&&u<=57343?o=(o-55296)*1024+u-56320+65536:e+=this.wcwidth(u)}let l=this.charProperties(o,i),a=s.extractWidth(l);s.extractShouldJoin(l)&&(a-=s.extractWidth(i)),e+=a,i=l}return e}charProperties(t,e){return this._activeProvider.charProperties(t,e)}};var pn=class{constructor(){this.glevel=0;this._charsets=[]}reset(){this.charset=void 0,this._charsets=[],this.glevel=0}setgLevel(t){this.glevel=t,this.charset=this._charsets[t]}setgCharset(t,e){this._charsets[t]=e,this.glevel===t&&(this.charset=e)}};function Bs(s){let e=s.buffer.lines.get(s.buffer.ybase+s.buffer.y-1)?.get(s.cols-1),i=s.buffer.lines.get(s.buffer.ybase+s.buffer.y);i&&e&&(i.isWrapped=e[3]!==0&&e[3]!==32)}var Vi=2147483647,uc=256,ci=class s{constructor(t=32,e=32){this.maxLength=t;this.maxSubParamsLength=e;if(e>uc)throw new Error(\"maxSubParamsLength must not be greater than 256\");this.params=new Int32Array(t),this.length=0,this._subParams=new Int32Array(e),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(t),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}static fromArray(t){let e=new s;if(!t.length)return e;for(let i=Array.isArray(t[0])?1:0;i<t.length;++i){let r=t[i];if(Array.isArray(r))for(let n=0;n<r.length;++n)e.addSubParam(r[n]);else e.addParam(r)}return e}clone(){let t=new s(this.maxLength,this.maxSubParamsLength);return t.params.set(this.params),t.length=this.length,t._subParams.set(this._subParams),t._subParamsLength=this._subParamsLength,t._subParamsIdx.set(this._subParamsIdx),t._rejectDigits=this._rejectDigits,t._rejectSubDigits=this._rejectSubDigits,t._digitIsSub=this._digitIsSub,t}toArray(){let t=[];for(let e=0;e<this.length;++e){t.push(this.params[e]);let i=this._subParamsIdx[e]>>8,r=this._subParamsIdx[e]&255;r-i>0&&t.push(Array.prototype.slice.call(this._subParams,i,r))}return t}reset(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}addParam(t){if(this._digitIsSub=!1,this.length>=this.maxLength){this._rejectDigits=!0;return}if(t<-1)throw new Error(\"values lesser than -1 are not allowed\");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=t>Vi?Vi:t}addSubParam(t){if(this._digitIsSub=!0,!!this.length){if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength){this._rejectSubDigits=!0;return}if(t<-1)throw new Error(\"values lesser than -1 are not allowed\");this._subParams[this._subParamsLength++]=t>Vi?Vi:t,this._subParamsIdx[this.length-1]++}}hasSubParams(t){return(this._subParamsIdx[t]&255)-(this._subParamsIdx[t]>>8)>0}getSubParams(t){let e=this._subParamsIdx[t]>>8,i=this._subParamsIdx[t]&255;return i-e>0?this._subParams.subarray(e,i):null}getSubParamsAll(){let t={};for(let e=0;e<this.length;++e){let i=this._subParamsIdx[e]>>8,r=this._subParamsIdx[e]&255;r-i>0&&(t[e]=this._subParams.slice(i,r))}return t}addDigit(t){let e;if(this._rejectDigits||!(e=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)return;let i=this._digitIsSub?this._subParams:this.params,r=i[e-1];i[e-1]=~r?Math.min(r*10+t,Vi):t}};var qi=[],mn=class{constructor(){this._state=0;this._active=qi;this._id=-1;this._handlers=Object.create(null);this._handlerFb=()=>{};this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(t,e){this._handlers[t]===void 0&&(this._handlers[t]=[]);let i=this._handlers[t];return i.push(e),{dispose:()=>{let r=i.indexOf(e);r!==-1&&i.splice(r,1)}}}clearHandler(t){this._handlers[t]&&delete this._handlers[t]}setHandlerFallback(t){this._handlerFb=t}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=qi}reset(){if(this._state===2)for(let t=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;t>=0;--t)this._active[t].end(!1);this._stack.paused=!1,this._active=qi,this._id=-1,this._state=0}_start(){if(this._active=this._handlers[this._id]||qi,!this._active.length)this._handlerFb(this._id,\"START\");else for(let t=this._active.length-1;t>=0;t--)this._active[t].start()}_put(t,e,i){if(!this._active.length)this._handlerFb(this._id,\"PUT\",It(t,e,i));else for(let r=this._active.length-1;r>=0;r--)this._active[r].put(t,e,i)}start(){this.reset(),this._state=1}put(t,e,i){if(this._state!==3){if(this._state===1)for(;e<i;){let r=t[e++];if(r===59){this._state=2,this._start();break}if(r<48||57<r){this._state=3;return}this._id===-1&&(this._id=0),this._id=this._id*10+r-48}this._state===2&&i-e>0&&this._put(t,e,i)}}end(t,e=!0){if(this._state!==0){if(this._state!==3)if(this._state===1&&this._start(),!this._active.length)this._handlerFb(this._id,\"END\",t);else{let i=!1,r=this._active.length-1,n=!1;if(this._stack.paused&&(r=this._stack.loopPosition-1,i=e,n=this._stack.fallThrough,this._stack.paused=!1),!n&&i===!1){for(;r>=0&&(i=this._active[r].end(t),i!==!0);r--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!1,i;r--}for(;r>=0;r--)if(i=this._active[r].end(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!0,i}this._active=qi,this._id=-1,this._state=0}}},pe=class{constructor(t){this._handler=t;this._data=\"\";this._hitLimit=!1}start(){this._data=\"\",this._hitLimit=!1}put(t,e,i){this._hitLimit||(this._data+=It(t,e,i),this._data.length>1e7&&(this._data=\"\",this._hitLimit=!0))}end(t){let e=!1;if(this._hitLimit)e=!1;else if(t&&(e=this._handler(this._data),e instanceof Promise))return e.then(i=>(this._data=\"\",this._hitLimit=!1,i));return this._data=\"\",this._hitLimit=!1,e}};var Yi=[],_n=class{constructor(){this._handlers=Object.create(null);this._active=Yi;this._ident=0;this._handlerFb=()=>{};this._stack={paused:!1,loopPosition:0,fallThrough:!1}}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=Yi}registerHandler(t,e){this._handlers[t]===void 0&&(this._handlers[t]=[]);let i=this._handlers[t];return i.push(e),{dispose:()=>{let r=i.indexOf(e);r!==-1&&i.splice(r,1)}}}clearHandler(t){this._handlers[t]&&delete this._handlers[t]}setHandlerFallback(t){this._handlerFb=t}reset(){if(this._active.length)for(let t=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;t>=0;--t)this._active[t].unhook(!1);this._stack.paused=!1,this._active=Yi,this._ident=0}hook(t,e){if(this.reset(),this._ident=t,this._active=this._handlers[t]||Yi,!this._active.length)this._handlerFb(this._ident,\"HOOK\",e);else for(let i=this._active.length-1;i>=0;i--)this._active[i].hook(e)}put(t,e,i){if(!this._active.length)this._handlerFb(this._ident,\"PUT\",It(t,e,i));else for(let r=this._active.length-1;r>=0;r--)this._active[r].put(t,e,i)}unhook(t,e=!0){if(!this._active.length)this._handlerFb(this._ident,\"UNHOOK\",t);else{let i=!1,r=this._active.length-1,n=!1;if(this._stack.paused&&(r=this._stack.loopPosition-1,i=e,n=this._stack.fallThrough,this._stack.paused=!1),!n&&i===!1){for(;r>=0&&(i=this._active[r].unhook(t),i!==!0);r--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!1,i;r--}for(;r>=0;r--)if(i=this._active[r].unhook(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!0,i}this._active=Yi,this._ident=0}},ji=new ci;ji.addParam(0);var Xi=class{constructor(t){this._handler=t;this._data=\"\";this._params=ji;this._hitLimit=!1}hook(t){this._params=t.length>1||t.params[0]?t.clone():ji,this._data=\"\",this._hitLimit=!1}put(t,e,i){this._hitLimit||(this._data+=It(t,e,i),this._data.length>1e7&&(this._data=\"\",this._hitLimit=!0))}unhook(t){let e=!1;if(this._hitLimit)e=!1;else if(t&&(e=this._handler(this._data,this._params),e instanceof Promise))return e.then(i=>(this._params=ji,this._data=\"\",this._hitLimit=!1,i));return this._params=ji,this._data=\"\",this._hitLimit=!1,e}};var Fs=class{constructor(t){this.table=new Uint8Array(t)}setDefault(t,e){this.table.fill(t<<4|e)}add(t,e,i,r){this.table[e<<8|t]=i<<4|r}addMany(t,e,i,r){for(let n=0;n<t.length;n++)this.table[e<<8|t[n]]=i<<4|r}},ke=160,hc=function(){let s=new Fs(4095),e=Array.apply(null,Array(256)).map((a,u)=>u),i=(a,u)=>e.slice(a,u),r=i(32,127),n=i(0,24);n.push(25),n.push.apply(n,i(28,32));let o=i(0,14),l;s.setDefault(1,0),s.addMany(r,0,2,0);for(l in o)s.addMany([24,26,153,154],l,3,0),s.addMany(i(128,144),l,3,0),s.addMany(i(144,152),l,3,0),s.add(156,l,0,0),s.add(27,l,11,1),s.add(157,l,4,8),s.addMany([152,158,159],l,0,7),s.add(155,l,11,3),s.add(144,l,11,9);return s.addMany(n,0,3,0),s.addMany(n,1,3,1),s.add(127,1,0,1),s.addMany(n,8,0,8),s.addMany(n,3,3,3),s.add(127,3,0,3),s.addMany(n,4,3,4),s.add(127,4,0,4),s.addMany(n,6,3,6),s.addMany(n,5,3,5),s.add(127,5,0,5),s.addMany(n,2,3,2),s.add(127,2,0,2),s.add(93,1,4,8),s.addMany(r,8,5,8),s.add(127,8,5,8),s.addMany([156,27,24,26,7],8,6,0),s.addMany(i(28,32),8,0,8),s.addMany([88,94,95],1,0,7),s.addMany(r,7,0,7),s.addMany(n,7,0,7),s.add(156,7,0,0),s.add(127,7,0,7),s.add(91,1,11,3),s.addMany(i(64,127),3,7,0),s.addMany(i(48,60),3,8,4),s.addMany([60,61,62,63],3,9,4),s.addMany(i(48,60),4,8,4),s.addMany(i(64,127),4,7,0),s.addMany([60,61,62,63],4,0,6),s.addMany(i(32,64),6,0,6),s.add(127,6,0,6),s.addMany(i(64,127),6,0,0),s.addMany(i(32,48),3,9,5),s.addMany(i(32,48),5,9,5),s.addMany(i(48,64),5,0,6),s.addMany(i(64,127),5,7,0),s.addMany(i(32,48),4,9,5),s.addMany(i(32,48),1,9,2),s.addMany(i(32,48),2,9,2),s.addMany(i(48,127),2,10,0),s.addMany(i(48,80),1,10,0),s.addMany(i(81,88),1,10,0),s.addMany([89,90,92],1,10,0),s.addMany(i(96,127),1,10,0),s.add(80,1,11,9),s.addMany(n,9,0,9),s.add(127,9,0,9),s.addMany(i(28,32),9,0,9),s.addMany(i(32,48),9,9,12),s.addMany(i(48,60),9,8,10),s.addMany([60,61,62,63],9,9,10),s.addMany(n,11,0,11),s.addMany(i(32,128),11,0,11),s.addMany(i(28,32),11,0,11),s.addMany(n,10,0,10),s.add(127,10,0,10),s.addMany(i(28,32),10,0,10),s.addMany(i(48,60),10,8,10),s.addMany([60,61,62,63],10,0,11),s.addMany(i(32,48),10,9,12),s.addMany(n,12,0,12),s.add(127,12,0,12),s.addMany(i(28,32),12,0,12),s.addMany(i(32,48),12,9,12),s.addMany(i(48,64),12,0,11),s.addMany(i(64,127),12,12,13),s.addMany(i(64,127),10,12,13),s.addMany(i(64,127),9,12,13),s.addMany(n,13,13,13),s.addMany(r,13,13,13),s.add(127,13,0,13),s.addMany([27,156,24,26],13,14,0),s.add(ke,0,2,0),s.add(ke,8,5,8),s.add(ke,6,0,6),s.add(ke,11,0,11),s.add(ke,13,13,13),s}(),bn=class extends D{constructor(e=hc){super();this._transitions=e;this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0};this.initialState=0,this.currentState=this.initialState,this._params=new ci,this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._printHandlerFb=(i,r,n)=>{},this._executeHandlerFb=i=>{},this._csiHandlerFb=(i,r)=>{},this._escHandlerFb=i=>{},this._errorHandlerFb=i=>i,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this._register(C(()=>{this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._escHandlers=Object.create(null)})),this._oscParser=this._register(new mn),this._dcsParser=this._register(new _n),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:\"\\\\\"},()=>!0)}_identifier(e,i=[64,126]){let r=0;if(e.prefix){if(e.prefix.length>1)throw new Error(\"only one byte as prefix supported\");if(r=e.prefix.charCodeAt(0),r&&60>r||r>63)throw new Error(\"prefix must be in range 0x3c .. 0x3f\")}if(e.intermediates){if(e.intermediates.length>2)throw new Error(\"only two bytes as intermediates are supported\");for(let o=0;o<e.intermediates.length;++o){let l=e.intermediates.charCodeAt(o);if(32>l||l>47)throw new Error(\"intermediate must be in range 0x20 .. 0x2f\");r<<=8,r|=l}}if(e.final.length!==1)throw new Error(\"final must be a single byte\");let n=e.final.charCodeAt(0);if(i[0]>n||n>i[1])throw new Error(`final must be in range ${i[0]} .. ${i[1]}`);return r<<=8,r|=n,r}identToString(e){let i=[];for(;e;)i.push(String.fromCharCode(e&255)),e>>=8;return i.reverse().join(\"\")}setPrintHandler(e){this._printHandler=e}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(e,i){let r=this._identifier(e,[48,126]);this._escHandlers[r]===void 0&&(this._escHandlers[r]=[]);let n=this._escHandlers[r];return n.push(i),{dispose:()=>{let o=n.indexOf(i);o!==-1&&n.splice(o,1)}}}clearEscHandler(e){this._escHandlers[this._identifier(e,[48,126])]&&delete this._escHandlers[this._identifier(e,[48,126])]}setEscHandlerFallback(e){this._escHandlerFb=e}setExecuteHandler(e,i){this._executeHandlers[e.charCodeAt(0)]=i}clearExecuteHandler(e){this._executeHandlers[e.charCodeAt(0)]&&delete this._executeHandlers[e.charCodeAt(0)]}setExecuteHandlerFallback(e){this._executeHandlerFb=e}registerCsiHandler(e,i){let r=this._identifier(e);this._csiHandlers[r]===void 0&&(this._csiHandlers[r]=[]);let n=this._csiHandlers[r];return n.push(i),{dispose:()=>{let o=n.indexOf(i);o!==-1&&n.splice(o,1)}}}clearCsiHandler(e){this._csiHandlers[this._identifier(e)]&&delete this._csiHandlers[this._identifier(e)]}setCsiHandlerFallback(e){this._csiHandlerFb=e}registerDcsHandler(e,i){return this._dcsParser.registerHandler(this._identifier(e),i)}clearDcsHandler(e){this._dcsParser.clearHandler(this._identifier(e))}setDcsHandlerFallback(e){this._dcsParser.setHandlerFallback(e)}registerOscHandler(e,i){return this._oscParser.registerHandler(e,i)}clearOscHandler(e){this._oscParser.clearHandler(e)}setOscHandlerFallback(e){this._oscParser.setHandlerFallback(e)}setErrorHandler(e){this._errorHandler=e}clearErrorHandler(){this._errorHandler=this._errorHandlerFb}reset(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._parseStack.state!==0&&(this._parseStack.state=2,this._parseStack.handlers=[])}_preserveStack(e,i,r,n,o){this._parseStack.state=e,this._parseStack.handlers=i,this._parseStack.handlerPos=r,this._parseStack.transition=n,this._parseStack.chunkPos=o}parse(e,i,r){let n=0,o=0,l=0,a;if(this._parseStack.state)if(this._parseStack.state===2)this._parseStack.state=0,l=this._parseStack.chunkPos+1;else{if(r===void 0||this._parseStack.state===1)throw this._parseStack.state=1,new Error(\"improper continuation due to previous async handler, giving up parsing\");let u=this._parseStack.handlers,h=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(r===!1&&h>-1){for(;h>=0&&(a=u[h](this._params),a!==!0);h--)if(a instanceof Promise)return this._parseStack.handlerPos=h,a}this._parseStack.handlers=[];break;case 4:if(r===!1&&h>-1){for(;h>=0&&(a=u[h](),a!==!0);h--)if(a instanceof Promise)return this._parseStack.handlerPos=h,a}this._parseStack.handlers=[];break;case 6:if(n=e[this._parseStack.chunkPos],a=this._dcsParser.unhook(n!==24&&n!==26,r),a)return a;n===27&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0;break;case 5:if(n=e[this._parseStack.chunkPos],a=this._oscParser.end(n!==24&&n!==26,r),a)return a;n===27&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0;break}this._parseStack.state=0,l=this._parseStack.chunkPos+1,this.precedingJoinState=0,this.currentState=this._parseStack.transition&15}for(let u=l;u<i;++u){switch(n=e[u],o=this._transitions.table[this.currentState<<8|(n<160?n:ke)],o>>4){case 2:for(let m=u+1;;++m){if(m>=i||(n=e[m])<32||n>126&&n<ke){this._printHandler(e,u,m),u=m-1;break}if(++m>=i||(n=e[m])<32||n>126&&n<ke){this._printHandler(e,u,m),u=m-1;break}if(++m>=i||(n=e[m])<32||n>126&&n<ke){this._printHandler(e,u,m),u=m-1;break}if(++m>=i||(n=e[m])<32||n>126&&n<ke){this._printHandler(e,u,m),u=m-1;break}}break;case 3:this._executeHandlers[n]?this._executeHandlers[n]():this._executeHandlerFb(n),this.precedingJoinState=0;break;case 0:break;case 1:if(this._errorHandler({position:u,code:n,currentState:this.currentState,collect:this._collect,params:this._params,abort:!1}).abort)return;break;case 7:let c=this._csiHandlers[this._collect<<8|n],d=c?c.length-1:-1;for(;d>=0&&(a=c[d](this._params),a!==!0);d--)if(a instanceof Promise)return this._preserveStack(3,c,d,o,u),a;d<0&&this._csiHandlerFb(this._collect<<8|n,this._params),this.precedingJoinState=0;break;case 8:do switch(n){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(n-48)}while(++u<i&&(n=e[u])>47&&n<60);u--;break;case 9:this._collect<<=8,this._collect|=n;break;case 10:let _=this._escHandlers[this._collect<<8|n],p=_?_.length-1:-1;for(;p>=0&&(a=_[p](),a!==!0);p--)if(a instanceof Promise)return this._preserveStack(4,_,p,o,u),a;p<0&&this._escHandlerFb(this._collect<<8|n),this.precedingJoinState=0;break;case 11:this._params.reset(),this._params.addParam(0),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|n,this._params);break;case 13:for(let m=u+1;;++m)if(m>=i||(n=e[m])===24||n===26||n===27||n>127&&n<ke){this._dcsParser.put(e,u,m),u=m-1;break}break;case 14:if(a=this._dcsParser.unhook(n!==24&&n!==26),a)return this._preserveStack(6,[],0,o,u),a;n===27&&(o|=1),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0;break;case 4:this._oscParser.start();break;case 5:for(let m=u+1;;m++)if(m>=i||(n=e[m])<32||n>127&&n<ke){this._oscParser.put(e,u,m),u=m-1;break}break;case 6:if(a=this._oscParser.end(n!==24&&n!==26),a)return this._preserveStack(5,[],0,o,u),a;n===27&&(o|=1),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0;break}this.currentState=o&15}}};var dc=/^([\\da-f])\\/([\\da-f])\\/([\\da-f])$|^([\\da-f]{2})\\/([\\da-f]{2})\\/([\\da-f]{2})$|^([\\da-f]{3})\\/([\\da-f]{3})\\/([\\da-f]{3})$|^([\\da-f]{4})\\/([\\da-f]{4})\\/([\\da-f]{4})$/,fc=/^[\\da-f]+$/;function Ws(s){if(!s)return;let t=s.toLowerCase();if(t.indexOf(\"rgb:\")===0){t=t.slice(4);let e=dc.exec(t);if(e){let i=e[1]?15:e[4]?255:e[7]?4095:65535;return[Math.round(parseInt(e[1]||e[4]||e[7]||e[10],16)/i*255),Math.round(parseInt(e[2]||e[5]||e[8]||e[11],16)/i*255),Math.round(parseInt(e[3]||e[6]||e[9]||e[12],16)/i*255)]}}else if(t.indexOf(\"#\")===0&&(t=t.slice(1),fc.exec(t)&&[3,6,9,12].includes(t.length))){let e=t.length/3,i=[0,0,0];for(let r=0;r<3;++r){let n=parseInt(t.slice(e*r,e*r+e),16);i[r]=e===1?n<<4:e===2?n:e===3?n>>4:n>>8}return i}}function Hs(s,t){let e=s.toString(16),i=e.length<2?\"0\"+e:e;switch(t){case 4:return e[0];case 8:return i;case 12:return(i+i).slice(0,3);default:return i+i}}function ml(s,t=16){let[e,i,r]=s;return`rgb:${Hs(e,t)}/${Hs(i,t)}/${Hs(r,t)}`}var mc={\"(\":0,\")\":1,\"*\":2,\"+\":3,\"-\":1,\".\":2},ut=131072,_l=10;function bl(s,t){if(s>24)return t.setWinLines||!1;switch(s){case 1:return!!t.restoreWin;case 2:return!!t.minimizeWin;case 3:return!!t.setWinPosition;case 4:return!!t.setWinSizePixels;case 5:return!!t.raiseWin;case 6:return!!t.lowerWin;case 7:return!!t.refreshWin;case 8:return!!t.setWinSizeChars;case 9:return!!t.maximizeWin;case 10:return!!t.fullscreenWin;case 11:return!!t.getWinState;case 13:return!!t.getWinPosition;case 14:return!!t.getWinSizePixels;case 15:return!!t.getScreenSizePixels;case 16:return!!t.getCellSizePixels;case 18:return!!t.getWinSizeChars;case 19:return!!t.getScreenSizeChars;case 20:return!!t.getIconTitle;case 21:return!!t.getWinTitle;case 22:return!!t.pushTitle;case 23:return!!t.popTitle;case 24:return!!t.setWinLines}return!1}var vl=5e3,gl=0,vn=class extends D{constructor(e,i,r,n,o,l,a,u,h=new bn){super();this._bufferService=e;this._charsetService=i;this._coreService=r;this._logService=n;this._optionsService=o;this._oscLinkService=l;this._coreMouseService=a;this._unicodeService=u;this._parser=h;this._parseBuffer=new Uint32Array(4096);this._stringDecoder=new er;this._utf8Decoder=new tr;this._windowTitle=\"\";this._iconName=\"\";this._windowTitleStack=[];this._iconNameStack=[];this._curAttrData=X.clone();this._eraseAttrDataInternal=X.clone();this._onRequestBell=this._register(new v);this.onRequestBell=this._onRequestBell.event;this._onRequestRefreshRows=this._register(new v);this.onRequestRefreshRows=this._onRequestRefreshRows.event;this._onRequestReset=this._register(new v);this.onRequestReset=this._onRequestReset.event;this._onRequestSendFocus=this._register(new v);this.onRequestSendFocus=this._onRequestSendFocus.event;this._onRequestSyncScrollBar=this._register(new v);this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event;this._onRequestWindowsOptionsReport=this._register(new v);this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event;this._onA11yChar=this._register(new v);this.onA11yChar=this._onA11yChar.event;this._onA11yTab=this._register(new v);this.onA11yTab=this._onA11yTab.event;this._onCursorMove=this._register(new v);this.onCursorMove=this._onCursorMove.event;this._onLineFeed=this._register(new v);this.onLineFeed=this._onLineFeed.event;this._onScroll=this._register(new v);this.onScroll=this._onScroll.event;this._onTitleChange=this._register(new v);this.onTitleChange=this._onTitleChange.event;this._onColor=this._register(new v);this.onColor=this._onColor.event;this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0};this._specialColors=[256,257,258];this._register(this._parser),this._dirtyRowTracker=new Zi(this._bufferService),this._activeBuffer=this._bufferService.buffer,this._register(this._bufferService.buffers.onBufferActivate(c=>this._activeBuffer=c.activeBuffer)),this._parser.setCsiHandlerFallback((c,d)=>{this._logService.debug(\"Unknown CSI code: \",{identifier:this._parser.identToString(c),params:d.toArray()})}),this._parser.setEscHandlerFallback(c=>{this._logService.debug(\"Unknown ESC code: \",{identifier:this._parser.identToString(c)})}),this._parser.setExecuteHandlerFallback(c=>{this._logService.debug(\"Unknown EXECUTE code: \",{code:c})}),this._parser.setOscHandlerFallback((c,d,_)=>{this._logService.debug(\"Unknown OSC code: \",{identifier:c,action:d,data:_})}),this._parser.setDcsHandlerFallback((c,d,_)=>{d===\"HOOK\"&&(_=_.toArray()),this._logService.debug(\"Unknown DCS code: \",{identifier:this._parser.identToString(c),action:d,payload:_})}),this._parser.setPrintHandler((c,d,_)=>this.print(c,d,_)),this._parser.registerCsiHandler({final:\"@\"},c=>this.insertChars(c)),this._parser.registerCsiHandler({intermediates:\" \",final:\"@\"},c=>this.scrollLeft(c)),this._parser.registerCsiHandler({final:\"A\"},c=>this.cursorUp(c)),this._parser.registerCsiHandler({intermediates:\" \",final:\"A\"},c=>this.scrollRight(c)),this._parser.registerCsiHandler({final:\"B\"},c=>this.cursorDown(c)),this._parser.registerCsiHandler({final:\"C\"},c=>this.cursorForward(c)),this._parser.registerCsiHandler({final:\"D\"},c=>this.cursorBackward(c)),this._parser.registerCsiHandler({final:\"E\"},c=>this.cursorNextLine(c)),this._parser.registerCsiHandler({final:\"F\"},c=>this.cursorPrecedingLine(c)),this._parser.registerCsiHandler({final:\"G\"},c=>this.cursorCharAbsolute(c)),this._parser.registerCsiHandler({final:\"H\"},c=>this.cursorPosition(c)),this._parser.registerCsiHandler({final:\"I\"},c=>this.cursorForwardTab(c)),this._parser.registerCsiHandler({final:\"J\"},c=>this.eraseInDisplay(c,!1)),this._parser.registerCsiHandler({prefix:\"?\",final:\"J\"},c=>this.eraseInDisplay(c,!0)),this._parser.registerCsiHandler({final:\"K\"},c=>this.eraseInLine(c,!1)),this._parser.registerCsiHandler({prefix:\"?\",final:\"K\"},c=>this.eraseInLine(c,!0)),this._parser.registerCsiHandler({final:\"L\"},c=>this.insertLines(c)),this._parser.registerCsiHandler({final:\"M\"},c=>this.deleteLines(c)),this._parser.registerCsiHandler({final:\"P\"},c=>this.deleteChars(c)),this._parser.registerCsiHandler({final:\"S\"},c=>this.scrollUp(c)),this._parser.registerCsiHandler({final:\"T\"},c=>this.scrollDown(c)),this._parser.registerCsiHandler({final:\"X\"},c=>this.eraseChars(c)),this._parser.registerCsiHandler({final:\"Z\"},c=>this.cursorBackwardTab(c)),this._parser.registerCsiHandler({final:\"`\"},c=>this.charPosAbsolute(c)),this._parser.registerCsiHandler({final:\"a\"},c=>this.hPositionRelative(c)),this._parser.registerCsiHandler({final:\"b\"},c=>this.repeatPrecedingCharacter(c)),this._parser.registerCsiHandler({final:\"c\"},c=>this.sendDeviceAttributesPrimary(c)),this._parser.registerCsiHandler({prefix:\">\",final:\"c\"},c=>this.sendDeviceAttributesSecondary(c)),this._parser.registerCsiHandler({final:\"d\"},c=>this.linePosAbsolute(c)),this._parser.registerCsiHandler({final:\"e\"},c=>this.vPositionRelative(c)),this._parser.registerCsiHandler({final:\"f\"},c=>this.hVPosition(c)),this._parser.registerCsiHandler({final:\"g\"},c=>this.tabClear(c)),this._parser.registerCsiHandler({final:\"h\"},c=>this.setMode(c)),this._parser.registerCsiHandler({prefix:\"?\",final:\"h\"},c=>this.setModePrivate(c)),this._parser.registerCsiHandler({final:\"l\"},c=>this.resetMode(c)),this._parser.registerCsiHandler({prefix:\"?\",final:\"l\"},c=>this.resetModePrivate(c)),this._parser.registerCsiHandler({final:\"m\"},c=>this.charAttributes(c)),this._parser.registerCsiHandler({final:\"n\"},c=>this.deviceStatus(c)),this._parser.registerCsiHandler({prefix:\"?\",final:\"n\"},c=>this.deviceStatusPrivate(c)),this._parser.registerCsiHandler({intermediates:\"!\",final:\"p\"},c=>this.softReset(c)),this._parser.registerCsiHandler({intermediates:\" \",final:\"q\"},c=>this.setCursorStyle(c)),this._parser.registerCsiHandler({final:\"r\"},c=>this.setScrollRegion(c)),this._parser.registerCsiHandler({final:\"s\"},c=>this.saveCursor(c)),this._parser.registerCsiHandler({final:\"t\"},c=>this.windowOptions(c)),this._parser.registerCsiHandler({final:\"u\"},c=>this.restoreCursor(c)),this._parser.registerCsiHandler({intermediates:\"'\",final:\"}\"},c=>this.insertColumns(c)),this._parser.registerCsiHandler({intermediates:\"'\",final:\"~\"},c=>this.deleteColumns(c)),this._parser.registerCsiHandler({intermediates:'\"',final:\"q\"},c=>this.selectProtected(c)),this._parser.registerCsiHandler({intermediates:\"$\",final:\"p\"},c=>this.requestMode(c,!0)),this._parser.registerCsiHandler({prefix:\"?\",intermediates:\"$\",final:\"p\"},c=>this.requestMode(c,!1)),this._parser.setExecuteHandler(b.BEL,()=>this.bell()),this._parser.setExecuteHandler(b.LF,()=>this.lineFeed()),this._parser.setExecuteHandler(b.VT,()=>this.lineFeed()),this._parser.setExecuteHandler(b.FF,()=>this.lineFeed()),this._parser.setExecuteHandler(b.CR,()=>this.carriageReturn()),this._parser.setExecuteHandler(b.BS,()=>this.backspace()),this._parser.setExecuteHandler(b.HT,()=>this.tab()),this._parser.setExecuteHandler(b.SO,()=>this.shiftOut()),this._parser.setExecuteHandler(b.SI,()=>this.shiftIn()),this._parser.setExecuteHandler(Ai.IND,()=>this.index()),this._parser.setExecuteHandler(Ai.NEL,()=>this.nextLine()),this._parser.setExecuteHandler(Ai.HTS,()=>this.tabSet()),this._parser.registerOscHandler(0,new pe(c=>(this.setTitle(c),this.setIconName(c),!0))),this._parser.registerOscHandler(1,new pe(c=>this.setIconName(c))),this._parser.registerOscHandler(2,new pe(c=>this.setTitle(c))),this._parser.registerOscHandler(4,new pe(c=>this.setOrReportIndexedColor(c))),this._parser.registerOscHandler(8,new pe(c=>this.setHyperlink(c))),this._parser.registerOscHandler(10,new pe(c=>this.setOrReportFgColor(c))),this._parser.registerOscHandler(11,new pe(c=>this.setOrReportBgColor(c))),this._parser.registerOscHandler(12,new pe(c=>this.setOrReportCursorColor(c))),this._parser.registerOscHandler(104,new pe(c=>this.restoreIndexedColor(c))),this._parser.registerOscHandler(110,new pe(c=>this.restoreFgColor(c))),this._parser.registerOscHandler(111,new pe(c=>this.restoreBgColor(c))),this._parser.registerOscHandler(112,new pe(c=>this.restoreCursorColor(c))),this._parser.registerEscHandler({final:\"7\"},()=>this.saveCursor()),this._parser.registerEscHandler({final:\"8\"},()=>this.restoreCursor()),this._parser.registerEscHandler({final:\"D\"},()=>this.index()),this._parser.registerEscHandler({final:\"E\"},()=>this.nextLine()),this._parser.registerEscHandler({final:\"H\"},()=>this.tabSet()),this._parser.registerEscHandler({final:\"M\"},()=>this.reverseIndex()),this._parser.registerEscHandler({final:\"=\"},()=>this.keypadApplicationMode()),this._parser.registerEscHandler({final:\">\"},()=>this.keypadNumericMode()),this._parser.registerEscHandler({final:\"c\"},()=>this.fullReset()),this._parser.registerEscHandler({final:\"n\"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:\"o\"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:\"|\"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:\"}\"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:\"~\"},()=>this.setgLevel(1)),this._parser.registerEscHandler({intermediates:\"%\",final:\"@\"},()=>this.selectDefaultCharset()),this._parser.registerEscHandler({intermediates:\"%\",final:\"G\"},()=>this.selectDefaultCharset());for(let c in ne)this._parser.registerEscHandler({intermediates:\"(\",final:c},()=>this.selectCharset(\"(\"+c)),this._parser.registerEscHandler({intermediates:\")\",final:c},()=>this.selectCharset(\")\"+c)),this._parser.registerEscHandler({intermediates:\"*\",final:c},()=>this.selectCharset(\"*\"+c)),this._parser.registerEscHandler({intermediates:\"+\",final:c},()=>this.selectCharset(\"+\"+c)),this._parser.registerEscHandler({intermediates:\"-\",final:c},()=>this.selectCharset(\"-\"+c)),this._parser.registerEscHandler({intermediates:\".\",final:c},()=>this.selectCharset(\".\"+c)),this._parser.registerEscHandler({intermediates:\"/\",final:c},()=>this.selectCharset(\"/\"+c));this._parser.registerEscHandler({intermediates:\"#\",final:\"8\"},()=>this.screenAlignmentPattern()),this._parser.setErrorHandler(c=>(this._logService.error(\"Parsing error: \",c),c)),this._parser.registerDcsHandler({intermediates:\"$\",final:\"q\"},new Xi((c,d)=>this.requestStatusString(c,d)))}getAttrData(){return this._curAttrData}_preserveStack(e,i,r,n){this._parseStack.paused=!0,this._parseStack.cursorStartX=e,this._parseStack.cursorStartY=i,this._parseStack.decodedLength=r,this._parseStack.position=n}_logSlowResolvingAsync(e){this._logService.logLevel<=3&&Promise.race([e,new Promise((i,r)=>setTimeout(()=>r(\"#SLOW_TIMEOUT\"),vl))]).catch(i=>{if(i!==\"#SLOW_TIMEOUT\")throw i;console.warn(`async parser handler taking longer than ${vl} ms`)})}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(e,i){let r,n=this._activeBuffer.x,o=this._activeBuffer.y,l=0,a=this._parseStack.paused;if(a){if(r=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,i))return this._logSlowResolvingAsync(r),r;n=this._parseStack.cursorStartX,o=this._parseStack.cursorStartY,this._parseStack.paused=!1,e.length>ut&&(l=this._parseStack.position+ut)}if(this._logService.logLevel<=1&&this._logService.debug(`parsing data ${typeof e==\"string\"?` \"${e}\"`:` \"${Array.prototype.map.call(e,c=>String.fromCharCode(c)).join(\"\")}\"`}`),this._logService.logLevel===0&&this._logService.trace(\"parsing data (codes)\",typeof e==\"string\"?e.split(\"\").map(c=>c.charCodeAt(0)):e),this._parseBuffer.length<e.length&&this._parseBuffer.length<ut&&(this._parseBuffer=new Uint32Array(Math.min(e.length,ut))),a||this._dirtyRowTracker.clearRange(),e.length>ut)for(let c=l;c<e.length;c+=ut){let d=c+ut<e.length?c+ut:e.length,_=typeof e==\"string\"?this._stringDecoder.decode(e.substring(c,d),this._parseBuffer):this._utf8Decoder.decode(e.subarray(c,d),this._parseBuffer);if(r=this._parser.parse(this._parseBuffer,_))return this._preserveStack(n,o,_,c),this._logSlowResolvingAsync(r),r}else if(!a){let c=typeof e==\"string\"?this._stringDecoder.decode(e,this._parseBuffer):this._utf8Decoder.decode(e,this._parseBuffer);if(r=this._parser.parse(this._parseBuffer,c))return this._preserveStack(n,o,c,0),this._logSlowResolvingAsync(r),r}(this._activeBuffer.x!==n||this._activeBuffer.y!==o)&&this._onCursorMove.fire();let u=this._dirtyRowTracker.end+(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp),h=this._dirtyRowTracker.start+(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp);h<this._bufferService.rows&&this._onRequestRefreshRows.fire({start:Math.min(h,this._bufferService.rows-1),end:Math.min(u,this._bufferService.rows-1)})}print(e,i,r){let n,o,l=this._charsetService.charset,a=this._optionsService.rawOptions.screenReaderMode,u=this._bufferService.cols,h=this._coreService.decPrivateModes.wraparound,c=this._coreService.modes.insertMode,d=this._curAttrData,_=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._activeBuffer.x&&r-i>0&&_.getWidth(this._activeBuffer.x-1)===2&&_.setCellFromCodepoint(this._activeBuffer.x-1,0,1,d);let p=this._parser.precedingJoinState;for(let m=i;m<r;++m){if(n=e[m],n<127&&l){let O=l[String.fromCharCode(n)];O&&(n=O.charCodeAt(0))}let f=this._unicodeService.charProperties(n,p);o=Ae.extractWidth(f);let A=Ae.extractShouldJoin(f),R=A?Ae.extractWidth(p):0;if(p=f,a&&this._onA11yChar.fire(Ce(n)),this._getCurrentLinkId()&&this._oscLinkService.addLineToLink(this._getCurrentLinkId(),this._activeBuffer.ybase+this._activeBuffer.y),this._activeBuffer.x+o-R>u){if(h){let O=_,I=this._activeBuffer.x-R;for(this._activeBuffer.x=R,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),_=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),R>0&&_ instanceof Ze&&_.copyCellsFrom(O,I,0,R,!1);I<u;)O.setCellFromCodepoint(I++,0,1,d)}else if(this._activeBuffer.x=u-1,o===2)continue}if(A&&this._activeBuffer.x){let O=_.getWidth(this._activeBuffer.x-1)?1:2;_.addCodepointToCell(this._activeBuffer.x-O,n,o);for(let I=o-R;--I>=0;)_.setCellFromCodepoint(this._activeBuffer.x++,0,0,d);continue}if(c&&(_.insertCells(this._activeBuffer.x,o-R,this._activeBuffer.getNullCell(d)),_.getWidth(u-1)===2&&_.setCellFromCodepoint(u-1,0,1,d)),_.setCellFromCodepoint(this._activeBuffer.x++,n,o,d),o>0)for(;--o;)_.setCellFromCodepoint(this._activeBuffer.x++,0,0,d)}this._parser.precedingJoinState=p,this._activeBuffer.x<u&&r-i>0&&_.getWidth(this._activeBuffer.x)===0&&!_.hasContent(this._activeBuffer.x)&&_.setCellFromCodepoint(this._activeBuffer.x,0,1,d),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(e,i){return e.final===\"t\"&&!e.prefix&&!e.intermediates?this._parser.registerCsiHandler(e,r=>bl(r.params[0],this._optionsService.rawOptions.windowOptions)?i(r):!0):this._parser.registerCsiHandler(e,i)}registerDcsHandler(e,i){return this._parser.registerDcsHandler(e,new Xi(i))}registerEscHandler(e,i){return this._parser.registerEscHandler(e,i)}registerOscHandler(e,i){return this._parser.registerOscHandler(e,new pe(i))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(this._activeBuffer.x===0&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;let e=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);e.hasWidth(this._activeBuffer.x)&&!e.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let e=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-e),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(e=this._bufferService.cols-1){this._activeBuffer.x=Math.min(e,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_setCursor(e,i){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=e,this._activeBuffer.y=this._activeBuffer.scrollTop+i):(this._activeBuffer.x=e,this._activeBuffer.y=i),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(e,i){this._restrictCursor(),this._setCursor(this._activeBuffer.x+e,this._activeBuffer.y+i)}cursorUp(e){let i=this._activeBuffer.y-this._activeBuffer.scrollTop;return i>=0?this._moveCursor(0,-Math.min(i,e.params[0]||1)):this._moveCursor(0,-(e.params[0]||1)),!0}cursorDown(e){let i=this._activeBuffer.scrollBottom-this._activeBuffer.y;return i>=0?this._moveCursor(0,Math.min(i,e.params[0]||1)):this._moveCursor(0,e.params[0]||1),!0}cursorForward(e){return this._moveCursor(e.params[0]||1,0),!0}cursorBackward(e){return this._moveCursor(-(e.params[0]||1),0),!0}cursorNextLine(e){return this.cursorDown(e),this._activeBuffer.x=0,!0}cursorPrecedingLine(e){return this.cursorUp(e),this._activeBuffer.x=0,!0}cursorCharAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(e){return this._setCursor(e.length>=2?(e.params[1]||1)-1:0,(e.params[0]||1)-1),!0}charPosAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(e){return this._moveCursor(e.params[0]||1,0),!0}linePosAbsolute(e){return this._setCursor(this._activeBuffer.x,(e.params[0]||1)-1),!0}vPositionRelative(e){return this._moveCursor(0,e.params[0]||1),!0}hVPosition(e){return this.cursorPosition(e),!0}tabClear(e){let i=e.params[0];return i===0?delete this._activeBuffer.tabs[this._activeBuffer.x]:i===3&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let i=e.params[0]||1;for(;i--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let i=e.params[0]||1;for(;i--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(e){let i=e.params[0];return i===1&&(this._curAttrData.bg|=536870912),(i===2||i===0)&&(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(e,i,r,n=!1,o=!1){let l=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);l.replaceCells(i,r,this._activeBuffer.getNullCell(this._eraseAttrData()),o),n&&(l.isWrapped=!1)}_resetBufferLine(e,i=!1){let r=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);r&&(r.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),i),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+e),r.isWrapped=!1)}eraseInDisplay(e,i=!1){this._restrictCursor(this._bufferService.cols);let r;switch(e.params[0]){case 0:for(r=this._activeBuffer.y,this._dirtyRowTracker.markDirty(r),this._eraseInBufferLine(r++,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,i);r<this._bufferService.rows;r++)this._resetBufferLine(r,i);this._dirtyRowTracker.markDirty(r);break;case 1:for(r=this._activeBuffer.y,this._dirtyRowTracker.markDirty(r),this._eraseInBufferLine(r,0,this._activeBuffer.x+1,!0,i),this._activeBuffer.x+1>=this._bufferService.cols&&(this._activeBuffer.lines.get(r+1).isWrapped=!1);r--;)this._resetBufferLine(r,i);this._dirtyRowTracker.markDirty(0);break;case 2:if(this._optionsService.rawOptions.scrollOnEraseInDisplay){for(r=this._bufferService.rows,this._dirtyRowTracker.markRangeDirty(0,r-1);r--&&!this._activeBuffer.lines.get(this._activeBuffer.ybase+r)?.getTrimmedLength(););for(;r>=0;r--)this._bufferService.scroll(this._eraseAttrData())}else{for(r=this._bufferService.rows,this._dirtyRowTracker.markDirty(r-1);r--;)this._resetBufferLine(r,i);this._dirtyRowTracker.markDirty(0)}break;case 3:let n=this._activeBuffer.lines.length-this._bufferService.rows;n>0&&(this._activeBuffer.lines.trimStart(n),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-n,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-n,0),this._onScroll.fire(0));break}return!0}eraseInLine(e,i=!1){switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,i);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,i);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,i);break}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(e){this._restrictCursor();let i=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let r=this._activeBuffer.ybase+this._activeBuffer.y,n=this._bufferService.rows-1-this._activeBuffer.scrollBottom,o=this._bufferService.rows-1+this._activeBuffer.ybase-n+1;for(;i--;)this._activeBuffer.lines.splice(o-1,1),this._activeBuffer.lines.splice(r,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y,this._activeBuffer.scrollBottom),this._activeBuffer.x=0,!0}deleteLines(e){this._restrictCursor();let i=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let r=this._activeBuffer.ybase+this._activeBuffer.y,n;for(n=this._bufferService.rows-1-this._activeBuffer.scrollBottom,n=this._bufferService.rows-1+this._activeBuffer.ybase-n;i--;)this._activeBuffer.lines.splice(r,1),this._activeBuffer.lines.splice(n,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y,this._activeBuffer.scrollBottom),this._activeBuffer.x=0,!0}insertChars(e){this._restrictCursor();let i=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return i&&(i.insertCells(this._activeBuffer.x,e.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}deleteChars(e){this._restrictCursor();let i=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return i&&(i.deleteCells(this._activeBuffer.x,e.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}scrollUp(e){let i=e.params[0]||1;for(;i--;)this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollTop,1),this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollBottom,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollDown(e){let i=e.params[0]||1;for(;i--;)this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollBottom,1),this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollTop,0,this._activeBuffer.getBlankLine(X));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollLeft(e){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let i=e.params[0]||1;for(let r=this._activeBuffer.scrollTop;r<=this._activeBuffer.scrollBottom;++r){let n=this._activeBuffer.lines.get(this._activeBuffer.ybase+r);n.deleteCells(0,i,this._activeBuffer.getNullCell(this._eraseAttrData())),n.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollRight(e){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let i=e.params[0]||1;for(let r=this._activeBuffer.scrollTop;r<=this._activeBuffer.scrollBottom;++r){let n=this._activeBuffer.lines.get(this._activeBuffer.ybase+r);n.insertCells(0,i,this._activeBuffer.getNullCell(this._eraseAttrData())),n.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}insertColumns(e){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let i=e.params[0]||1;for(let r=this._activeBuffer.scrollTop;r<=this._activeBuffer.scrollBottom;++r){let n=this._activeBuffer.lines.get(this._activeBuffer.ybase+r);n.insertCells(this._activeBuffer.x,i,this._activeBuffer.getNullCell(this._eraseAttrData())),n.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}deleteColumns(e){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let i=e.params[0]||1;for(let r=this._activeBuffer.scrollTop;r<=this._activeBuffer.scrollBottom;++r){let n=this._activeBuffer.lines.get(this._activeBuffer.ybase+r);n.deleteCells(this._activeBuffer.x,i,this._activeBuffer.getNullCell(this._eraseAttrData())),n.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}eraseChars(e){this._restrictCursor();let i=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return i&&(i.replaceCells(this._activeBuffer.x,this._activeBuffer.x+(e.params[0]||1),this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}repeatPrecedingCharacter(e){let i=this._parser.precedingJoinState;if(!i)return!0;let r=e.params[0]||1,n=Ae.extractWidth(i),o=this._activeBuffer.x-n,a=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).getString(o),u=new Uint32Array(a.length*r),h=0;for(let d=0;d<a.length;){let _=a.codePointAt(d)||0;u[h++]=_,d+=_>65535?2:1}let c=h;for(let d=1;d<r;++d)u.copyWithin(c,0,h),c+=h;return this.print(u,0,c),!0}sendDeviceAttributesPrimary(e){return e.params[0]>0||(this._is(\"xterm\")||this._is(\"rxvt-unicode\")||this._is(\"screen\")?this._coreService.triggerDataEvent(b.ESC+\"[?1;2c\"):this._is(\"linux\")&&this._coreService.triggerDataEvent(b.ESC+\"[?6c\")),!0}sendDeviceAttributesSecondary(e){return e.params[0]>0||(this._is(\"xterm\")?this._coreService.triggerDataEvent(b.ESC+\"[>0;276;0c\"):this._is(\"rxvt-unicode\")?this._coreService.triggerDataEvent(b.ESC+\"[>85;95;0c\"):this._is(\"linux\")?this._coreService.triggerDataEvent(e.params[0]+\"c\"):this._is(\"screen\")&&this._coreService.triggerDataEvent(b.ESC+\"[>83;40003;0c\")),!0}_is(e){return(this._optionsService.rawOptions.termName+\"\").indexOf(e)===0}setMode(e){for(let i=0;i<e.length;i++)switch(e.params[i]){case 4:this._coreService.modes.insertMode=!0;break;case 20:this._optionsService.options.convertEol=!0;break}return!0}setModePrivate(e){for(let i=0;i<e.length;i++)switch(e.params[i]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!0;break;case 2:this._charsetService.setgCharset(0,Je),this._charsetService.setgCharset(1,Je),this._charsetService.setgCharset(2,Je),this._charsetService.setgCharset(3,Je);break;case 3:this._optionsService.rawOptions.windowOptions.setWinLines&&(this._bufferService.resize(132,this._bufferService.rows),this._onRequestReset.fire());break;case 6:this._coreService.decPrivateModes.origin=!0,this._setCursor(0,0);break;case 7:this._coreService.decPrivateModes.wraparound=!0;break;case 12:this._optionsService.options.cursorBlink=!0;break;case 45:this._coreService.decPrivateModes.reverseWraparound=!0;break;case 66:this._logService.debug(\"Serial port requested application keypad.\"),this._coreService.decPrivateModes.applicationKeypad=!0,this._onRequestSyncScrollBar.fire();break;case 9:this._coreMouseService.activeProtocol=\"X10\";break;case 1e3:this._coreMouseService.activeProtocol=\"VT200\";break;case 1002:this._coreMouseService.activeProtocol=\"DRAG\";break;case 1003:this._coreMouseService.activeProtocol=\"ANY\";break;case 1004:this._coreService.decPrivateModes.sendFocus=!0,this._onRequestSendFocus.fire();break;case 1005:this._logService.debug(\"DECSET 1005 not supported (see #2507)\");break;case 1006:this._coreMouseService.activeEncoding=\"SGR\";break;case 1015:this._logService.debug(\"DECSET 1015 not supported (see #2507)\");break;case 1016:this._coreMouseService.activeEncoding=\"SGR_PIXELS\";break;case 25:this._coreService.isCursorHidden=!1;break;case 1048:this.saveCursor();break;case 1049:this.saveCursor();case 47:case 1047:this._bufferService.buffers.activateAltBuffer(this._eraseAttrData()),this._coreService.isCursorInitialized=!0,this._onRequestRefreshRows.fire(void 0),this._onRequestSyncScrollBar.fire();break;case 2004:this._coreService.decPrivateModes.bracketedPasteMode=!0;break;case 2026:this._coreService.decPrivateModes.synchronizedOutput=!0;break}return!0}resetMode(e){for(let i=0;i<e.length;i++)switch(e.params[i]){case 4:this._coreService.modes.insertMode=!1;break;case 20:this._optionsService.options.convertEol=!1;break}return!0}resetModePrivate(e){for(let i=0;i<e.length;i++)switch(e.params[i]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!1;break;case 3:this._optionsService.rawOptions.windowOptions.setWinLines&&(this._bufferService.resize(80,this._bufferService.rows),this._onRequestReset.fire());break;case 6:this._coreService.decPrivateModes.origin=!1,this._setCursor(0,0);break;case 7:this._coreService.decPrivateModes.wraparound=!1;break;case 12:this._optionsService.options.cursorBlink=!1;break;case 45:this._coreService.decPrivateModes.reverseWraparound=!1;break;case 66:this._logService.debug(\"Switching back to normal keypad.\"),this._coreService.decPrivateModes.applicationKeypad=!1,this._onRequestSyncScrollBar.fire();break;case 9:case 1e3:case 1002:case 1003:this._coreMouseService.activeProtocol=\"NONE\";break;case 1004:this._coreService.decPrivateModes.sendFocus=!1;break;case 1005:this._logService.debug(\"DECRST 1005 not supported (see #2507)\");break;case 1006:this._coreMouseService.activeEncoding=\"DEFAULT\";break;case 1015:this._logService.debug(\"DECRST 1015 not supported (see #2507)\");break;case 1016:this._coreMouseService.activeEncoding=\"DEFAULT\";break;case 25:this._coreService.isCursorHidden=!0;break;case 1048:this.restoreCursor();break;case 1049:case 47:case 1047:this._bufferService.buffers.activateNormalBuffer(),e.params[i]===1049&&this.restoreCursor(),this._coreService.isCursorInitialized=!0,this._onRequestRefreshRows.fire(void 0),this._onRequestSyncScrollBar.fire();break;case 2004:this._coreService.decPrivateModes.bracketedPasteMode=!1;break;case 2026:this._coreService.decPrivateModes.synchronizedOutput=!1,this._onRequestRefreshRows.fire(void 0);break}return!0}requestMode(e,i){let r;(P=>(P[P.NOT_RECOGNIZED=0]=\"NOT_RECOGNIZED\",P[P.SET=1]=\"SET\",P[P.RESET=2]=\"RESET\",P[P.PERMANENTLY_SET=3]=\"PERMANENTLY_SET\",P[P.PERMANENTLY_RESET=4]=\"PERMANENTLY_RESET\"))(r||={});let n=this._coreService.decPrivateModes,{activeProtocol:o,activeEncoding:l}=this._coreMouseService,a=this._coreService,{buffers:u,cols:h}=this._bufferService,{active:c,alt:d}=u,_=this._optionsService.rawOptions,p=(A,R)=>(a.triggerDataEvent(`${b.ESC}[${i?\"\":\"?\"}${A};${R}$y`),!0),m=A=>A?1:2,f=e.params[0];return i?f===2?p(f,4):f===4?p(f,m(a.modes.insertMode)):f===12?p(f,3):f===20?p(f,m(_.convertEol)):p(f,0):f===1?p(f,m(n.applicationCursorKeys)):f===3?p(f,_.windowOptions.setWinLines?h===80?2:h===132?1:0:0):f===6?p(f,m(n.origin)):f===7?p(f,m(n.wraparound)):f===8?p(f,3):f===9?p(f,m(o===\"X10\")):f===12?p(f,m(_.cursorBlink)):f===25?p(f,m(!a.isCursorHidden)):f===45?p(f,m(n.reverseWraparound)):f===66?p(f,m(n.applicationKeypad)):f===67?p(f,4):f===1e3?p(f,m(o===\"VT200\")):f===1002?p(f,m(o===\"DRAG\")):f===1003?p(f,m(o===\"ANY\")):f===1004?p(f,m(n.sendFocus)):f===1005?p(f,4):f===1006?p(f,m(l===\"SGR\")):f===1015?p(f,4):f===1016?p(f,m(l===\"SGR_PIXELS\")):f===1048?p(f,1):f===47||f===1047||f===1049?p(f,m(c===d)):f===2004?p(f,m(n.bracketedPasteMode)):f===2026?p(f,m(n.synchronizedOutput)):p(f,0)}_updateAttrColor(e,i,r,n,o){return i===2?(e|=50331648,e&=-16777216,e|=De.fromColorRGB([r,n,o])):i===5&&(e&=-50331904,e|=33554432|r&255),e}_extractColor(e,i,r){let n=[0,0,-1,0,0,0],o=0,l=0;do{if(n[l+o]=e.params[i+l],e.hasSubParams(i+l)){let a=e.getSubParams(i+l),u=0;do n[1]===5&&(o=1),n[l+u+1+o]=a[u];while(++u<a.length&&u+l+1+o<n.length);break}if(n[1]===5&&l+o>=2||n[1]===2&&l+o>=5)break;n[1]&&(o=1)}while(++l+i<e.length&&l+o<n.length);for(let a=2;a<n.length;++a)n[a]===-1&&(n[a]=0);switch(n[0]){case 38:r.fg=this._updateAttrColor(r.fg,n[1],n[3],n[4],n[5]);break;case 48:r.bg=this._updateAttrColor(r.bg,n[1],n[3],n[4],n[5]);break;case 58:r.extended=r.extended.clone(),r.extended.underlineColor=this._updateAttrColor(r.extended.underlineColor,n[1],n[3],n[4],n[5])}return l}_processUnderline(e,i){i.extended=i.extended.clone(),(!~e||e>5)&&(e=1),i.extended.underlineStyle=e,i.fg|=268435456,e===0&&(i.fg&=-268435457),i.updateExtended()}_processSGR0(e){e.fg=X.fg,e.bg=X.bg,e.extended=e.extended.clone(),e.extended.underlineStyle=0,e.extended.underlineColor&=-67108864,e.updateExtended()}charAttributes(e){if(e.length===1&&e.params[0]===0)return this._processSGR0(this._curAttrData),!0;let i=e.length,r,n=this._curAttrData;for(let o=0;o<i;o++)r=e.params[o],r>=30&&r<=37?(n.fg&=-50331904,n.fg|=16777216|r-30):r>=40&&r<=47?(n.bg&=-50331904,n.bg|=16777216|r-40):r>=90&&r<=97?(n.fg&=-50331904,n.fg|=16777216|r-90|8):r>=100&&r<=107?(n.bg&=-50331904,n.bg|=16777216|r-100|8):r===0?this._processSGR0(n):r===1?n.fg|=134217728:r===3?n.bg|=67108864:r===4?(n.fg|=268435456,this._processUnderline(e.hasSubParams(o)?e.getSubParams(o)[0]:1,n)):r===5?n.fg|=536870912:r===7?n.fg|=67108864:r===8?n.fg|=1073741824:r===9?n.fg|=2147483648:r===2?n.bg|=134217728:r===21?this._processUnderline(2,n):r===22?(n.fg&=-134217729,n.bg&=-134217729):r===23?n.bg&=-67108865:r===24?(n.fg&=-268435457,this._processUnderline(0,n)):r===25?n.fg&=-536870913:r===27?n.fg&=-67108865:r===28?n.fg&=-1073741825:r===29?n.fg&=2147483647:r===39?(n.fg&=-67108864,n.fg|=X.fg&16777215):r===49?(n.bg&=-67108864,n.bg|=X.bg&16777215):r===38||r===48||r===58?o+=this._extractColor(e,o,n):r===53?n.bg|=1073741824:r===55?n.bg&=-1073741825:r===59?(n.extended=n.extended.clone(),n.extended.underlineColor=-1,n.updateExtended()):r===100?(n.fg&=-67108864,n.fg|=X.fg&16777215,n.bg&=-67108864,n.bg|=X.bg&16777215):this._logService.debug(\"Unknown SGR attribute: %d.\",r);return!0}deviceStatus(e){switch(e.params[0]){case 5:this._coreService.triggerDataEvent(`${b.ESC}[0n`);break;case 6:let i=this._activeBuffer.y+1,r=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${b.ESC}[${i};${r}R`);break}return!0}deviceStatusPrivate(e){switch(e.params[0]){case 6:let i=this._activeBuffer.y+1,r=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${b.ESC}[?${i};${r}R`);break;case 15:break;case 25:break;case 26:break;case 53:break}return!0}softReset(e){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=X.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0}setCursorStyle(e){let i=e.length===0?1:e.params[0];if(i===0)this._coreService.decPrivateModes.cursorStyle=void 0,this._coreService.decPrivateModes.cursorBlink=void 0;else{switch(i){case 1:case 2:this._coreService.decPrivateModes.cursorStyle=\"block\";break;case 3:case 4:this._coreService.decPrivateModes.cursorStyle=\"underline\";break;case 5:case 6:this._coreService.decPrivateModes.cursorStyle=\"bar\";break}let r=i%2===1;this._coreService.decPrivateModes.cursorBlink=r}return!0}setScrollRegion(e){let i=e.params[0]||1,r;return(e.length<2||(r=e.params[1])>this._bufferService.rows||r===0)&&(r=this._bufferService.rows),r>i&&(this._activeBuffer.scrollTop=i-1,this._activeBuffer.scrollBottom=r-1,this._setCursor(0,0)),!0}windowOptions(e){if(!bl(e.params[0],this._optionsService.rawOptions.windowOptions))return!0;let i=e.length>1?e.params[1]:0;switch(e.params[0]){case 14:i!==2&&this._onRequestWindowsOptionsReport.fire(0);break;case 16:this._onRequestWindowsOptionsReport.fire(1);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`${b.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:(i===0||i===2)&&(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>_l&&this._windowTitleStack.shift()),(i===0||i===1)&&(this._iconNameStack.push(this._iconName),this._iconNameStack.length>_l&&this._iconNameStack.shift());break;case 23:(i===0||i===2)&&this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),(i===0||i===1)&&this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop());break}return!0}saveCursor(e){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,!0}restoreCursor(e){return this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg,this._charsetService.charset=this._savedCharset,this._activeBuffer.savedCharset&&(this._charsetService.charset=this._activeBuffer.savedCharset),this._restrictCursor(),!0}setTitle(e){return this._windowTitle=e,this._onTitleChange.fire(e),!0}setIconName(e){return this._iconName=e,!0}setOrReportIndexedColor(e){let i=[],r=e.split(\";\");for(;r.length>1;){let n=r.shift(),o=r.shift();if(/^\\d+$/.exec(n)){let l=parseInt(n);if(Sl(l))if(o===\"?\")i.push({type:0,index:l});else{let a=Ws(o);a&&i.push({type:1,index:l,color:a})}}}return i.length&&this._onColor.fire(i),!0}setHyperlink(e){let i=e.indexOf(\";\");if(i===-1)return!0;let r=e.slice(0,i).trim(),n=e.slice(i+1);return n?this._createHyperlink(r,n):r.trim()?!1:this._finishHyperlink()}_createHyperlink(e,i){this._getCurrentLinkId()&&this._finishHyperlink();let r=e.split(\":\"),n,o=r.findIndex(l=>l.startsWith(\"id=\"));return o!==-1&&(n=r[o].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:n,uri:i}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(e,i){let r=e.split(\";\");for(let n=0;n<r.length&&!(i>=this._specialColors.length);++n,++i)if(r[n]===\"?\")this._onColor.fire([{type:0,index:this._specialColors[i]}]);else{let o=Ws(r[n]);o&&this._onColor.fire([{type:1,index:this._specialColors[i],color:o}])}return!0}setOrReportFgColor(e){return this._setOrReportSpecialColor(e,0)}setOrReportBgColor(e){return this._setOrReportSpecialColor(e,1)}setOrReportCursorColor(e){return this._setOrReportSpecialColor(e,2)}restoreIndexedColor(e){if(!e)return this._onColor.fire([{type:2}]),!0;let i=[],r=e.split(\";\");for(let n=0;n<r.length;++n)if(/^\\d+$/.exec(r[n])){let o=parseInt(r[n]);Sl(o)&&i.push({type:2,index:o})}return i.length&&this._onColor.fire(i),!0}restoreFgColor(e){return this._onColor.fire([{type:2,index:256}]),!0}restoreBgColor(e){return this._onColor.fire([{type:2,index:257}]),!0}restoreCursorColor(e){return this._onColor.fire([{type:2,index:258}]),!0}nextLine(){return this._activeBuffer.x=0,this.index(),!0}keypadApplicationMode(){return this._logService.debug(\"Serial port requested application keypad.\"),this._coreService.decPrivateModes.applicationKeypad=!0,this._onRequestSyncScrollBar.fire(),!0}keypadNumericMode(){return this._logService.debug(\"Switching back to normal keypad.\"),this._coreService.decPrivateModes.applicationKeypad=!1,this._onRequestSyncScrollBar.fire(),!0}selectDefaultCharset(){return this._charsetService.setgLevel(0),this._charsetService.setgCharset(0,Je),!0}selectCharset(e){return e.length!==2?(this.selectDefaultCharset(),!0):(e[0]===\"/\"||this._charsetService.setgCharset(mc[e[0]],ne[e[1]]||Je),!0)}index(){return this._restrictCursor(),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0}tabSet(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0}reverseIndex(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){let e=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,e,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0}fullReset(){return this._parser.reset(),this._onRequestReset.fire(),!0}reset(){this._curAttrData=X.clone(),this._eraseAttrDataInternal=X.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=this._curAttrData.bg&67108863,this._eraseAttrDataInternal}setgLevel(e){return this._charsetService.setgLevel(e),!0}screenAlignmentPattern(){let e=new q;e.content=1<<22|69,e.fg=this._curAttrData.fg,e.bg=this._curAttrData.bg,this._setCursor(0,0);for(let i=0;i<this._bufferService.rows;++i){let r=this._activeBuffer.ybase+this._activeBuffer.y+i,n=this._activeBuffer.lines.get(r);n&&(n.fill(e),n.isWrapped=!1)}return this._dirtyRowTracker.markAllDirty(),this._setCursor(0,0),!0}requestStatusString(e,i){let r=a=>(this._coreService.triggerDataEvent(`${b.ESC}${a}${b.ESC}\\\\`),!0),n=this._bufferService.buffer,o=this._optionsService.rawOptions,l={block:2,underline:4,bar:6};return r(e==='\"q'?`P1$r${this._curAttrData.isProtected()?1:0}\"q`:e==='\"p'?'P1$r61;1\"p':e===\"r\"?`P1$r${n.scrollTop+1};${n.scrollBottom+1}r`:e===\"m\"?\"P1$r0m\":e===\" q\"?`P1$r${l[o.cursorStyle]-(o.cursorBlink?1:0)} q`:\"P0$r\")}markRangeDirty(e,i){this._dirtyRowTracker.markRangeDirty(e,i)}},Zi=class{constructor(t){this._bufferService=t;this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(t){t<this.start?this.start=t:t>this.end&&(this.end=t)}markRangeDirty(t,e){t>e&&(gl=t,t=e,e=gl),t<this.start&&(this.start=t),e>this.end&&(this.end=e)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};Zi=M([S(0,F)],Zi);function Sl(s){return 0<=s&&s<256}var _c=5e7,El=12,bc=50,gn=class extends D{constructor(e){super();this._action=e;this._writeBuffer=[];this._callbacks=[];this._pendingData=0;this._bufferOffset=0;this._isSyncWriting=!1;this._syncCalls=0;this._didUserInput=!1;this._onWriteParsed=this._register(new v);this.onWriteParsed=this._onWriteParsed.event}handleUserInput(){this._didUserInput=!0}writeSync(e,i){if(i!==void 0&&this._syncCalls>i){this._syncCalls=0;return}if(this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(void 0),this._syncCalls++,this._isSyncWriting)return;this._isSyncWriting=!0;let r;for(;r=this._writeBuffer.shift();){this._action(r);let n=this._callbacks.shift();n&&n()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}write(e,i){if(this._pendingData>_c)throw new Error(\"write data discarded, use flow control to avoid losing data\");if(!this._writeBuffer.length){if(this._bufferOffset=0,this._didUserInput){this._didUserInput=!1,this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(i),this._innerWrite();return}setTimeout(()=>this._innerWrite())}this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(i)}_innerWrite(e=0,i=!0){let r=e||performance.now();for(;this._writeBuffer.length>this._bufferOffset;){let n=this._writeBuffer[this._bufferOffset],o=this._action(n,i);if(o){let a=u=>performance.now()-r>=El?setTimeout(()=>this._innerWrite(0,u)):this._innerWrite(r,u);o.catch(u=>(queueMicrotask(()=>{throw u}),Promise.resolve(!1))).then(a);return}let l=this._callbacks[this._bufferOffset];if(l&&l(),this._bufferOffset++,this._pendingData-=n.length,performance.now()-r>=El)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>bc&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),setTimeout(()=>this._innerWrite())):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0),this._onWriteParsed.fire()}};var ui=class{constructor(t){this._bufferService=t;this._nextId=1;this._entriesWithId=new Map;this._dataByLinkId=new Map}registerLink(t){let e=this._bufferService.buffer;if(t.id===void 0){let a=e.addMarker(e.ybase+e.y),u={data:t,id:this._nextId++,lines:[a]};return a.onDispose(()=>this._removeMarkerFromLink(u,a)),this._dataByLinkId.set(u.id,u),u.id}let i=t,r=this._getEntryIdKey(i),n=this._entriesWithId.get(r);if(n)return this.addLineToLink(n.id,e.ybase+e.y),n.id;let o=e.addMarker(e.ybase+e.y),l={id:this._nextId++,key:this._getEntryIdKey(i),data:i,lines:[o]};return o.onDispose(()=>this._removeMarkerFromLink(l,o)),this._entriesWithId.set(l.key,l),this._dataByLinkId.set(l.id,l),l.id}addLineToLink(t,e){let i=this._dataByLinkId.get(t);if(i&&i.lines.every(r=>r.line!==e)){let r=this._bufferService.buffer.addMarker(e);i.lines.push(r),r.onDispose(()=>this._removeMarkerFromLink(i,r))}}getLinkData(t){return this._dataByLinkId.get(t)?.data}_getEntryIdKey(t){return`${t.id};;${t.uri}`}_removeMarkerFromLink(t,e){let i=t.lines.indexOf(e);i!==-1&&(t.lines.splice(i,1),t.lines.length===0&&(t.data.id!==void 0&&this._entriesWithId.delete(t.key),this._dataByLinkId.delete(t.id)))}};ui=M([S(0,F)],ui);var Tl=!1,Sn=class extends D{constructor(e){super();this._windowsWrappingHeuristics=this._register(new ye);this._onBinary=this._register(new v);this.onBinary=this._onBinary.event;this._onData=this._register(new v);this.onData=this._onData.event;this._onLineFeed=this._register(new v);this.onLineFeed=this._onLineFeed.event;this._onResize=this._register(new v);this.onResize=this._onResize.event;this._onWriteParsed=this._register(new v);this.onWriteParsed=this._onWriteParsed.event;this._onScroll=this._register(new v);this._instantiationService=new ln,this.optionsService=this._register(new dn(e)),this._instantiationService.setService(H,this.optionsService),this._bufferService=this._register(this._instantiationService.createInstance(ni)),this._instantiationService.setService(F,this._bufferService),this._logService=this._register(this._instantiationService.createInstance(ii)),this._instantiationService.setService(nr,this._logService),this.coreService=this._register(this._instantiationService.createInstance(li)),this._instantiationService.setService(ge,this.coreService),this.coreMouseService=this._register(this._instantiationService.createInstance(ai)),this._instantiationService.setService(rr,this.coreMouseService),this.unicodeService=this._register(this._instantiationService.createInstance(Ae)),this._instantiationService.setService(Js,this.unicodeService),this._charsetService=this._instantiationService.createInstance(pn),this._instantiationService.setService(Zs,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(ui),this._instantiationService.setService(sr,this._oscLinkService),this._inputHandler=this._register(new vn(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.coreMouseService,this.unicodeService)),this._register($.forward(this._inputHandler.onLineFeed,this._onLineFeed)),this._register(this._inputHandler),this._register($.forward(this._bufferService.onResize,this._onResize)),this._register($.forward(this.coreService.onData,this._onData)),this._register($.forward(this.coreService.onBinary,this._onBinary)),this._register(this.coreService.onRequestScrollToBottom(()=>this.scrollToBottom(!0))),this._register(this.coreService.onUserInput(()=>this._writeBuffer.handleUserInput())),this._register(this.optionsService.onMultipleOptionChange([\"windowsMode\",\"windowsPty\"],()=>this._handleWindowsPtyOptionChange())),this._register(this._bufferService.onScroll(()=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)})),this._writeBuffer=this._register(new gn((i,r)=>this._inputHandler.parse(i,r))),this._register($.forward(this._writeBuffer.onWriteParsed,this._onWriteParsed))}get onScroll(){return this._onScrollApi||(this._onScrollApi=this._register(new v),this._onScroll.event(e=>{this._onScrollApi?.fire(e.position)})),this._onScrollApi.event}get cols(){return this._bufferService.cols}get rows(){return this._bufferService.rows}get buffers(){return this._bufferService.buffers}get options(){return this.optionsService.options}set options(e){for(let i in e)this.optionsService.options[i]=e[i]}write(e,i){this._writeBuffer.write(e,i)}writeSync(e,i){this._logService.logLevel<=3&&!Tl&&(this._logService.warn(\"writeSync is unreliable and will be removed soon.\"),Tl=!0),this._writeBuffer.writeSync(e,i)}input(e,i=!0){this.coreService.triggerDataEvent(e,i)}resize(e,i){isNaN(e)||isNaN(i)||(e=Math.max(e,ks),i=Math.max(i,Cs),this._bufferService.resize(e,i))}scroll(e,i=!1){this._bufferService.scroll(e,i)}scrollLines(e,i){this._bufferService.scrollLines(e,i)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){let i=e-this._bufferService.buffer.ydisp;i!==0&&this.scrollLines(i)}registerEscHandler(e,i){return this._inputHandler.registerEscHandler(e,i)}registerDcsHandler(e,i){return this._inputHandler.registerDcsHandler(e,i)}registerCsiHandler(e,i){return this._inputHandler.registerCsiHandler(e,i)}registerOscHandler(e,i){return this._inputHandler.registerOscHandler(e,i)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.coreMouseService.reset()}_handleWindowsPtyOptionChange(){let e=!1,i=this.optionsService.rawOptions.windowsPty;i&&i.buildNumber!==void 0&&i.buildNumber!==void 0?e=i.backend===\"conpty\"&&i.buildNumber<21376:this.optionsService.rawOptions.windowsMode&&(e=!0),e?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){let e=[];e.push(this.onLineFeed(Bs.bind(null,this._bufferService))),e.push(this.registerCsiHandler({final:\"H\"},()=>(Bs(this._bufferService),!1))),this._windowsWrappingHeuristics.value=C(()=>{for(let i of e)i.dispose()})}}};var gc={48:[\"0\",\")\"],49:[\"1\",\"!\"],50:[\"2\",\"@\"],51:[\"3\",\"#\"],52:[\"4\",\"$\"],53:[\"5\",\"%\"],54:[\"6\",\"^\"],55:[\"7\",\"&\"],56:[\"8\",\"*\"],57:[\"9\",\"(\"],186:[\";\",\":\"],187:[\"=\",\"+\"],188:[\",\",\"<\"],189:[\"-\",\"_\"],190:[\".\",\">\"],191:[\"/\",\"?\"],192:[\"`\",\"~\"],219:[\"[\",\"{\"],220:[\"\\\\\",\"|\"],221:[\"]\",\"}\"],222:[\"'\",'\"']};function Il(s,t,e,i){let r={type:0,cancel:!1,key:void 0},n=(s.shiftKey?1:0)|(s.altKey?2:0)|(s.ctrlKey?4:0)|(s.metaKey?8:0);switch(s.keyCode){case 0:s.key===\"UIKeyInputUpArrow\"?t?r.key=b.ESC+\"OA\":r.key=b.ESC+\"[A\":s.key===\"UIKeyInputLeftArrow\"?t?r.key=b.ESC+\"OD\":r.key=b.ESC+\"[D\":s.key===\"UIKeyInputRightArrow\"?t?r.key=b.ESC+\"OC\":r.key=b.ESC+\"[C\":s.key===\"UIKeyInputDownArrow\"&&(t?r.key=b.ESC+\"OB\":r.key=b.ESC+\"[B\");break;case 8:r.key=s.ctrlKey?\"\\b\":b.DEL,s.altKey&&(r.key=b.ESC+r.key);break;case 9:if(s.shiftKey){r.key=b.ESC+\"[Z\";break}r.key=b.HT,r.cancel=!0;break;case 13:r.key=s.altKey?b.ESC+b.CR:b.CR,r.cancel=!0;break;case 27:r.key=b.ESC,s.altKey&&(r.key=b.ESC+b.ESC),r.cancel=!0;break;case 37:if(s.metaKey)break;n?r.key=b.ESC+\"[1;\"+(n+1)+\"D\":t?r.key=b.ESC+\"OD\":r.key=b.ESC+\"[D\";break;case 39:if(s.metaKey)break;n?r.key=b.ESC+\"[1;\"+(n+1)+\"C\":t?r.key=b.ESC+\"OC\":r.key=b.ESC+\"[C\";break;case 38:if(s.metaKey)break;n?r.key=b.ESC+\"[1;\"+(n+1)+\"A\":t?r.key=b.ESC+\"OA\":r.key=b.ESC+\"[A\";break;case 40:if(s.metaKey)break;n?r.key=b.ESC+\"[1;\"+(n+1)+\"B\":t?r.key=b.ESC+\"OB\":r.key=b.ESC+\"[B\";break;case 45:!s.shiftKey&&!s.ctrlKey&&(r.key=b.ESC+\"[2~\");break;case 46:n?r.key=b.ESC+\"[3;\"+(n+1)+\"~\":r.key=b.ESC+\"[3~\";break;case 36:n?r.key=b.ESC+\"[1;\"+(n+1)+\"H\":t?r.key=b.ESC+\"OH\":r.key=b.ESC+\"[H\";break;case 35:n?r.key=b.ESC+\"[1;\"+(n+1)+\"F\":t?r.key=b.ESC+\"OF\":r.key=b.ESC+\"[F\";break;case 33:s.shiftKey?r.type=2:s.ctrlKey?r.key=b.ESC+\"[5;\"+(n+1)+\"~\":r.key=b.ESC+\"[5~\";break;case 34:s.shiftKey?r.type=3:s.ctrlKey?r.key=b.ESC+\"[6;\"+(n+1)+\"~\":r.key=b.ESC+\"[6~\";break;case 112:n?r.key=b.ESC+\"[1;\"+(n+1)+\"P\":r.key=b.ESC+\"OP\";break;case 113:n?r.key=b.ESC+\"[1;\"+(n+1)+\"Q\":r.key=b.ESC+\"OQ\";break;case 114:n?r.key=b.ESC+\"[1;\"+(n+1)+\"R\":r.key=b.ESC+\"OR\";break;case 115:n?r.key=b.ESC+\"[1;\"+(n+1)+\"S\":r.key=b.ESC+\"OS\";break;case 116:n?r.key=b.ESC+\"[15;\"+(n+1)+\"~\":r.key=b.ESC+\"[15~\";break;case 117:n?r.key=b.ESC+\"[17;\"+(n+1)+\"~\":r.key=b.ESC+\"[17~\";break;case 118:n?r.key=b.ESC+\"[18;\"+(n+1)+\"~\":r.key=b.ESC+\"[18~\";break;case 119:n?r.key=b.ESC+\"[19;\"+(n+1)+\"~\":r.key=b.ESC+\"[19~\";break;case 120:n?r.key=b.ESC+\"[20;\"+(n+1)+\"~\":r.key=b.ESC+\"[20~\";break;case 121:n?r.key=b.ESC+\"[21;\"+(n+1)+\"~\":r.key=b.ESC+\"[21~\";break;case 122:n?r.key=b.ESC+\"[23;\"+(n+1)+\"~\":r.key=b.ESC+\"[23~\";break;case 123:n?r.key=b.ESC+\"[24;\"+(n+1)+\"~\":r.key=b.ESC+\"[24~\";break;default:if(s.ctrlKey&&!s.shiftKey&&!s.altKey&&!s.metaKey)s.keyCode>=65&&s.keyCode<=90?r.key=String.fromCharCode(s.keyCode-64):s.keyCode===32?r.key=b.NUL:s.keyCode>=51&&s.keyCode<=55?r.key=String.fromCharCode(s.keyCode-51+27):s.keyCode===56?r.key=b.DEL:s.keyCode===219?r.key=b.ESC:s.keyCode===220?r.key=b.FS:s.keyCode===221&&(r.key=b.GS);else if((!e||i)&&s.altKey&&!s.metaKey){let l=gc[s.keyCode]?.[s.shiftKey?1:0];if(l)r.key=b.ESC+l;else if(s.keyCode>=65&&s.keyCode<=90){let a=s.ctrlKey?s.keyCode-64:s.keyCode+32,u=String.fromCharCode(a);s.shiftKey&&(u=u.toUpperCase()),r.key=b.ESC+u}else if(s.keyCode===32)r.key=b.ESC+(s.ctrlKey?b.NUL:\" \");else if(s.key===\"Dead\"&&s.code.startsWith(\"Key\")){let a=s.code.slice(3,4);s.shiftKey||(a=a.toLowerCase()),r.key=b.ESC+a,r.cancel=!0}}else e&&!s.altKey&&!s.ctrlKey&&!s.shiftKey&&s.metaKey?s.keyCode===65&&(r.type=1):s.key&&!s.ctrlKey&&!s.altKey&&!s.metaKey&&s.keyCode>=48&&s.key.length===1?r.key=s.key:s.key&&s.ctrlKey&&(s.key===\"_\"&&(r.key=b.US),s.key===\"@\"&&(r.key=b.NUL));break}return r}var ee=0,En=class{constructor(t){this._getKey=t;this._array=[];this._insertedValues=[];this._flushInsertedTask=new Jt;this._isFlushingInserted=!1;this._deletedIndices=[];this._flushDeletedTask=new Jt;this._isFlushingDeleted=!1}clear(){this._array.length=0,this._insertedValues.length=0,this._flushInsertedTask.clear(),this._isFlushingInserted=!1,this._deletedIndices.length=0,this._flushDeletedTask.clear(),this._isFlushingDeleted=!1}insert(t){this._flushCleanupDeleted(),this._insertedValues.length===0&&this._flushInsertedTask.enqueue(()=>this._flushInserted()),this._insertedValues.push(t)}_flushInserted(){let t=this._insertedValues.sort((n,o)=>this._getKey(n)-this._getKey(o)),e=0,i=0,r=new Array(this._array.length+this._insertedValues.length);for(let n=0;n<r.length;n++)i>=this._array.length||this._getKey(t[e])<=this._getKey(this._array[i])?(r[n]=t[e],e++):r[n]=this._array[i++];this._array=r,this._insertedValues.length=0}_flushCleanupInserted(){!this._isFlushingInserted&&this._insertedValues.length>0&&this._flushInsertedTask.flush()}delete(t){if(this._flushCleanupInserted(),this._array.length===0)return!1;let e=this._getKey(t);if(e===void 0||(ee=this._search(e),ee===-1)||this._getKey(this._array[ee])!==e)return!1;do if(this._array[ee]===t)return this._deletedIndices.length===0&&this._flushDeletedTask.enqueue(()=>this._flushDeleted()),this._deletedIndices.push(ee),!0;while(++ee<this._array.length&&this._getKey(this._array[ee])===e);return!1}_flushDeleted(){this._isFlushingDeleted=!0;let t=this._deletedIndices.sort((n,o)=>n-o),e=0,i=new Array(this._array.length-t.length),r=0;for(let n=0;n<this._array.length;n++)t[e]===n?e++:i[r++]=this._array[n];this._array=i,this._deletedIndices.length=0,this._isFlushingDeleted=!1}_flushCleanupDeleted(){!this._isFlushingDeleted&&this._deletedIndices.length>0&&this._flushDeletedTask.flush()}*getKeyIterator(t){if(this._flushCleanupInserted(),this._flushCleanupDeleted(),this._array.length!==0&&(ee=this._search(t),!(ee<0||ee>=this._array.length)&&this._getKey(this._array[ee])===t))do yield this._array[ee];while(++ee<this._array.length&&this._getKey(this._array[ee])===t)}forEachByKey(t,e){if(this._flushCleanupInserted(),this._flushCleanupDeleted(),this._array.length!==0&&(ee=this._search(t),!(ee<0||ee>=this._array.length)&&this._getKey(this._array[ee])===t))do e(this._array[ee]);while(++ee<this._array.length&&this._getKey(this._array[ee])===t)}values(){return this._flushCleanupInserted(),this._flushCleanupDeleted(),[...this._array].values()}_search(t){let e=0,i=this._array.length-1;for(;i>=e;){let r=e+i>>1,n=this._getKey(this._array[r]);if(n>t)i=r-1;else if(n<t)e=r+1;else{for(;r>0&&this._getKey(this._array[r-1])===t;)r--;return r}}return e}};var Us=0,yl=0,Tn=class extends D{constructor(){super();this._decorations=new En(e=>e?.marker.line);this._onDecorationRegistered=this._register(new v);this.onDecorationRegistered=this._onDecorationRegistered.event;this._onDecorationRemoved=this._register(new v);this.onDecorationRemoved=this._onDecorationRemoved.event;this._register(C(()=>this.reset()))}get decorations(){return this._decorations.values()}registerDecoration(e){if(e.marker.isDisposed)return;let i=new Ks(e);if(i){let r=i.marker.onDispose(()=>i.dispose()),n=i.onDispose(()=>{n.dispose(),i&&(this._decorations.delete(i)&&this._onDecorationRemoved.fire(i),r.dispose())});this._decorations.insert(i),this._onDecorationRegistered.fire(i)}return i}reset(){for(let e of this._decorations.values())e.dispose();this._decorations.clear()}*getDecorationsAtCell(e,i,r){let n=0,o=0;for(let l of this._decorations.getKeyIterator(i))n=l.options.x??0,o=n+(l.options.width??1),e>=n&&e<o&&(!r||(l.options.layer??\"bottom\")===r)&&(yield l)}forEachDecorationAtCell(e,i,r,n){this._decorations.forEachByKey(i,o=>{Us=o.options.x??0,yl=Us+(o.options.width??1),e>=Us&&e<yl&&(!r||(o.options.layer??\"bottom\")===r)&&n(o)})}},Ks=class extends Ee{constructor(e){super();this.options=e;this.onRenderEmitter=this.add(new v);this.onRender=this.onRenderEmitter.event;this._onDispose=this.add(new v);this.onDispose=this._onDispose.event;this._cachedBg=null;this._cachedFg=null;this.marker=e.marker,this.options.overviewRulerOptions&&!this.options.overviewRulerOptions.position&&(this.options.overviewRulerOptions.position=\"full\")}get backgroundColorRGB(){return this._cachedBg===null&&(this.options.backgroundColor?this._cachedBg=z.toColor(this.options.backgroundColor):this._cachedBg=void 0),this._cachedBg}get foregroundColorRGB(){return this._cachedFg===null&&(this.options.foregroundColor?this._cachedFg=z.toColor(this.options.foregroundColor):this._cachedFg=void 0),this._cachedFg}dispose(){this._onDispose.fire(),super.dispose()}};var Sc=1e3,In=class{constructor(t,e=Sc){this._renderCallback=t;this._debounceThresholdMS=e;this._lastRefreshMs=0;this._additionalRefreshRequested=!1}dispose(){this._refreshTimeoutID&&clearTimeout(this._refreshTimeoutID)}refresh(t,e,i){this._rowCount=i,t=t!==void 0?t:0,e=e!==void 0?e:this._rowCount-1,this._rowStart=this._rowStart!==void 0?Math.min(this._rowStart,t):t,this._rowEnd=this._rowEnd!==void 0?Math.max(this._rowEnd,e):e;let r=performance.now();if(r-this._lastRefreshMs>=this._debounceThresholdMS)this._lastRefreshMs=r,this._innerRefresh();else if(!this._additionalRefreshRequested){let n=r-this._lastRefreshMs,o=this._debounceThresholdMS-n;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout(()=>{this._lastRefreshMs=performance.now(),this._innerRefresh(),this._additionalRefreshRequested=!1,this._refreshTimeoutID=void 0},o)}}_innerRefresh(){if(this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0)return;let t=Math.max(this._rowStart,0),e=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(t,e)}};var xl=20;var wl=!1,Tt=class extends D{constructor(e,i,r,n){super();this._terminal=e;this._coreBrowserService=r;this._renderService=n;this._rowColumns=new WeakMap;this._liveRegionLineCount=0;this._charsToConsume=[];this._charsToAnnounce=\"\";let o=this._coreBrowserService.mainDocument;this._accessibilityContainer=o.createElement(\"div\"),this._accessibilityContainer.classList.add(\"xterm-accessibility\"),this._rowContainer=o.createElement(\"div\"),this._rowContainer.setAttribute(\"role\",\"list\"),this._rowContainer.classList.add(\"xterm-accessibility-tree\"),this._rowElements=[];for(let l=0;l<this._terminal.rows;l++)this._rowElements[l]=this._createAccessibilityTreeNode(),this._rowContainer.appendChild(this._rowElements[l]);if(this._topBoundaryFocusListener=l=>this._handleBoundaryFocus(l,0),this._bottomBoundaryFocusListener=l=>this._handleBoundaryFocus(l,1),this._rowElements[0].addEventListener(\"focus\",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener(\"focus\",this._bottomBoundaryFocusListener),this._accessibilityContainer.appendChild(this._rowContainer),this._liveRegion=o.createElement(\"div\"),this._liveRegion.classList.add(\"live-region\"),this._liveRegion.setAttribute(\"aria-live\",\"assertive\"),this._accessibilityContainer.appendChild(this._liveRegion),this._liveRegionDebouncer=this._register(new In(this._renderRows.bind(this))),!this._terminal.element)throw new Error(\"Cannot enable accessibility before Terminal.open\");wl?(this._accessibilityContainer.classList.add(\"debug\"),this._rowContainer.classList.add(\"debug\"),this._debugRootContainer=o.createElement(\"div\"),this._debugRootContainer.classList.add(\"xterm\"),this._debugRootContainer.appendChild(o.createTextNode(\"------start a11y------\")),this._debugRootContainer.appendChild(this._accessibilityContainer),this._debugRootContainer.appendChild(o.createTextNode(\"------end a11y------\")),this._terminal.element.insertAdjacentElement(\"afterend\",this._debugRootContainer)):this._terminal.element.insertAdjacentElement(\"afterbegin\",this._accessibilityContainer),this._register(this._terminal.onResize(l=>this._handleResize(l.rows))),this._register(this._terminal.onRender(l=>this._refreshRows(l.start,l.end))),this._register(this._terminal.onScroll(()=>this._refreshRows())),this._register(this._terminal.onA11yChar(l=>this._handleChar(l))),this._register(this._terminal.onLineFeed(()=>this._handleChar(`\n`))),this._register(this._terminal.onA11yTab(l=>this._handleTab(l))),this._register(this._terminal.onKey(l=>this._handleKey(l.key))),this._register(this._terminal.onBlur(()=>this._clearLiveRegion())),this._register(this._renderService.onDimensionsChange(()=>this._refreshRowsDimensions())),this._register(L(o,\"selectionchange\",()=>this._handleSelectionChange())),this._register(this._coreBrowserService.onDprChange(()=>this._refreshRowsDimensions())),this._refreshRowsDimensions(),this._refreshRows(),this._register(C(()=>{wl?this._debugRootContainer.remove():this._accessibilityContainer.remove(),this._rowElements.length=0}))}_handleTab(e){for(let i=0;i<e;i++)this._handleChar(\" \")}_handleChar(e){this._liveRegionLineCount<xl+1&&(this._charsToConsume.length>0?this._charsToConsume.shift()!==e&&(this._charsToAnnounce+=e):this._charsToAnnounce+=e,e===`\n`&&(this._liveRegionLineCount++,this._liveRegionLineCount===xl+1&&(this._liveRegion.textContent+=_i.get())))}_clearLiveRegion(){this._liveRegion.textContent=\"\",this._liveRegionLineCount=0}_handleKey(e){this._clearLiveRegion(),/\\p{Control}/u.test(e)||this._charsToConsume.push(e)}_refreshRows(e,i){this._liveRegionDebouncer.refresh(e,i,this._terminal.rows)}_renderRows(e,i){let r=this._terminal.buffer,n=r.lines.length.toString();for(let o=e;o<=i;o++){let l=r.lines.get(r.ydisp+o),a=[],u=l?.translateToString(!0,void 0,void 0,a)||\"\",h=(r.ydisp+o+1).toString(),c=this._rowElements[o];c&&(u.length===0?(c.textContent=\"\\xA0\",this._rowColumns.set(c,[0,1])):(c.textContent=u,this._rowColumns.set(c,a)),c.setAttribute(\"aria-posinset\",h),c.setAttribute(\"aria-setsize\",n),this._alignRowWidth(c))}this._announceCharacters()}_announceCharacters(){this._charsToAnnounce.length!==0&&(this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce=\"\")}_handleBoundaryFocus(e,i){let r=e.target,n=this._rowElements[i===0?1:this._rowElements.length-2],o=r.getAttribute(\"aria-posinset\"),l=i===0?\"1\":`${this._terminal.buffer.lines.length}`;if(o===l||e.relatedTarget!==n)return;let a,u;if(i===0?(a=r,u=this._rowElements.pop(),this._rowContainer.removeChild(u)):(a=this._rowElements.shift(),u=r,this._rowContainer.removeChild(a)),a.removeEventListener(\"focus\",this._topBoundaryFocusListener),u.removeEventListener(\"focus\",this._bottomBoundaryFocusListener),i===0){let h=this._createAccessibilityTreeNode();this._rowElements.unshift(h),this._rowContainer.insertAdjacentElement(\"afterbegin\",h)}else{let h=this._createAccessibilityTreeNode();this._rowElements.push(h),this._rowContainer.appendChild(h)}this._rowElements[0].addEventListener(\"focus\",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener(\"focus\",this._bottomBoundaryFocusListener),this._terminal.scrollLines(i===0?-1:1),this._rowElements[i===0?1:this._rowElements.length-2].focus(),e.preventDefault(),e.stopImmediatePropagation()}_handleSelectionChange(){if(this._rowElements.length===0)return;let e=this._coreBrowserService.mainDocument.getSelection();if(!e)return;if(e.isCollapsed){this._rowContainer.contains(e.anchorNode)&&this._terminal.clearSelection();return}if(!e.anchorNode||!e.focusNode){console.error(\"anchorNode and/or focusNode are null\");return}let i={node:e.anchorNode,offset:e.anchorOffset},r={node:e.focusNode,offset:e.focusOffset};if((i.node.compareDocumentPosition(r.node)&Node.DOCUMENT_POSITION_PRECEDING||i.node===r.node&&i.offset>r.offset)&&([i,r]=[r,i]),i.node.compareDocumentPosition(this._rowElements[0])&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_FOLLOWING)&&(i={node:this._rowElements[0].childNodes[0],offset:0}),!this._rowContainer.contains(i.node))return;let n=this._rowElements.slice(-1)[0];if(r.node.compareDocumentPosition(n)&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_PRECEDING)&&(r={node:n,offset:n.textContent?.length??0}),!this._rowContainer.contains(r.node))return;let o=({node:u,offset:h})=>{let c=u instanceof Text?u.parentNode:u,d=parseInt(c?.getAttribute(\"aria-posinset\"),10)-1;if(isNaN(d))return console.warn(\"row is invalid. Race condition?\"),null;let _=this._rowColumns.get(c);if(!_)return console.warn(\"columns is null. Race condition?\"),null;let p=h<_.length?_[h]:_.slice(-1)[0]+1;return p>=this._terminal.cols&&(++d,p=0),{row:d,column:p}},l=o(i),a=o(r);if(!(!l||!a)){if(l.row>a.row||l.row===a.row&&l.column>=a.column)throw new Error(\"invalid range\");this._terminal.select(l.column,l.row,(a.row-l.row)*this._terminal.cols-l.column+a.column)}}_handleResize(e){this._rowElements[this._rowElements.length-1].removeEventListener(\"focus\",this._bottomBoundaryFocusListener);for(let i=this._rowContainer.children.length;i<this._terminal.rows;i++)this._rowElements[i]=this._createAccessibilityTreeNode(),this._rowContainer.appendChild(this._rowElements[i]);for(;this._rowElements.length>e;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener(\"focus\",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()}_createAccessibilityTreeNode(){let e=this._coreBrowserService.mainDocument.createElement(\"div\");return e.setAttribute(\"role\",\"listitem\"),e.tabIndex=-1,this._refreshRowDimensions(e),e}_refreshRowsDimensions(){if(this._renderService.dimensions.css.cell.height){Object.assign(this._accessibilityContainer.style,{width:`${this._renderService.dimensions.css.canvas.width}px`,fontSize:`${this._terminal.options.fontSize}px`}),this._rowElements.length!==this._terminal.rows&&this._handleResize(this._terminal.rows);for(let e=0;e<this._terminal.rows;e++)this._refreshRowDimensions(this._rowElements[e]),this._alignRowWidth(this._rowElements[e])}}_refreshRowDimensions(e){e.style.height=`${this._renderService.dimensions.css.cell.height}px`}_alignRowWidth(e){e.style.transform=\"\";let i=e.getBoundingClientRect().width,r=this._rowColumns.get(e)?.slice(-1)?.[0];if(!r)return;let n=r*this._renderService.dimensions.css.cell.width;e.style.transform=`scaleX(${n/i})`}};Tt=M([S(1,xt),S(2,ae),S(3,ce)],Tt);var hi=class extends D{constructor(e,i,r,n,o){super();this._element=e;this._mouseService=i;this._renderService=r;this._bufferService=n;this._linkProviderService=o;this._linkCacheDisposables=[];this._isMouseOut=!0;this._wasResized=!1;this._activeLine=-1;this._onShowLinkUnderline=this._register(new v);this.onShowLinkUnderline=this._onShowLinkUnderline.event;this._onHideLinkUnderline=this._register(new v);this.onHideLinkUnderline=this._onHideLinkUnderline.event;this._register(C(()=>{Ne(this._linkCacheDisposables),this._linkCacheDisposables.length=0,this._lastMouseEvent=void 0,this._activeProviderReplies?.clear()})),this._register(this._bufferService.onResize(()=>{this._clearCurrentLink(),this._wasResized=!0})),this._register(L(this._element,\"mouseleave\",()=>{this._isMouseOut=!0,this._clearCurrentLink()})),this._register(L(this._element,\"mousemove\",this._handleMouseMove.bind(this))),this._register(L(this._element,\"mousedown\",this._handleMouseDown.bind(this))),this._register(L(this._element,\"mouseup\",this._handleMouseUp.bind(this)))}get currentLink(){return this._currentLink}_handleMouseMove(e){this._lastMouseEvent=e;let i=this._positionFromMouseEvent(e,this._element,this._mouseService);if(!i)return;this._isMouseOut=!1;let r=e.composedPath();for(let n=0;n<r.length;n++){let o=r[n];if(o.classList.contains(\"xterm\"))break;if(o.classList.contains(\"xterm-hover\"))return}(!this._lastBufferCell||i.x!==this._lastBufferCell.x||i.y!==this._lastBufferCell.y)&&(this._handleHover(i),this._lastBufferCell=i)}_handleHover(e){if(this._activeLine!==e.y||this._wasResized){this._clearCurrentLink(),this._askForLink(e,!1),this._wasResized=!1;return}this._currentLink&&this._linkAtPosition(this._currentLink.link,e)||(this._clearCurrentLink(),this._askForLink(e,!0))}_askForLink(e,i){(!this._activeProviderReplies||!i)&&(this._activeProviderReplies?.forEach(n=>{n?.forEach(o=>{o.link.dispose&&o.link.dispose()})}),this._activeProviderReplies=new Map,this._activeLine=e.y);let r=!1;for(let[n,o]of this._linkProviderService.linkProviders.entries())i?this._activeProviderReplies?.get(n)&&(r=this._checkLinkProviderResult(n,e,r)):o.provideLinks(e.y,l=>{if(this._isMouseOut)return;let a=l?.map(u=>({link:u}));this._activeProviderReplies?.set(n,a),r=this._checkLinkProviderResult(n,e,r),this._activeProviderReplies?.size===this._linkProviderService.linkProviders.length&&this._removeIntersectingLinks(e.y,this._activeProviderReplies)})}_removeIntersectingLinks(e,i){let r=new Set;for(let n=0;n<i.size;n++){let o=i.get(n);if(o)for(let l=0;l<o.length;l++){let a=o[l],u=a.link.range.start.y<e?0:a.link.range.start.x,h=a.link.range.end.y>e?this._bufferService.cols:a.link.range.end.x;for(let c=u;c<=h;c++){if(r.has(c)){o.splice(l--,1);break}r.add(c)}}}}_checkLinkProviderResult(e,i,r){if(!this._activeProviderReplies)return r;let n=this._activeProviderReplies.get(e),o=!1;for(let l=0;l<e;l++)(!this._activeProviderReplies.has(l)||this._activeProviderReplies.get(l))&&(o=!0);if(!o&&n){let l=n.find(a=>this._linkAtPosition(a.link,i));l&&(r=!0,this._handleNewLink(l))}if(this._activeProviderReplies.size===this._linkProviderService.linkProviders.length&&!r)for(let l=0;l<this._activeProviderReplies.size;l++){let a=this._activeProviderReplies.get(l)?.find(u=>this._linkAtPosition(u.link,i));if(a){r=!0,this._handleNewLink(a);break}}return r}_handleMouseDown(){this._mouseDownLink=this._currentLink}_handleMouseUp(e){if(!this._currentLink)return;let i=this._positionFromMouseEvent(e,this._element,this._mouseService);i&&this._mouseDownLink&&Ec(this._mouseDownLink.link,this._currentLink.link)&&this._linkAtPosition(this._currentLink.link,i)&&this._currentLink.link.activate(e,this._currentLink.link.text)}_clearCurrentLink(e,i){!this._currentLink||!this._lastMouseEvent||(!e||!i||this._currentLink.link.range.start.y>=e&&this._currentLink.link.range.end.y<=i)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,Ne(this._linkCacheDisposables),this._linkCacheDisposables.length=0)}_handleNewLink(e){if(!this._lastMouseEvent)return;let i=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);i&&this._linkAtPosition(e.link,i)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:e.link.decorations===void 0?!0:e.link.decorations.underline,pointerCursor:e.link.decorations===void 0?!0:e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:()=>this._currentLink?.state?.decorations.pointerCursor,set:r=>{this._currentLink?.state&&this._currentLink.state.decorations.pointerCursor!==r&&(this._currentLink.state.decorations.pointerCursor=r,this._currentLink.state.isHovered&&this._element.classList.toggle(\"xterm-cursor-pointer\",r))}},underline:{get:()=>this._currentLink?.state?.decorations.underline,set:r=>{this._currentLink?.state&&this._currentLink?.state?.decorations.underline!==r&&(this._currentLink.state.decorations.underline=r,this._currentLink.state.isHovered&&this._fireUnderlineEvent(e.link,r))}}}),this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(r=>{if(!this._currentLink)return;let n=r.start===0?0:r.start+1+this._bufferService.buffer.ydisp,o=this._bufferService.buffer.ydisp+1+r.end;if(this._currentLink.link.range.start.y>=n&&this._currentLink.link.range.end.y<=o&&(this._clearCurrentLink(n,o),this._lastMouseEvent)){let l=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);l&&this._askForLink(l,!1)}})))}_linkHover(e,i,r){this._currentLink?.state&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(i,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add(\"xterm-cursor-pointer\")),i.hover&&i.hover(r,i.text)}_fireUnderlineEvent(e,i){let r=e.range,n=this._bufferService.buffer.ydisp,o=this._createLinkUnderlineEvent(r.start.x-1,r.start.y-n-1,r.end.x,r.end.y-n-1,void 0);(i?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(o)}_linkLeave(e,i,r){this._currentLink?.state&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(i,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove(\"xterm-cursor-pointer\")),i.leave&&i.leave(r,i.text)}_linkAtPosition(e,i){let r=e.range.start.y*this._bufferService.cols+e.range.start.x,n=e.range.end.y*this._bufferService.cols+e.range.end.x,o=i.y*this._bufferService.cols+i.x;return r<=o&&o<=n}_positionFromMouseEvent(e,i,r){let n=r.getCoords(e,i,this._bufferService.cols,this._bufferService.rows);if(n)return{x:n[0],y:n[1]+this._bufferService.buffer.ydisp}}_createLinkUnderlineEvent(e,i,r,n,o){return{x1:e,y1:i,x2:r,y2:n,cols:this._bufferService.cols,fg:o}}};hi=M([S(1,Dt),S(2,ce),S(3,F),S(4,lr)],hi);function Ec(s,t){return s.text===t.text&&s.range.start.x===t.range.start.x&&s.range.start.y===t.range.start.y&&s.range.end.x===t.range.end.x&&s.range.end.y===t.range.end.y}var yn=class extends Sn{constructor(e={}){super(e);this._linkifier=this._register(new ye);this.browser=tn;this._keyDownHandled=!1;this._keyDownSeen=!1;this._keyPressHandled=!1;this._unprocessedDeadKey=!1;this._accessibilityManager=this._register(new ye);this._onCursorMove=this._register(new v);this.onCursorMove=this._onCursorMove.event;this._onKey=this._register(new v);this.onKey=this._onKey.event;this._onRender=this._register(new v);this.onRender=this._onRender.event;this._onSelectionChange=this._register(new v);this.onSelectionChange=this._onSelectionChange.event;this._onTitleChange=this._register(new v);this.onTitleChange=this._onTitleChange.event;this._onBell=this._register(new v);this.onBell=this._onBell.event;this._onFocus=this._register(new v);this._onBlur=this._register(new v);this._onA11yCharEmitter=this._register(new v);this._onA11yTabEmitter=this._register(new v);this._onWillOpen=this._register(new v);this._setup(),this._decorationService=this._instantiationService.createInstance(Tn),this._instantiationService.setService(Be,this._decorationService),this._linkProviderService=this._instantiationService.createInstance(Qr),this._instantiationService.setService(lr,this._linkProviderService),this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(wt)),this._register(this._inputHandler.onRequestBell(()=>this._onBell.fire())),this._register(this._inputHandler.onRequestRefreshRows(i=>this.refresh(i?.start??0,i?.end??this.rows-1))),this._register(this._inputHandler.onRequestSendFocus(()=>this._reportFocus())),this._register(this._inputHandler.onRequestReset(()=>this.reset())),this._register(this._inputHandler.onRequestWindowsOptionsReport(i=>this._reportWindowsOptions(i))),this._register(this._inputHandler.onColor(i=>this._handleColorEvent(i))),this._register($.forward(this._inputHandler.onCursorMove,this._onCursorMove)),this._register($.forward(this._inputHandler.onTitleChange,this._onTitleChange)),this._register($.forward(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this._register($.forward(this._inputHandler.onA11yTab,this._onA11yTabEmitter)),this._register(this._bufferService.onResize(i=>this._afterResize(i.cols,i.rows))),this._register(C(()=>{this._customKeyEventHandler=void 0,this.element?.parentNode?.removeChild(this.element)}))}get linkifier(){return this._linkifier.value}get onFocus(){return this._onFocus.event}get onBlur(){return this._onBlur.event}get onA11yChar(){return this._onA11yCharEmitter.event}get onA11yTab(){return this._onA11yTabEmitter.event}get onWillOpen(){return this._onWillOpen.event}_handleColorEvent(e){if(this._themeService)for(let i of e){let r,n=\"\";switch(i.index){case 256:r=\"foreground\",n=\"10\";break;case 257:r=\"background\",n=\"11\";break;case 258:r=\"cursor\",n=\"12\";break;default:r=\"ansi\",n=\"4;\"+i.index}switch(i.type){case 0:let o=U.toColorRGB(r===\"ansi\"?this._themeService.colors.ansi[i.index]:this._themeService.colors[r]);this.coreService.triggerDataEvent(`${b.ESC}]${n};${ml(o)}${fs.ST}`);break;case 1:if(r===\"ansi\")this._themeService.modifyColors(l=>l.ansi[i.index]=j.toColor(...i.color));else{let l=r;this._themeService.modifyColors(a=>a[l]=j.toColor(...i.color))}break;case 2:this._themeService.restoreColor(i.index);break}}}_setup(){super._setup(),this._customKeyEventHandler=void 0}get buffer(){return this.buffers.active}focus(){this.textarea&&this.textarea.focus({preventScroll:!0})}_handleScreenReaderModeOptionChange(e){e?!this._accessibilityManager.value&&this._renderService&&(this._accessibilityManager.value=this._instantiationService.createInstance(Tt,this)):this._accessibilityManager.clear()}_handleTextAreaFocus(e){this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(b.ESC+\"[I\"),this.element.classList.add(\"focus\"),this._showCursor(),this._onFocus.fire()}blur(){return this.textarea?.blur()}_handleTextAreaBlur(){this.textarea.value=\"\",this.refresh(this.buffer.y,this.buffer.y),this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(b.ESC+\"[O\"),this.element.classList.remove(\"focus\"),this._onBlur.fire()}_syncTextArea(){if(!this.textarea||!this.buffer.isCursorInViewport||this._compositionHelper.isComposing||!this._renderService)return;let e=this.buffer.ybase+this.buffer.y,i=this.buffer.lines.get(e);if(!i)return;let r=Math.min(this.buffer.x,this.cols-1),n=this._renderService.dimensions.css.cell.height,o=i.getWidth(r),l=this._renderService.dimensions.css.cell.width*o,a=this.buffer.y*this._renderService.dimensions.css.cell.height,u=r*this._renderService.dimensions.css.cell.width;this.textarea.style.left=u+\"px\",this.textarea.style.top=a+\"px\",this.textarea.style.width=l+\"px\",this.textarea.style.height=n+\"px\",this.textarea.style.lineHeight=n+\"px\",this.textarea.style.zIndex=\"-5\"}_initGlobal(){this._bindKeys(),this._register(L(this.element,\"copy\",i=>{this.hasSelection()&&Vs(i,this._selectionService)}));let e=i=>qs(i,this.textarea,this.coreService,this.optionsService);this._register(L(this.textarea,\"paste\",e)),this._register(L(this.element,\"paste\",e)),Ss?this._register(L(this.element,\"mousedown\",i=>{i.button===2&&Pn(i,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})):this._register(L(this.element,\"contextmenu\",i=>{Pn(i,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})),Bi&&this._register(L(this.element,\"auxclick\",i=>{i.button===1&&Mn(i,this.textarea,this.screenElement)}))}_bindKeys(){this._register(L(this.textarea,\"keyup\",e=>this._keyUp(e),!0)),this._register(L(this.textarea,\"keydown\",e=>this._keyDown(e),!0)),this._register(L(this.textarea,\"keypress\",e=>this._keyPress(e),!0)),this._register(L(this.textarea,\"compositionstart\",()=>this._compositionHelper.compositionstart())),this._register(L(this.textarea,\"compositionupdate\",e=>this._compositionHelper.compositionupdate(e))),this._register(L(this.textarea,\"compositionend\",()=>this._compositionHelper.compositionend())),this._register(L(this.textarea,\"input\",e=>this._inputEvent(e),!0)),this._register(this.onRender(()=>this._compositionHelper.updateCompositionElements()))}open(e){if(!e)throw new Error(\"Terminal requires a parent element.\");if(e.isConnected||this._logService.debug(\"Terminal.open was called on an element that was not attached to the DOM\"),this.element?.ownerDocument.defaultView&&this._coreBrowserService){this.element.ownerDocument.defaultView!==this._coreBrowserService.window&&(this._coreBrowserService.window=this.element.ownerDocument.defaultView);return}this._document=e.ownerDocument,this.options.documentOverride&&this.options.documentOverride instanceof Document&&(this._document=this.optionsService.rawOptions.documentOverride),this.element=this._document.createElement(\"div\"),this.element.dir=\"ltr\",this.element.classList.add(\"terminal\"),this.element.classList.add(\"xterm\"),e.appendChild(this.element);let i=this._document.createDocumentFragment();this._viewportElement=this._document.createElement(\"div\"),this._viewportElement.classList.add(\"xterm-viewport\"),i.appendChild(this._viewportElement),this.screenElement=this._document.createElement(\"div\"),this.screenElement.classList.add(\"xterm-screen\"),this._register(L(this.screenElement,\"mousemove\",o=>this.updateCursorStyle(o))),this._helperContainer=this._document.createElement(\"div\"),this._helperContainer.classList.add(\"xterm-helpers\"),this.screenElement.appendChild(this._helperContainer),i.appendChild(this.screenElement);let r=this.textarea=this._document.createElement(\"textarea\");this.textarea.classList.add(\"xterm-helper-textarea\"),this.textarea.setAttribute(\"aria-label\",mi.get()),Ts||this.textarea.setAttribute(\"aria-multiline\",\"false\"),this.textarea.setAttribute(\"autocorrect\",\"off\"),this.textarea.setAttribute(\"autocapitalize\",\"off\"),this.textarea.setAttribute(\"spellcheck\",\"false\"),this.textarea.tabIndex=0,this._register(this.optionsService.onSpecificOptionChange(\"disableStdin\",()=>r.readOnly=this.optionsService.rawOptions.disableStdin)),this.textarea.readOnly=this.optionsService.rawOptions.disableStdin,this._coreBrowserService=this._register(this._instantiationService.createInstance(Jr,this.textarea,e.ownerDocument.defaultView??window,this._document??typeof window<\"u\"?window.document:null)),this._instantiationService.setService(ae,this._coreBrowserService),this._register(L(this.textarea,\"focus\",o=>this._handleTextAreaFocus(o))),this._register(L(this.textarea,\"blur\",()=>this._handleTextAreaBlur())),this._helperContainer.appendChild(this.textarea),this._charSizeService=this._instantiationService.createInstance(jt,this._document,this._helperContainer),this._instantiationService.setService(nt,this._charSizeService),this._themeService=this._instantiationService.createInstance(ti),this._instantiationService.setService(Re,this._themeService),this._characterJoinerService=this._instantiationService.createInstance(ct),this._instantiationService.setService(or,this._characterJoinerService),this._renderService=this._register(this._instantiationService.createInstance(Qt,this.rows,this.screenElement)),this._instantiationService.setService(ce,this._renderService),this._register(this._renderService.onRenderedViewportChange(o=>this._onRender.fire(o))),this.onResize(o=>this._renderService.resize(o.cols,o.rows)),this._compositionView=this._document.createElement(\"div\"),this._compositionView.classList.add(\"composition-view\"),this._compositionHelper=this._instantiationService.createInstance($t,this.textarea,this._compositionView),this._helperContainer.appendChild(this._compositionView),this._mouseService=this._instantiationService.createInstance(Xt),this._instantiationService.setService(Dt,this._mouseService);let n=this._linkifier.value=this._register(this._instantiationService.createInstance(hi,this.screenElement));this.element.appendChild(i);try{this._onWillOpen.fire(this.element)}catch{}this._renderService.hasRenderer()||this._renderService.setRenderer(this._createRenderer()),this._register(this.onCursorMove(()=>{this._renderService.handleCursorMove(),this._syncTextArea()})),this._register(this.onResize(()=>this._renderService.handleResize(this.cols,this.rows))),this._register(this.onBlur(()=>this._renderService.handleBlur())),this._register(this.onFocus(()=>this._renderService.handleFocus())),this._viewport=this._register(this._instantiationService.createInstance(zt,this.element,this.screenElement)),this._register(this._viewport.onRequestScrollLines(o=>{super.scrollLines(o,!1),this.refresh(0,this.rows-1)})),this._selectionService=this._register(this._instantiationService.createInstance(ei,this.element,this.screenElement,n)),this._instantiationService.setService(Qs,this._selectionService),this._register(this._selectionService.onRequestScrollLines(o=>this.scrollLines(o.amount,o.suppressScrollEvent))),this._register(this._selectionService.onSelectionChange(()=>this._onSelectionChange.fire())),this._register(this._selectionService.onRequestRedraw(o=>this._renderService.handleSelectionChanged(o.start,o.end,o.columnSelectMode))),this._register(this._selectionService.onLinuxMouseSelection(o=>{this.textarea.value=o,this.textarea.focus(),this.textarea.select()})),this._register($.any(this._onScroll.event,this._inputHandler.onScroll)(()=>{this._selectionService.refresh(),this._viewport?.queueSync()})),this._register(this._instantiationService.createInstance(Gt,this.screenElement)),this._register(L(this.element,\"mousedown\",o=>this._selectionService.handleMouseDown(o))),this.coreMouseService.areMouseEventsActive?(this._selectionService.disable(),this.element.classList.add(\"enable-mouse-events\")):this._selectionService.enable(),this.options.screenReaderMode&&(this._accessibilityManager.value=this._instantiationService.createInstance(Tt,this)),this._register(this.optionsService.onSpecificOptionChange(\"screenReaderMode\",o=>this._handleScreenReaderModeOptionChange(o))),this.options.overviewRuler.width&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(bt,this._viewportElement,this.screenElement))),this.optionsService.onSpecificOptionChange(\"overviewRuler\",o=>{!this._overviewRulerRenderer&&o&&this._viewportElement&&this.screenElement&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(bt,this._viewportElement,this.screenElement)))}),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this.bindMouse()}_createRenderer(){return this._instantiationService.createInstance(Yt,this,this._document,this.element,this.screenElement,this._viewportElement,this._helperContainer,this.linkifier)}bindMouse(){let e=this,i=this.element;function r(l){let a=e._mouseService.getMouseReportCoords(l,e.screenElement);if(!a)return!1;let u,h;switch(l.overrideType||l.type){case\"mousemove\":h=32,l.buttons===void 0?(u=3,l.button!==void 0&&(u=l.button<3?l.button:3)):u=l.buttons&1?0:l.buttons&4?1:l.buttons&2?2:3;break;case\"mouseup\":h=0,u=l.button<3?l.button:3;break;case\"mousedown\":h=1,u=l.button<3?l.button:3;break;case\"wheel\":if(e._customWheelEventHandler&&e._customWheelEventHandler(l)===!1)return!1;let c=l.deltaY;if(c===0||e.coreMouseService.consumeWheelEvent(l,e._renderService?.dimensions?.device?.cell?.height,e._coreBrowserService?.dpr)===0)return!1;h=c<0?0:1,u=4;break;default:return!1}return h===void 0||u===void 0||u>4?!1:e.coreMouseService.triggerMouseEvent({col:a.col,row:a.row,x:a.x,y:a.y,button:u,action:h,ctrl:l.ctrlKey,alt:l.altKey,shift:l.shiftKey})}let n={mouseup:null,wheel:null,mousedrag:null,mousemove:null},o={mouseup:l=>(r(l),l.buttons||(this._document.removeEventListener(\"mouseup\",n.mouseup),n.mousedrag&&this._document.removeEventListener(\"mousemove\",n.mousedrag)),this.cancel(l)),wheel:l=>(r(l),this.cancel(l,!0)),mousedrag:l=>{l.buttons&&r(l)},mousemove:l=>{l.buttons||r(l)}};this._register(this.coreMouseService.onProtocolChange(l=>{l?(this.optionsService.rawOptions.logLevel===\"debug\"&&this._logService.debug(\"Binding to mouse events:\",this.coreMouseService.explainEvents(l)),this.element.classList.add(\"enable-mouse-events\"),this._selectionService.disable()):(this._logService.debug(\"Unbinding from mouse events.\"),this.element.classList.remove(\"enable-mouse-events\"),this._selectionService.enable()),l&8?n.mousemove||(i.addEventListener(\"mousemove\",o.mousemove),n.mousemove=o.mousemove):(i.removeEventListener(\"mousemove\",n.mousemove),n.mousemove=null),l&16?n.wheel||(i.addEventListener(\"wheel\",o.wheel,{passive:!1}),n.wheel=o.wheel):(i.removeEventListener(\"wheel\",n.wheel),n.wheel=null),l&2?n.mouseup||(n.mouseup=o.mouseup):(this._document.removeEventListener(\"mouseup\",n.mouseup),n.mouseup=null),l&4?n.mousedrag||(n.mousedrag=o.mousedrag):(this._document.removeEventListener(\"mousemove\",n.mousedrag),n.mousedrag=null)})),this.coreMouseService.activeProtocol=this.coreMouseService.activeProtocol,this._register(L(i,\"mousedown\",l=>{if(l.preventDefault(),this.focus(),!(!this.coreMouseService.areMouseEventsActive||this._selectionService.shouldForceSelection(l)))return r(l),n.mouseup&&this._document.addEventListener(\"mouseup\",n.mouseup),n.mousedrag&&this._document.addEventListener(\"mousemove\",n.mousedrag),this.cancel(l)})),this._register(L(i,\"wheel\",l=>{if(!n.wheel){if(this._customWheelEventHandler&&this._customWheelEventHandler(l)===!1)return!1;if(!this.buffer.hasScrollback){if(l.deltaY===0)return!1;if(e.coreMouseService.consumeWheelEvent(l,e._renderService?.dimensions?.device?.cell?.height,e._coreBrowserService?.dpr)===0)return this.cancel(l,!0);let h=b.ESC+(this.coreService.decPrivateModes.applicationCursorKeys?\"O\":\"[\")+(l.deltaY<0?\"A\":\"B\");return this.coreService.triggerDataEvent(h,!0),this.cancel(l,!0)}}},{passive:!1}))}refresh(e,i){this._renderService?.refreshRows(e,i)}updateCursorStyle(e){this._selectionService?.shouldColumnSelect(e)?this.element.classList.add(\"column-select\"):this.element.classList.remove(\"column-select\")}_showCursor(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))}scrollLines(e,i){this._viewport?this._viewport.scrollLines(e):super.scrollLines(e,i),this.refresh(0,this.rows-1)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){e&&this._viewport?this._viewport.scrollToLine(this.buffer.ybase,!0):this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){let i=e-this._bufferService.buffer.ydisp;i!==0&&this.scrollLines(i)}paste(e){Cn(e,this.textarea,this.coreService,this.optionsService)}attachCustomKeyEventHandler(e){this._customKeyEventHandler=e}attachCustomWheelEventHandler(e){this._customWheelEventHandler=e}registerLinkProvider(e){return this._linkProviderService.registerLinkProvider(e)}registerCharacterJoiner(e){if(!this._characterJoinerService)throw new Error(\"Terminal must be opened first\");let i=this._characterJoinerService.register(e);return this.refresh(0,this.rows-1),i}deregisterCharacterJoiner(e){if(!this._characterJoinerService)throw new Error(\"Terminal must be opened first\");this._characterJoinerService.deregister(e)&&this.refresh(0,this.rows-1)}get markers(){return this.buffer.markers}registerMarker(e){return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+e)}registerDecoration(e){return this._decorationService.registerDecoration(e)}hasSelection(){return this._selectionService?this._selectionService.hasSelection:!1}select(e,i,r){this._selectionService.setSelection(e,i,r)}getSelection(){return this._selectionService?this._selectionService.selectionText:\"\"}getSelectionPosition(){if(!(!this._selectionService||!this._selectionService.hasSelection))return{start:{x:this._selectionService.selectionStart[0],y:this._selectionService.selectionStart[1]},end:{x:this._selectionService.selectionEnd[0],y:this._selectionService.selectionEnd[1]}}}clearSelection(){this._selectionService?.clearSelection()}selectAll(){this._selectionService?.selectAll()}selectLines(e,i){this._selectionService?.selectLines(e,i)}_keyDown(e){if(this._keyDownHandled=!1,this._keyDownSeen=!0,this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return!1;let i=this.browser.isMac&&this.options.macOptionIsMeta&&e.altKey;if(!i&&!this._compositionHelper.keydown(e))return this.options.scrollOnUserInput&&this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(!0),!1;!i&&(e.key===\"Dead\"||e.key===\"AltGraph\")&&(this._unprocessedDeadKey=!0);let r=Il(e,this.coreService.decPrivateModes.applicationCursorKeys,this.browser.isMac,this.options.macOptionIsMeta);if(this.updateCursorStyle(e),r.type===3||r.type===2){let n=this.rows-1;return this.scrollLines(r.type===2?-n:n),this.cancel(e,!0)}if(r.type===1&&this.selectAll(),this._isThirdLevelShift(this.browser,e)||(r.cancel&&this.cancel(e,!0),!r.key)||e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.key.length===1&&e.key.charCodeAt(0)>=65&&e.key.charCodeAt(0)<=90)return!0;if(this._unprocessedDeadKey)return this._unprocessedDeadKey=!1,!0;if((r.key===b.ETX||r.key===b.CR)&&(this.textarea.value=\"\"),this._onKey.fire({key:r.key,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(r.key,!0),!this.optionsService.rawOptions.screenReaderMode||e.altKey||e.ctrlKey)return this.cancel(e,!0);this._keyDownHandled=!0}_isThirdLevelShift(e,i){let r=e.isMac&&!this.options.macOptionIsMeta&&i.altKey&&!i.ctrlKey&&!i.metaKey||e.isWindows&&i.altKey&&i.ctrlKey&&!i.metaKey||e.isWindows&&i.getModifierState(\"AltGraph\");return i.type===\"keypress\"?r:r&&(!i.keyCode||i.keyCode>47)}_keyUp(e){this._keyDownSeen=!1,!(this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)&&(Tc(e)||this.focus(),this.updateCursorStyle(e),this._keyPressHandled=!1)}_keyPress(e){let i;if(this._keyPressHandled=!1,this._keyDownHandled||this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return!1;if(this.cancel(e),e.charCode)i=e.charCode;else if(e.which===null||e.which===void 0)i=e.keyCode;else if(e.which!==0&&e.charCode!==0)i=e.which;else return!1;return!i||(e.altKey||e.ctrlKey||e.metaKey)&&!this._isThirdLevelShift(this.browser,e)?!1:(i=String.fromCharCode(i),this._onKey.fire({key:i,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(i,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,!0)}_inputEvent(e){if(e.data&&e.inputType===\"insertText\"&&(!e.composed||!this._keyDownSeen)&&!this.optionsService.rawOptions.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;let i=e.data;return this.coreService.triggerDataEvent(i,!0),this.cancel(e),!0}return!1}resize(e,i){if(e===this.cols&&i===this.rows){this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure();return}super.resize(e,i)}_afterResize(e,i){this._charSizeService?.measure()}clear(){if(!(this.buffer.ybase===0&&this.buffer.y===0)){this.buffer.clearAllMarkers(),this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(let e=1;e<this.rows;e++)this.buffer.lines.push(this.buffer.getBlankLine(X));this._onScroll.fire({position:this.buffer.ydisp}),this.refresh(0,this.rows-1)}}reset(){this.options.rows=this.rows,this.options.cols=this.cols;let e=this._customKeyEventHandler;this._setup(),super.reset(),this._selectionService?.reset(),this._decorationService.reset(),this._customKeyEventHandler=e,this.refresh(0,this.rows-1)}clearTextureAtlas(){this._renderService?.clearTextureAtlas()}_reportFocus(){this.element?.classList.contains(\"focus\")?this.coreService.triggerDataEvent(b.ESC+\"[I\"):this.coreService.triggerDataEvent(b.ESC+\"[O\")}_reportWindowsOptions(e){if(this._renderService)switch(e){case 0:let i=this._renderService.dimensions.css.canvas.width.toFixed(0),r=this._renderService.dimensions.css.canvas.height.toFixed(0);this.coreService.triggerDataEvent(`${b.ESC}[4;${r};${i}t`);break;case 1:let n=this._renderService.dimensions.css.cell.width.toFixed(0),o=this._renderService.dimensions.css.cell.height.toFixed(0);this.coreService.triggerDataEvent(`${b.ESC}[6;${o};${n}t`);break}}cancel(e,i){if(!(!this.options.cancelEvents&&!i))return e.preventDefault(),e.stopPropagation(),!1}};function Tc(s){return s.keyCode===16||s.keyCode===17||s.keyCode===18}var xn=class{constructor(){this._addons=[]}dispose(){for(let t=this._addons.length-1;t>=0;t--)this._addons[t].instance.dispose()}loadAddon(t,e){let i={instance:e,dispose:e.dispose,isDisposed:!1};this._addons.push(i),e.dispose=()=>this._wrappedAddonDispose(i),e.activate(t)}_wrappedAddonDispose(t){if(t.isDisposed)return;let e=-1;for(let i=0;i<this._addons.length;i++)if(this._addons[i]===t){e=i;break}if(e===-1)throw new Error(\"Could not dispose an addon that has not been loaded\");t.isDisposed=!0,t.dispose.apply(t.instance),this._addons.splice(e,1)}};var wn=class{constructor(t){this._line=t}get isWrapped(){return this._line.isWrapped}get length(){return this._line.length}getCell(t,e){if(!(t<0||t>=this._line.length))return e?(this._line.loadCell(t,e),e):this._line.loadCell(t,new q)}translateToString(t,e,i){return this._line.translateToString(t,e,i)}};var Ji=class{constructor(t,e){this._buffer=t;this.type=e}init(t){return this._buffer=t,this}get cursorY(){return this._buffer.y}get cursorX(){return this._buffer.x}get viewportY(){return this._buffer.ydisp}get baseY(){return this._buffer.ybase}get length(){return this._buffer.lines.length}getLine(t){let e=this._buffer.lines.get(t);if(e)return new wn(e)}getNullCell(){return new q}};var Dn=class extends D{constructor(e){super();this._core=e;this._onBufferChange=this._register(new v);this.onBufferChange=this._onBufferChange.event;this._normal=new Ji(this._core.buffers.normal,\"normal\"),this._alternate=new Ji(this._core.buffers.alt,\"alternate\"),this._core.buffers.onBufferActivate(()=>this._onBufferChange.fire(this.active))}get active(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw new Error(\"Active buffer is neither normal nor alternate\")}get normal(){return this._normal.init(this._core.buffers.normal)}get alternate(){return this._alternate.init(this._core.buffers.alt)}};var Rn=class{constructor(t){this._core=t}registerCsiHandler(t,e){return this._core.registerCsiHandler(t,i=>e(i.toArray()))}addCsiHandler(t,e){return this.registerCsiHandler(t,e)}registerDcsHandler(t,e){return this._core.registerDcsHandler(t,(i,r)=>e(i,r.toArray()))}addDcsHandler(t,e){return this.registerDcsHandler(t,e)}registerEscHandler(t,e){return this._core.registerEscHandler(t,e)}addEscHandler(t,e){return this.registerEscHandler(t,e)}registerOscHandler(t,e){return this._core.registerOscHandler(t,e)}addOscHandler(t,e){return this.registerOscHandler(t,e)}};var Ln=class{constructor(t){this._core=t}register(t){this._core.unicodeService.register(t)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(t){this._core.unicodeService.activeVersion=t}};var Ic=[\"cols\",\"rows\"],Ue=0,Dl=class extends D{constructor(t){super(),this._core=this._register(new yn(t)),this._addonManager=this._register(new xn),this._publicOptions={...this._core.options};let e=r=>this._core.options[r],i=(r,n)=>{this._checkReadonlyOptions(r),this._core.options[r]=n};for(let r in this._core.options){let n={get:e.bind(this,r),set:i.bind(this,r)};Object.defineProperty(this._publicOptions,r,n)}}_checkReadonlyOptions(t){if(Ic.includes(t))throw new Error(`Option \"${t}\" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.rawOptions.allowProposedApi)throw new Error(\"You must set the allowProposedApi option to true to use proposed API\")}get onBell(){return this._core.onBell}get onBinary(){return this._core.onBinary}get onCursorMove(){return this._core.onCursorMove}get onData(){return this._core.onData}get onKey(){return this._core.onKey}get onLineFeed(){return this._core.onLineFeed}get onRender(){return this._core.onRender}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onSelectionChange(){return this._core.onSelectionChange}get onTitleChange(){return this._core.onTitleChange}get onWriteParsed(){return this._core.onWriteParsed}get element(){return this._core.element}get parser(){return this._parser||(this._parser=new Rn(this._core)),this._parser}get unicode(){return this._checkProposedApi(),new Ln(this._core)}get textarea(){return this._core.textarea}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._buffer||(this._buffer=this._register(new Dn(this._core))),this._buffer}get markers(){return this._checkProposedApi(),this._core.markers}get modes(){let t=this._core.coreService.decPrivateModes,e=\"none\";switch(this._core.coreMouseService.activeProtocol){case\"X10\":e=\"x10\";break;case\"VT200\":e=\"vt200\";break;case\"DRAG\":e=\"drag\";break;case\"ANY\":e=\"any\";break}return{applicationCursorKeysMode:t.applicationCursorKeys,applicationKeypadMode:t.applicationKeypad,bracketedPasteMode:t.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:e,originMode:t.origin,reverseWraparoundMode:t.reverseWraparound,sendFocusMode:t.sendFocus,synchronizedOutputMode:t.synchronizedOutput,wraparoundMode:t.wraparound}}get options(){return this._publicOptions}set options(t){for(let e in t)this._publicOptions[e]=t[e]}blur(){this._core.blur()}focus(){this._core.focus()}input(t,e=!0){this._core.input(t,e)}resize(t,e){this._verifyIntegers(t,e),this._core.resize(t,e)}open(t){this._core.open(t)}attachCustomKeyEventHandler(t){this._core.attachCustomKeyEventHandler(t)}attachCustomWheelEventHandler(t){this._core.attachCustomWheelEventHandler(t)}registerLinkProvider(t){return this._core.registerLinkProvider(t)}registerCharacterJoiner(t){return this._checkProposedApi(),this._core.registerCharacterJoiner(t)}deregisterCharacterJoiner(t){this._checkProposedApi(),this._core.deregisterCharacterJoiner(t)}registerMarker(t=0){return this._verifyIntegers(t),this._core.registerMarker(t)}registerDecoration(t){return this._checkProposedApi(),this._verifyPositiveIntegers(t.x??0,t.width??0,t.height??0),this._core.registerDecoration(t)}hasSelection(){return this._core.hasSelection()}select(t,e,i){this._verifyIntegers(t,e,i),this._core.select(t,e,i)}getSelection(){return this._core.getSelection()}getSelectionPosition(){return this._core.getSelectionPosition()}clearSelection(){this._core.clearSelection()}selectAll(){this._core.selectAll()}selectLines(t,e){this._verifyIntegers(t,e),this._core.selectLines(t,e)}dispose(){super.dispose()}scrollLines(t){this._verifyIntegers(t),this._core.scrollLines(t)}scrollPages(t){this._verifyIntegers(t),this._core.scrollPages(t)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(t){this._verifyIntegers(t),this._core.scrollToLine(t)}clear(){this._core.clear()}write(t,e){this._core.write(t,e)}writeln(t,e){this._core.write(t),this._core.write(`\\r\n`,e)}paste(t){this._core.paste(t)}refresh(t,e){this._verifyIntegers(t,e),this._core.refresh(t,e)}reset(){this._core.reset()}clearTextureAtlas(){this._core.clearTextureAtlas()}loadAddon(t){this._addonManager.loadAddon(this,t)}static get strings(){return{get promptLabel(){return mi.get()},set promptLabel(t){mi.set(t)},get tooMuchOutput(){return _i.get()},set tooMuchOutput(t){_i.set(t)}}}_verifyIntegers(...t){for(Ue of t)if(Ue===1/0||isNaN(Ue)||Ue%1!==0)throw new Error(\"This API only accepts integers\")}_verifyPositiveIntegers(...t){for(Ue of t)if(Ue&&(Ue===1/0||isNaN(Ue)||Ue%1!==0||Ue<0))throw new Error(\"This API only accepts positive integers\")}};export{Dl as Terminal};\n//# sourceMappingURL=xterm.mjs.map\n","/**\n * Copyright (c) 2014-2024 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar h=2,_=1,o=class{activate(e){this._terminal=e}dispose(){}fit(){let e=this.proposeDimensions();if(!e||!this._terminal||isNaN(e.cols)||isNaN(e.rows))return;let t=this._terminal._core;(this._terminal.rows!==e.rows||this._terminal.cols!==e.cols)&&(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}proposeDimensions(){if(!this._terminal||!this._terminal.element||!this._terminal.element.parentElement)return;let t=this._terminal._core._renderService.dimensions;if(t.css.cell.width===0||t.css.cell.height===0)return;let s=this._terminal.options.scrollback===0?0:this._terminal.options.overviewRuler?.width||14,r=window.getComputedStyle(this._terminal.element.parentElement),l=parseInt(r.getPropertyValue(\"height\")),a=Math.max(0,parseInt(r.getPropertyValue(\"width\"))),i=window.getComputedStyle(this._terminal.element),n={top:parseInt(i.getPropertyValue(\"padding-top\")),bottom:parseInt(i.getPropertyValue(\"padding-bottom\")),right:parseInt(i.getPropertyValue(\"padding-right\")),left:parseInt(i.getPropertyValue(\"padding-left\"))},m=n.top+n.bottom,d=n.right+n.left,c=l-m,p=a-d-s;return{cols:Math.max(h,Math.floor(p/t.css.cell.width)),rows:Math.max(_,Math.floor(c/t.css.cell.height))}}};export{o as FitAddon};\n//# sourceMappingURL=addon-fit.mjs.map\n","/**\n * Pure bookkeeping for the terminal drawer's tab/pane pairing (#172).\n *\n * The bug this exists to prevent: `addTab` read the new tab's index from\n * `termTabs().length` AFTER calling `setTermTabs`. A Solid setter applies\n * SYNCHRONOUSLY, so that read returns the NEW length — one past the end. The pane\n * therefore pointed outside the array, which renders as\n *\n * no shell here — + opens one, tabs fill the focused pane\n *\n * while a tab visibly existed. The operator's report was \"勝手に新しいタブを作る /\n * しかもタブが生えたのに no shell here のことがある\" — they pressed + again because\n * nothing appeared, and each press added another tab.\n *\n * Kept as a function rather than inline in the component because the mistake is pure\n * arithmetic and testable without a terminal, a WebSocket, or an xterm instance — and\n * an inline version already regressed once.\n */\n\n/**\n * The index a newly appended tab will occupy.\n *\n * Read `length` BEFORE mutating the list. Taking the list (rather than a length) makes\n * the ordering impossible to get wrong at the call site: the caller passes what it has\n * now, and gets the index the append will produce.\n */\nexport function indexAfterAppend<T>(list: readonly T[]): number {\n return list.length;\n}\n\n/**\n * Clamp a pane index after the tab list changed.\n *\n * - An empty list has no valid index, so both panes go to -1 (\"nothing to show\").\n * - A pane that was pointing past the end (the #172 symptom, or a close that removed\n * the tab it showed) moves to the last tab instead of staying invalid.\n * - A valid index is left alone, so an unrelated list change does not move the\n * operator's focus.\n */\nexport function clampPaneIndex(index: number, tabCount: number): number {\n if (tabCount <= 0) return -1;\n if (index < 0) return -1;\n return Math.min(index, tabCount - 1);\n}\n\n/**\n * The pane index to adopt when a tab is closed.\n *\n * Closing the tab a pane shows must land on a REAL neighbour rather than the invalid\n * index, or the pane shows \"no shell here\" until the operator clicks a tab. Tabs after\n * the closed one shift down by one; a tab before it is unaffected.\n */\nexport function paneIndexAfterClose(index: number, closedAt: number, newCount: number): number {\n if (index === closedAt) return clampPaneIndex(closedAt, newCount);\n if (index > closedAt) return clampPaneIndex(index - 1, newCount);\n return clampPaneIndex(index, newCount);\n}\n\n/**\n * The tab a freshly split right pane should show: any tab the left pane is NOT\n * showing, or -1 when there is only one tab.\n */\nexport function rightPaneSeed(leftPane: number, tabCount: number): number {\n const candidate = Array.from({ length: tabCount }, (_, i) => i).find((i) => i !== leftPane);\n return candidate ?? -1;\n}\n","/**\n * Which agent the UI should show after archiving one (#archive).\n *\n * The handler used to pick `rest[0]` — the first remaining row. That can be a 👻 ghost\n * (its workspace directory is gone), so tidying up dumped the operator onto a dead\n * session: they archive something to clean up and immediately land somewhere that\n * cannot run. Reported as \"archiveするとghostなセッションに移動してしまう\".\n *\n * Kept as a pure function because the rule is a small ordering decision that is easy to\n * get wrong and impossible to see in a component test.\n */\n\nexport interface ArchivableAgent {\n id: string;\n workspaceMissing?: boolean;\n}\n\n/**\n * The agent to select after archiving, or null when nothing usable remains.\n *\n * Preference order:\n * 1. a live-looking agent (workspace present) — in the order given;\n * 2. any remaining agent, ghost or not, rather than showing nothing;\n * 3. null when the list is empty (the caller clears the timeline).\n *\n * A ghost is still better than a blank screen when it is all that is left, which is why\n * step 2 exists — the complaint is about being sent to one when a real one was\n * available, not about ghosts existing.\n */\nexport function pickAfterArchive(\n remaining: readonly ArchivableAgent[],\n removed: ReadonlySet<string>,\n): ArchivableAgent | null {\n const rest = remaining.filter((a) => !removed.has(a.id));\n return rest.find((a) => !a.workspaceMissing) ?? rest[0] ?? null;\n}\n","/**\n * Whether a keystroke in the composer SENDS, and whether a send collapses the expanded composer.\n *\n * Both were reported as bugs, and both are decisions that used to live inline in `App.tsx` where\n * only a source-text assertion could reach them — which is why the files that \"covered\" them\n * (`test/composer-maximized-enter.test.ts`, `test/composer-maximized-restores-on-send.test.ts`)\n * contained NO `test()` at all and protected nothing.\n *\n * ## #134 — Enter must not send while expanded\n *\n * The composer sent on `Enter && !shiftKey` with no reference to the expanded state, so a maximized\n * composer — the mode that exists to write long text — could not be typed into: every newline was a\n * send. Sending stays one click away (the button), so suppressing the shortcut costs nothing.\n *\n * ## #138 — a send DOES collapse it, deliberately\n *\n * An earlier fix made the maximize \"sticky\" so a mid-message send would not throw away writing\n * mode. That is right, and it is NOT what #138 reports: the maximized composer is\n * `position: absolute; inset: 0` over the whole column, so leaving it expanded after a send hides\n * the reply that was just requested. Once Enter no longer sends (#134), the send button is the exit,\n * so the exit must actually exit.\n *\n * Pure and dependency-free so it is unit-testable under `node --test`.\n */\n\nexport interface ComposerKeyState {\n key: string;\n shiftKey: boolean;\n /** an IME composition is in progress — Enter is confirming a conversion, not sending */\n composing: boolean;\n /** the composer is in its expanded (timeline-hiding) mode */\n maximized: boolean;\n}\n\n/**\n * Does this keydown send the message?\n *\n * Enter sends only when it is unambiguous: no Shift (newline), no IME composition (Enter commits the\n * candidate), and not expanded (the operator is writing, not sending).\n */\nexport function shouldSendOnKey(s: ComposerKeyState): boolean {\n if (s.key !== \"Enter\") return false;\n if (s.shiftKey) return false;\n if (s.composing) return false;\n if (s.maximized) return false;\n return true;\n}\n\n/**\n * Does a send restore the composer from its expanded mode?\n *\n * Always yes when it is expanded. The state cannot be left as-is: the expanded composer covers the\n * column, so the just-requested reply would be hidden behind the thing that asked for it.\n */\nexport function shouldRestoreAfterSend(maximized: boolean): boolean {\n return maximized;\n}\n","/**\n * Clipboard copy with a legacy fallback.\n *\n * The `execCommand(\"copy\")` path is what makes copy work on a plain-http page,\n * where `navigator.clipboard` is absent (#52).\n *\n * #75: it lived inside App.tsx with a copy in the test, so the test proved\n * nothing. The dependencies are injected so the fallback paths stay reachable\n * under `node --test`, where neither global exists.\n */\n\nexport type CopyResult = \"copied\" | \"unsupported\" | \"failed\";\n\n/** the staging element the legacy path needs; `style` is duck-typed so this\n * module imports without a DOM */\nexport interface StagingTextarea {\n value: string;\n style: { position: string; opacity: string };\n select(): void;\n remove(): void;\n}\n\nexport interface CopyDeps {\n /** `navigator.clipboard`, when the modern API is available */\n clipboard?: { writeText(text: string): Promise<void> } | null;\n /** `document.execCommand` — the legacy path */\n execCommand?: (cmd: string) => boolean;\n /** staging element factory; the real one appends to `document.body` */\n makeTextarea?: () => StagingTextarea;\n}\n\nexport async function copyText(text: string, deps: CopyDeps = {}): Promise<CopyResult> {\n if (!text) return \"unsupported\";\n\n // a caller-injected dependency wins; otherwise read the globals lazily, so\n // importing this module does not require a DOM\n const clipboard =\n deps.clipboard !== undefined\n ? deps.clipboard\n : typeof navigator !== \"undefined\"\n ? (navigator.clipboard ?? null)\n : null;\n const execCommand =\n deps.execCommand ?? (typeof document !== \"undefined\" ? document.execCommand.bind(document) : undefined);\n const makeTextarea =\n deps.makeTextarea ??\n (() => {\n const el = document.createElement(\"textarea\");\n document.body.appendChild(el);\n return {\n set value(v: string) {\n el.value = v;\n },\n get value(): string {\n return el.value;\n },\n // CSSStyleDeclaration satisfies the two properties used here\n style: { get position() { return el.style.position; }, set position(v: string) { el.style.position = v; },\n get opacity() { return el.style.opacity; }, set opacity(v: string) { el.style.opacity = v; } },\n select: () => el.select(),\n remove: () => el.remove(),\n };\n });\n\n const writeText = clipboard?.writeText;\n if (typeof writeText === \"function\") {\n try {\n await writeText.call(clipboard, text);\n return \"copied\";\n } catch {\n /* rejected (denied, unfocused, insecure) — try the legacy path */\n }\n }\n\n // legacy path, used when the modern API is missing or refused\n let ta: StagingTextarea | null = null;\n try {\n const staging: StagingTextarea = makeTextarea();\n ta = staging;\n staging.value = text;\n staging.style.position = \"fixed\";\n staging.style.opacity = \"0\";\n staging.select();\n if (!execCommand) return \"failed\";\n return execCommand(\"copy\") ? \"copied\" : \"failed\";\n } catch {\n return \"failed\";\n } finally {\n // the removal MUST stay in `finally`: a throw from execCommand would\n // otherwise leak an invisible element per failed copy, for the life of the tab\n ta?.remove();\n }\n}\n","import { Show, createSignal } from \"solid-js\";\nimport { copyText } from \"../lib/clipboard\";\n\nexport function IconBtn(props: {\n icon: string;\n title: string;\n onClick?: (e: MouseEvent) => void;\n active?: boolean;\n class?: string;\n style?: string;\n}) {\n return (\n <button\n type=\"button\"\n class={\"iconbtn\" + (props.active ? \" active\" : \"\") + (props.class ? \" \" + props.class : \"\")}\n title={props.title}\n onclick={props.onClick}\n style={props.style}\n >\n <span class=\"iconbtn-glyph\">{props.icon}</span>\n </button>\n );\n}\n\nexport function CopyBtn(props: { text: string; label?: string; title?: string }) {\n const [done, setDone] = createSignal(false);\n const [failed, setFailed] = createSignal(false);\n const copy = (e: MouseEvent) => {\n e.preventDefault(); // <summary> buttons must not toggle the details row\n e.stopPropagation();\n void copyText(props.text ?? \"\").then((result) => {\n if (result === \"unsupported\" || result === \"failed\") {\n setFailed(true); // nothing copied — say so instead of a silent no-op\n setTimeout(() => setFailed(false), 1200);\n return;\n }\n setDone(true);\n setTimeout(() => setDone(false), 900);\n });\n };\n return (\n <button\n class=\"copybtn\"\n title={props.title ?? \"copy to clipboard\"}\n onclick={copy}\n >{done() ? \"✓\" : failed() ? \"✗\" : props.label ?? \"⧉\"}</button>\n );\n}\n\nexport function Modal(props: { title: string; onClose: () => void; children: any }) {\n return (\n <div class=\"overlay\" onclick={(e: Event) => e.target === e.currentTarget && props.onClose()}>\n <div class=\"modal\">\n <div class=\"modal-head\">\n <b>{props.title}</b>\n <button class=\"iconbtn\" onclick={props.onClose}>✕</button>\n </div>\n {props.children}\n </div>\n </div>\n );\n}\n","/**\n * ANSI SGR escape sequences → styled spans, for tool output.\n *\n * Tool results carry whatever the program printed, and a lot of programs colour their output with\n * ANSI escapes — Renode's monitor, test runners, `git --color`, `ls --color`, anything using a TTY\n * library. The timeline rendered those bytes literally, so a result read like\n *\n * ^[[91m(monitor) ^[[0minclude @/tmp/t.a7.resc\n *\n * which is unreadable and wastes the vertical space the colours were meant to organise.\n *\n * ## Scope: SGR only\n *\n * Only `ESC [ … m` (Select Graphic Rendition: colour, bold, underline, inverse) is interpreted.\n * Cursor movement, screen clearing and erase-line are DROPPED without effect — a tool card is not a\n * terminal, and honouring `ESC[2J` there would blank the card. Dropping them silently is also what\n * makes the output of a TUI-ish program render as its final visible text instead of as control\n * noise.\n *\n * ## Why a tokenizer rather than a regex replace\n *\n * A naive `/\\x1b\\[[0-9;]*m/` strip leaves `\\r` handling and nesting to chance: `ESC[91m` … `ESC[0m`\n * needs a span boundary, and a re-open after every reset is how terminals do it. This walks the\n * string once and emits `{ text, classes }` runs, which keeps the renderer a dumb `For`.\n *\n * Pure and dependency-free so it is unit-testable under `node --test`.\n */\n\n/** one run of text sharing a style */\nexport interface AnsiRun {\n text: string;\n /** semantic classes, not colours — the palette decides what \"red\" looks like */\n classes: string[];\n}\n\n/** SGR state, as a small record so re-opening after a reset is a copy */\ninterface SgrState {\n fg?: string;\n bg?: string;\n bold: boolean;\n dim: boolean;\n italic: boolean;\n underline: boolean;\n inverse: boolean;\n}\n\n/**\n * The reset state. `fg`/`bg` are explicitly `undefined` rather than omitted.\n *\n * MEASURED: `Object.assign(next, EMPTY)` does NOT remove a key that is absent from `EMPTY`, so a\n * reset left `fg: \"bright-red\"` in place — the colour survived `ESC[0m` and every following run\n * merged into the previous one, which is how `\\x1b[91mA\\x1b[0mB` rendered as one red run \"AB\".\n */\nconst EMPTY: SgrState = {\n fg: undefined,\n bg: undefined,\n bold: false,\n dim: false,\n italic: false,\n underline: false,\n inverse: false,\n};\n\n/** the 8 basic colours + their bright variants, as semantic names */\nconst BASIC = [\"black\", \"red\", \"green\", \"yellow\", \"blue\", \"magenta\", \"cyan\", \"white\"] as const;\n\n/**\n * Map an SGR number to a class.\n *\n * Semantic names rather than hex: `app.css` owns the palette and must be able to retheme tool\n * output the same way it themes everything else. A hardcoded hex here would be the one surface that\n * ignores the operator's theme.\n */\nfunction classesFor(s: SgrState): string[] {\n const out: string[] = [];\n if (s.fg) out.push(`ansi-fg-${s.fg}`);\n if (s.bg) out.push(`ansi-bg-${s.bg}`);\n if (s.bold) out.push(\"ansi-bold\");\n if (s.dim) out.push(\"ansi-dim\");\n if (s.italic) out.push(\"ansi-italic\");\n if (s.underline) out.push(\"ansi-underline\");\n if (s.inverse) out.push(\"ansi-inverse\");\n return out;\n}\n\n/** apply one SGR parameter list to the state (mutating a copy) */\nfunction applySgr(state: SgrState, params: number[]): SgrState {\n const next: SgrState = { ...state };\n // `ESC[m` and `ESC[0m` both mean \"reset everything\"\n if (params.length === 0) params = [0];\n for (let i = 0; i < params.length; i++) {\n const p = params[i]!;\n if (p === 0) {\n // assign the KEYS, not the object: see the note on EMPTY for why this must include fg/bg\n next.fg = undefined;\n next.bg = undefined;\n next.bold = false;\n next.dim = false;\n next.italic = false;\n next.underline = false;\n next.inverse = false;\n } else if (p === 1) next.bold = true;\n else if (p === 2) next.dim = true;\n else if (p === 3) next.italic = true;\n else if (p === 4) next.underline = true;\n else if (p === 7) next.inverse = true;\n else if (p === 21 || p === 22) {\n next.bold = false;\n next.dim = false;\n } else if (p === 23) next.italic = false;\n else if (p === 24) next.underline = false;\n else if (p === 27) next.inverse = false;\n else if (p >= 30 && p <= 37) next.fg = BASIC[p - 30]!;\n else if (p >= 90 && p <= 97) next.fg = `bright-${BASIC[p - 90]!}`;\n else if (p === 39) next.fg = undefined;\n else if (p >= 40 && p <= 47) next.bg = BASIC[p - 40]!;\n else if (p >= 100 && p <= 107) next.bg = `bright-${BASIC[p - 100]!}`;\n else if (p === 49) next.bg = undefined;\n else if (p === 38 || p === 48) {\n /**\n * Extended colour: `5;n` is a 256-colour index, `2;r;g;b` is truecolour.\n *\n * Both are mapped to a NEUTRAL class rather than reproduced: the palette is the operator's,\n * and a hardcoded `rgb()` from a random program would fight it. The important part is that\n * the escape is CONSUMED rather than rendered as text, and the following parameters are\n * skipped so they are not misread as basic colours.\n */\n const kind = params[i + 1];\n const target = p === 38 ? \"fg\" : \"bg\";\n if (kind === 5 && params[i + 2] !== undefined) {\n next[target] = \"ext\";\n i += 2;\n } else if (kind === 2 && params[i + 4] !== undefined) {\n next[target] = \"ext\";\n i += 4;\n } else {\n next[target] = \"ext\";\n i += 1;\n }\n }\n }\n return next;\n}\n\n/** matches an SGR sequence and captures its parameters */\nconst SGR = /\\x1b\\[([0-9;]*)m/;\n\n/**\n * Split text into styled runs.\n *\n * Also normalises the carriage-return redraw idiom: a program that repaints a line emits\n * `text\\r rewritten`, and `\\r` in a `<pre>` does nothing, so the two halves would both show. Keeping\n * only what follows the LAST `\\r` of a line reproduces what a terminal would display.\n */\nexport function ansiRuns(input: string): AnsiRun[] {\n if (!input) return [];\n const runs: AnsiRun[] = [];\n let state: SgrState = { ...EMPTY };\n let buf = \"\";\n\n const flush = () => {\n if (!buf) return;\n const classes = classesFor(state);\n // merge with the previous run when the style did not change, so the DOM stays shallow\n const prev = runs[runs.length - 1];\n if (prev && prev.classes.join(\" \") === classes.join(\" \")) prev.text += buf;\n else runs.push({ text: buf, classes });\n buf = \"\";\n };\n\n for (let i = 0; i < input.length; i++) {\n const c = input[i]!;\n if (c === \"\\x1b\") {\n const rest = input.slice(i);\n const m = SGR.exec(rest);\n if (m) {\n flush();\n const params = (m[1] ?? \"\")\n .split(\";\")\n .filter((s) => s !== \"\")\n .map((s) => Number(s))\n .filter((n) => Number.isFinite(n));\n state = applySgr(state, params);\n i += m[0].length - 1;\n continue;\n }\n // any OTHER CSI / OSC sequence is control noise in a tool card: consume and ignore\n const csi = /^\\x1b\\[[0-9;?]*[A-Za-z]/.exec(rest);\n if (csi) {\n i += csi[0].length - 1;\n continue;\n }\n const osc = /^\\x1b\\][^\\x07\\x1b]*(?:\\x07|\\x1b\\\\)/.exec(rest);\n if (osc) {\n i += osc[0].length - 1;\n continue;\n }\n // a lone ESC: drop it, do not print the byte\n continue;\n }\n if (c === \"\\r\") {\n // CRLF is a real newline; a bare CR is a line redraw\n if (input[i + 1] === \"\\n\") {\n buf += \"\\n\";\n i++;\n continue;\n }\n // discard what this line has shown so far\n buf = \"\";\n continue;\n }\n buf += c;\n }\n flush();\n return runs;\n}\n\n/** the visible text of an ANSI-laden string — for copy buttons and search */\nexport function stripAnsi(input: string): string {\n return ansiRuns(input)\n .map((r) => r.text)\n .join(\"\");\n}\n\n/** does this text contain any escape sequence at all? (cheap pre-check) */\nexport function hasAnsi(input: string): boolean {\n return input.includes(\"\\x1b\");\n}\n","/**\n * Formatting helpers shared by the chat/tool timeline.\n *\n * Kept in its own dependency-free module (no solid-js, no DOM) so they can be\n * unit-tested directly under `node --test`.\n */\n\n/**\n * Milliseconds → a duration a human reads at a glance (#24): `431113ms` on a\n * tool row is the complaint the issue was filed about.\n *\n * A missing value renders as \"?\", so an event without timing data still looks\n * deliberate rather than broken.\n */\nexport function fmtDur(ms: number | undefined | null): string {\n if (ms === undefined || ms === null || !Number.isFinite(ms)) return \"?\";\n const n = Math.max(0, ms);\n if (n < 1_000) return `${Math.round(n)}ms`;\n if (n < 60_000) return `${(n / 1000).toFixed(1)}s`;\n if (n < 3_600_000) {\n const m = Math.floor(n / 60_000);\n const s = Math.round((n % 60_000) / 1000);\n return s ? `${m}m ${s}s` : `${m}m`;\n }\n const h = Math.floor(n / 3_600_000);\n const m = Math.round((n % 3_600_000) / 60_000);\n return m ? `${h}h ${m}m` : `${h}h`;\n}\n\nexport function truncate(s: string, n: number): string {\n return s.length > n ? s.slice(0, n) + \" …\" : s;\n}\n\nexport function relTime(iso: string): string {\n const ms = new Date(iso).getTime() - Date.now();\n const abs = Math.abs(ms);\n const unit =\n abs < 90_000 ? `${Math.round(abs / 1000)}s`\n : abs < 5_400_000 ? `${Math.round(abs / 60_000)}m`\n : `${(abs / 3_600_000).toFixed(1)}h`;\n return ms >= 0 ? `in ${unit}` : `${unit} ago`;\n}\n","/**\n * A bounded cache of highlighted markup, keyed by CONTENT.\n *\n * It is module-level on purpose: an instance-local signal is discarded whenever a row's subtree is\n * rebuilt, and the rebuilt instance then has to race the grammar download again — which is why the\n * same command rendered highlighted on one row and plain on another.\n */\n\nconst MAX = 400;\nconst cache = new Map<string, string>();\n\nexport function highlightedHtml(key: string): string | undefined {\n return cache.get(key);\n}\n\nexport function cacheHighlighted(key: string, html: string): void {\n if (cache.size >= MAX) {\n // Map preserves insertion order, so this drops the oldest entry\n const oldest = cache.keys().next();\n if (!oldest.done) cache.delete(oldest.value);\n }\n cache.set(key, html);\n}\n\n/** test seam: the size, so a bound can be asserted without reaching into the map */\nexport function highlightCacheSize(): number {\n return cache.size;\n}\n","import { For, Show, createEffect, createMemo, createSignal, onCleanup, onMount } from \"solid-js\";\nimport { ansiRuns, hasAnsi } from \"../lib/ansi\";\nimport { fmtDur } from \"../lib/format\";\nimport { cacheHighlighted, highlightedHtml } from \"../lib/highlight-cache\";\n\n\nexport function BashElapsed(props: { startedAt: string; inline?: boolean; timeoutMs?: number }) {\n const start = new Date(props.startedAt).getTime();\n const [now, setNow] = createSignal(Date.now());\n onMount(() => {\n // 500ms tick is plenty for a seconds readout and stops with the row\n const t = setInterval(() => setNow(Date.now()), 500);\n onCleanup(() => clearInterval(t));\n });\n // shares fmtDur() with the finished rows so a running call and its result\n // read identically instead of flipping between two formats\n const txt = () => fmtDur(Math.max(0, now() - start));\n // inline: compact form for the folded summary (\"running… 1m 26s\")\n if (props.inline) {\n return (\n <span class=\"bashelapsed\">\n running… {txt()}\n {props.timeoutMs ? ` · timeout ${Math.round(props.timeoutMs / 1000)}s` : \"\"}\n </span>\n );\n } return <span class=\"bashelapsed\">{txt()} elapsed</span>;\n}\n\nexport function ThinkingTimer(props: { startedAt: number }) {\n const [now, setNow] = createSignal(Date.now());\n onMount(() => {\n const t = setInterval(() => setNow(Date.now()), 500);\n onCleanup(() => clearInterval(t));\n });\n /**\n * 0 is the \"not armed\" sentinel, never a timestamp.\n *\n * `now() - 0` is elapsed since the EPOCH, and the readout said \"thinking 498029h 10m\" — reported\n * twice. A `!props.startedAt` guard was added for exactly this and it was not enough: a clock armed\n * for an EARLIER stretch survives while a stale live bubble keeps it \"meaningful\", and then the\n * elapsed time is measured from a moment that has nothing to do with what is on screen.\n *\n * So the sanity check is on the RESULT, not just on the sentinel: a duration longer than any\n * plausible single thinking stretch means the timestamp is not about this block, and showing\n * nothing is honest where a five-digit hour count is not.\n */\n if (!props.startedAt) return null;\n const elapsed = Math.max(0, now() - props.startedAt);\n if (elapsed > 24 * 60 * 60 * 1000) return null; // > a day cannot be one thinking stretch\n return <span class=\"thinktimer\">{fmtDur(elapsed)}</span>;\n}\n\nexport function AnsiText(props: { text: string }) {\n /**\n * Only pay for the tokenizer when the text can contain escapes.\n *\n * Most results are plain, and `ansiRuns` walks every character; the gate keeps the common case at\n * a single `includes`.\n */\n const runs = createMemo(() => (hasAnsi(props.text) ? ansiRuns(props.text) : null));\n return (\n <Show\n when={runs()}\n fallback={<pre class=\"mono toolbody\">{props.text}</pre>}\n >\n <pre class=\"mono toolbody ansi\">\n <For each={runs()!}>\n {(r) => (r.classes.length ? <span class={r.classes.join(\" \")}>{r.text}</span> : r.text)}\n </For>\n </pre>\n </Show>\n );\n}\n\nexport function HighlightedCode(props: { text: string; lang?: string }) {\n // a separator that cannot appear in a language id or in the code itself\n const key = () => (props.lang ? `${props.lang}::${props.text.length}::${props.text}` : \"\");\n const cached = () => (props.lang ? highlightedHtml(key()) : undefined);\n const [html, setHtml] = createSignal(cached() ?? \"\");\n createEffect(() => {\n const k = key();\n const text = props.text;\n const lang = props.lang;\n if (!lang || !text.trim()) { setHtml(\"\"); return; }\n const hit = highlightedHtml(k);\n if (hit !== undefined) { setHtml(hit); return; }\n /**\n * No \"is my run still current\" guard.\n *\n * The result is cached by CONTENT, so it does not matter which instance produced it or whether\n * that instance still exists — the next mount reads it back. A guard could only throw work\n * away, and that is how an earlier version lost the highlighting entirely.\n */\n void (async () => {\n try {\n const { highlightLangChunks } = await import(\"../lib/shiki\");\n let acc = \"\";\n for await (const chunk of highlightLangChunks(lang, text)) acc += chunk;\n if (!acc) return;\n cacheHighlighted(k, acc);\n // paint only if this instance is still asking for the same content\n if (key() === k) setHtml(acc);\n } catch {\n // give up → the plain fallback stays\n }\n })();\n });\n /**\n * `when={!!html()}`: a boolean, so Solid re-evaluates the CONDITION reactively.\n *\n * `when={html()}` also tracks, but the CHILD below is an accessor-free element — it is created\n * once when the condition first holds. MEASURED: the effect logged `{chunks: 1, accLen: 604}`\n * while the DOM still held the plain `<pre>` fallback, which is why \"ツールカードのshiki効いてない\"\n * looked like the highlighter was failing when it had actually succeeded.\n */\n return (\n <Show when={!!html()} fallback={<pre class=\"mono toolbody\">{props.text}</pre>}>\n {/**\n * The wrapper carries BOTH classes the stylesheet keys on: `toolbody` for the shared surface\n * and `shiki` for the dual-theme colour variables. Shiki emits its own\n * `<pre class=\"shiki\"><code>…</code></pre>` — markup we generate from a grammar, never from\n * user input — so the inner `<pre>` must not paint a second surface of its own.\n */}\n <div class=\"toolbody shiki\" innerHTML={html()} />\n </Show>\n );\n}\n","export type ThemeMeta = {\n key: string;\n label: string;\n mode: \"dark\" | \"light\";\n /** three preview dots: page bg · raised surface · accent */\n sw: [string, string, string];\n};\n\nexport const THEMES: ThemeMeta[] = [\n { key: \"dark\", label: \"Dark\", mode: \"dark\", sw: [\"#1a1c22\", \"#2b2e39\", \"#5865f2\"] },\n { key: \"midnight\", label: \"Midnight\", mode: \"dark\", sw: [\"#0d0f18\", \"#252a42\", \"#8b7cf7\"] },\n { key: \"tea\", label: \"Milk Tea\", mode: \"dark\", sw: [\"#241c16\", \"#493b2d\", \"#d98e32\"] },\n { key: \"coffee\", label: \"Coffee\", mode: \"dark\", sw: [\"#191410\", \"#403527\", \"#c68a4b\"] },\n { key: \"matcha\", label: \"Matcha\", mode: \"dark\", sw: [\"#1b2217\", \"#3c4a33\", \"#8db64e\"] },\n { key: \"matrix\", label: \"Matrix\", mode: \"dark\", sw: [\"#060a06\", \"#18301d\", \"#2fd558\"] },\n { key: \"sunset\", label: \"Sunset\", mode: \"dark\", sw: [\"#1c1422\", \"#452f52\", \"#f2784b\"] },\n { key: \"light\", label: \"Light\", mode: \"light\", sw: [\"#eceef4\", \"#ffffff\", \"#4757d8\"] },\n { key: \"strawberry\", label: \"Strawberry\", mode: \"light\", sw: [\"#fbe4ea\", \"#fffafb\", \"#e05575\"] },\n { key: \"ramune\", label: \"Ramune\", mode: \"light\", sw: [\"#ddeff7\", \"#fbfeff\", \"#1d86ae\"] },\n];\n","export async function api(path: string, opts?: RequestInit) {\n const token = localStorage.getItem(\"teapot.token\");\n const headers = new Headers(opts?.headers);\n if (token && !headers.has(\"authorization\")) headers.set(\"authorization\", `Bearer ${token}`);\n const res = await fetch(path, { ...opts, headers });\n if (!res.ok) {\n // auth gate: surface once so the login overlay can appear\n if (res.status === 401) window.dispatchEvent(new CustomEvent(\"teapot:unauthorized\"));\n let body: unknown = null;\n try { body = await res.json(); } catch { /* not json */ }\n const detail =\n (body && typeof body === \"object\" && \"error\" in body ? String((body as any).error) : \"\") ||\n `${path}: HTTP ${res.status}`;\n // carry the full payload (e.g. a 409's `current` file content) to callers\n throw Object.assign(new Error(detail), { payload: body });\n }\n return res.json();\n}\n","import { renderMarkdown } from \"../md\";\n\nconst mdCache = new Map<string, string>();\nexport function renderMarkdownCached(src: string): string {\n const hit = mdCache.get(src);\n if (hit !== undefined) return hit;\n const html = renderMarkdown(src);\n mdCache.set(src, html);\n if (mdCache.size > 500) mdCache.delete(mdCache.keys().next().value!);\n return html;\n}\n","/**\n * How a theme preview composes its wallpaper and its panels.\n *\n * #theme-preview: the cards preview a theme's PALETTE, so a custom theme carrying a background image\n * previewed as a flat palette — two themes differing only by wallpaper looked identical, and a theme\n * with an image looked like it had none. Asked for as \"テーマカードに背景画像(透過設定付きで)も出すよう\n * になると嬉しい / その場合、下側の背景透過と重複しないようにしないといけない\".\n *\n * That second clause is the real constraint: the app dims the photo with a veil and then paints\n * translucent panels over it, so a preview that applied the dim AND the panel opacity would darken\n * twice — it would show a surface considerably denser than the app ever does. This module therefore\n * returns the two in the order the real stylesheet applies them (veil first, panels after), and the\n * caller renders them as separate layers rather than mixing one colour.\n *\n * Pure and dependency-free so it is unit-testable under `node --test`.\n */\n\nexport interface PreviewLayers {\n /** opacity of the veil painted directly over the wallpaper, 0 = none */\n dim: number;\n /** opacity of each simulated panel (sidebar, header, content surface) */\n panel: number;\n /** opacity of the raised content surface, which the app paints one step denser */\n raised: number;\n}\n\n/** the app's own defaults, matching `app.css` (`--surface-alpha` 0.82, panels one step below) */\nconst DEFAULT_ALPHA = 0.82;\nconst DEFAULT_DIM = 0.9;\n\n/**\n * Clamp to [0,1], treating a non-finite value as \"unset\".\n *\n * `NaN` must not become 0: a preview at zero opacity is an INVISIBLE tile, and a broken stored theme\n * would then look like a rendering bug. Returning `undefined` lets the caller apply its default.\n */\nconst clamp01 = (n: number): number | undefined => {\n if (!Number.isFinite(n)) return undefined;\n return n < 0 ? 0 : n > 1 ? 1 : n;\n};\n\n/**\n * The layer opacities to draw.\n *\n * `surfaceAlpha` is the operator's slider: high means dense surfaces. The real stylesheet puts the\n * panel one step BELOW the base (`--surface-alpha − 0.05`) and raises the content surface above it\n * (`+ 0.06`), so the preview mirrors that ordering — a preview whose panels were denser than the\n * app's would make every theme look more opaque than it is.\n */\nexport function previewLayers(surfaceAlpha?: number, backgroundDim?: number): PreviewLayers {\n const base = clamp01(surfaceAlpha ?? DEFAULT_ALPHA) ?? DEFAULT_ALPHA;\n const dim = clamp01(backgroundDim ?? DEFAULT_DIM) ?? DEFAULT_DIM;\n return {\n dim,\n // `base` is already a finite number in [0,1], so these stay in range without re-clamping\n panel: Math.max(0, Math.min(1, base - 0.05)),\n raised: Math.max(0, Math.min(1, base + 0.06)),\n };\n}\n\n/**\n * A veil colour for the wallpaper layer.\n *\n * The app's veil is `color-mix(--bg-dark, dim)`, i.e. it TINTS toward the theme's own surface rather\n * than darkening: a light theme with a photo behind it must get a LIGHT veil, or the panels around\n * it look like they float on a black page. Returning the mix here (instead of a fixed black overlay)\n * keeps that direction, which was a reported bug in the app itself.\n */\nexport function veilColour(surface: string, dim: number): string {\n const pct = Math.round((clamp01(dim) ?? DEFAULT_DIM) * 100);\n // `color-mix` degrades to the untinted surface where unsupported, which is still readable\n return `color-mix(in srgb, ${surface} ${pct}%, transparent)`;\n}\n\n/**\n * The CSS `background-image` value for a theme's stored image.\n *\n * #theme-preview: `CustomTheme.backgroundImage` holds a BARE URL — `/api/assets/<hex>.png`, a\n * `data:` URI, or an `http(s)://` URL (see `sanitizeTheme`, which accepts exactly those three\n * shapes). Assigning that straight to `background-image` is invalid CSS, so the element rendered\n * with no image at all while looking perfectly correct in the markup:\n *\n * <span class=\"tprev-bg\"></span> ← the reported HTML: the style is missing entirely\n *\n * MEASURED: the operator's own card showed `<span class=\"tprev-bg\">` with no `style` attribute\n * despite `title=\"… · with a background image\"`, because the browser drops an invalid declaration.\n *\n * Returns `undefined` for an empty value so the caller keeps its plain palette, and quotes the URL\n * so a `data:` URI containing `;` or `,` survives.\n */\nexport function backgroundImageValue(image?: string): string | undefined {\n const v = image?.trim();\n if (!v) return undefined;\n return `url(\"${v.replace(/\"/g, \"%22\")}\")`;\n}\n","import { For, Show, createSignal, onCleanup } from \"solid-js\";\nimport { renderMarkdownCached } from \"../lib/markdown\";\nimport { previewLayers, veilColour, backgroundImageValue } from \"../lib/theme-preview\";\nimport type { ThemePalette } from \"../lib/theme-store\";\n\n\nexport function TodoEditor(props: {\n\n draft: string;\n preview: boolean;\n onDraft: (text: string) => void;\n}) {\n // these two branches were INVERTED — `<Show when={…}>` rendered the TEXTAREA\n // and the checklist was the `fallback`, so `true` meant \"editor\". `saveTodo` set\n // `true` to reach the preview and therefore did the opposite.\n //\n // The prop is named `preview`, not `viewMode`, because there is an unrelated\n // `viewMode` signal in this file (the file-viewer's code/md/media mode) and the\n // two were being confused. The branches are also swapped, so the name states what\n // actually renders.\n //\n // HEIGHT IS SHARED BY THE TWO VIEWS. The textarea is natively resizable\n // (`resize: vertical`), so the browser applies the drag as an INLINE height on that\n // one element — and the preview is a DIFFERENT element, which fell back to the\n // stylesheet's `11.5em`. Dragging the editor therefore lost its height the moment you\n // switched to the checklist. Observed with a ResizeObserver and applied to both, so a\n // drag survives the toggle; persisted so it also survives a reload.\n const stored = Number(localStorage.getItem(\"teapot.todoH\") ?? \"\");\n const [todoHeight, setTodoHeight] = createSignal<number>(\n Number.isFinite(stored) && stored > 0 ? stored : 0,\n );\n const heightStyle = () => (todoHeight() > 0 ? { height: `${todoHeight()}px` } : undefined);\n /**\n * Track a height the user produced by dragging.\n *\n * A ResizeObserver rather than `onpointerup`: the native resize handle does not have to\n * involve a pointer event this listener sees (a touch drag, a keyboard/assistive\n * resize), and the observer reports the real box either way. It is armed per element, so\n * whichever view is mounted feeds the same signal.\n */\n const trackHeight = (el: HTMLElement) => {\n const ro = new ResizeObserver(() => {\n const h = el.offsetHeight;\n if (h <= 0) return;\n setTodoHeight((cur) => {\n if (Math.abs(cur - h) < 1) return cur; // no churn from sub-pixel reflow\n localStorage.setItem(\"teapot.todoH\", String(h));\n return h;\n });\n });\n ro.observe(el);\n onCleanup(() => ro.disconnect());\n };\n\n return (\n <Show\n when={props.preview}\n fallback={\n /* the markdown editor — the default view */\n <textarea\n id=\"todo-input\"\n class=\"mono todopane-edit\"\n rows={5}\n style={heightStyle()}\n ref={trackHeight}\n placeholder={\"- [ ] task one\\n- [ ] task two\"}\n value={props.draft}\n oninput={(e) => props.onDraft(e.currentTarget.value)}\n title=\"shared with the agent \\u2014 it may check items off via set_todo; your unsaved edits win until you save\"\n />\n }\n >\n {/* rendered checklist; #124: both views take their height from `.todopane`,\n so they cannot drift again — plus the shared dragged height above */}\n <div\n class=\"content mdpreview todopane\"\n style={heightStyle()}\n ref={trackHeight}\n innerHTML={renderMarkdownCached(props.draft)}\n />\n </Show>\n );\n}\n\nexport function CodePreview(props: { path: string; content: string; html: string; pending: boolean; truncated: boolean }) {\n return (\n <>\n <Show\n when={props.html}\n fallback={\n props.pending ? (\n <div class=\"muted\" style=\"padding:8px;font-size:12px\">\n ✨ highlighting {props.path.split(\"/\").pop()}…\n </div>\n ) : (\n <pre class=\"mono\" style=\"max-height:62vh;overflow:auto;white-space:pre-wrap;margin:0\">\n {props.content}\n </pre>\n )\n }\n >\n {/* shiki emits its own <pre class=\"shiki\"><code>…</code></pre>; content is shiki-generated HTML */}\n <div class=\"filepreview\" innerHTML={props.html} />\n </Show>\n <Show when={props.truncated}>\n <div class=\"muted\" style=\"padding-top:6px;font-size:11.5px\">… truncated (first 100 KB)</div>\n </Show>\n </>\n );\n}\n\nexport function NumberField(props: {\n label: string;\n value: number;\n onValue: (v: number) => void;\n hint?: string;\n}) {\n return (\n <label title={props.hint}>\n {props.label}\n <input\n type=\"number\"\n min=\"0\"\n value={props.value}\n oninput={(e) => props.onValue(Number(e.currentTarget.value))}\n />\n </label>\n );\n}\n\nexport function ThemePreview(props: {\n palette: ThemePalette;\n /**\n * A custom theme may carry a background image, and a preview that omits it shows a flat palette\n * the operator never sees in the app — two themes that differ only by wallpaper previewed\n * identically. Asked for as \"テーマカードに背景画像(透過設定付きで)も出すようになると嬉しい\".\n *\n * Drawn as its OWN layer under the palette layers rather than as the root's `background`, so the\n * simulated nav/head/panel keep their colours: the point is to preview the composition, not the\n * photo alone.\n */\n backgroundImage?: string;\n /** the operator's surface-opacity slider for this theme */\n surfaceAlpha?: number;\n /** how much the wallpaper is veiled; the app tints toward the theme's surface, never black */\n backgroundDim?: number;\n}) {\n const p = () => props.palette;\n const layers = () => previewLayers(props.surfaceAlpha, props.backgroundDim);\n return (\n <span class=\"tprev\" style={{ background: p().bgDark }}>\n <Show when={props.backgroundImage}>\n <span class=\"tprev-bg\" style={{ \"background-image\": backgroundImageValue(props.backgroundImage) }} />\n {/**\n * The VEIL is a separate layer, exactly as `.bgphoto-veil` is in the app.\n *\n * It has to sit between the photo and the panels: painting it as the photo's own\n * background would put it UNDER the image (a background never covers its content), and\n * mixing the dim INTO the panel colour would dim twice — once for the veil the app\n * applies and once for the surface opacity, which is the double-counting the operator\n * warned about (\"下側の背景透過と重複しないように\").\n */}\n <span\n class=\"tprev-veil\"\n style={{ background: veilColour(p().bgDark, layers().dim) }}\n />\n </Show>\n <span\n class=\"tprev-nav\"\n style={{ background: p().bgDarkest, opacity: props.backgroundImage ? String(layers().panel) : \"1\" }}\n />\n <span\n class=\"tprev-head\"\n style={{ background: p().bgDarkest, opacity: props.backgroundImage ? String(layers().panel) : \"1\" }}\n />\n <span\n class=\"tprev-panel\"\n style={{ background: p().bgMid, opacity: props.backgroundImage ? String(layers().raised) : \"1\" }}\n />\n {/* text lines: two \"words\" then a shorter one, so it reads as prose */}\n <span class=\"tprev-line\" style={{ left: \"32%\", top: \"38%\", width: \"34%\", background: p().fg, opacity: 0.85 }} />\n <span class=\"tprev-line\" style={{ left: \"32%\", top: \"50%\", width: \"22%\", background: p().acc }} />\n <span class=\"tprev-line\" style={{ left: \"32%\", top: \"62%\", width: \"40%\", background: p().dim }} />\n {/* the accent and status dots: what tells two dark themes apart at a glance */}\n <span class=\"tprev-dot\" style={{ left: \"6%\", top: \"20%\", background: p().acc }} />\n <span class=\"tprev-dot\" style={{ left: \"6%\", top: \"40%\", background: p().dim }} />\n <span class=\"tprev-dot\" style={{ left: \"6%\", top: \"60%\", background: p().ok }} />\n <span class=\"tprev-dot\" style={{ left: \"70%\", top: \"12%\", background: p().warn }} />\n <span class=\"tprev-dot\" style={{ left: \"84%\", top: \"12%\", background: p().err }} />\n </span>\n );\n}\n","import { createSignal } from \"solid-js\";\n\n/* ---------- transient toast hint (module scope: also used by SwitchContent) ---------- */\nconst [flash, setFlash] = createSignal(\"\");\nlet flashTimer: ReturnType<typeof setTimeout> | undefined;\nconst flashHint = (msg: string) => {\n setFlash(msg);\n clearTimeout(flashTimer);\n flashTimer = setTimeout(() => setFlash(\"\"), 3200);\n};\n\nexport const flashMsg = flash;\nexport { flashHint };\n","import { truncate } from \"./format\";\n\nexport interface Ev {\n id: string; seq: number; ts: string; session: string; branch: string;\n type: string; parent: string | null; data: any;\n}\n\nexport const AUTHORS: Record<string, { name: string; icon: string; color: string }> = {\n prompt: { name: \"you\", icon: \"🟧\", color: \"#faa81a\" },\n user: { name: \"you\", icon: \"🟧\", color: \"#faa81a\" },\n message: { name: \"agent\", icon: \"🫖\", color: \"#5865f2\" },\n progress: { name: \"progress\", icon: \"📈\", color: \"#3ba55d\" },\n question: { name: \"agent\", icon: \"❓️\", color: \"#5865f2\" }, // ask_user comes from the agent too\n};\n\nexport const HARNESS_AUTH = { name: \"harness\", icon: \"📣\", color: \"#3ba55d\" };\n\n/**\n * The author's colour, as a CLASS rather than an inline style.\n *\n * `style={{ \"--author\": colour }}` was one custom property per row, and a row is created ~1,100\n * times when a session opens — the same argument that moved every other row detail into the\n * stylesheet. The palette is a fixed set (one colour per author kind), so it maps to a class.\n */\nexport const AUTHOR_TONES = [\"you\", \"agent\", \"progress\", \"harness\", \"tool\"] as const;\nexport type AuthorTone = (typeof AUTHOR_TONES)[number];\n\nconst TONE_OF: Record<string, AuthorTone> = {\n \"#faa81a\": \"you\",\n \"#5865f2\": \"agent\",\n \"#3ba55d\": \"progress\",\n \"#3ba0c9\": \"tool\",\n};\n\nexport const toneOf = (color: string): AuthorTone => TONE_OF[color] ?? \"agent\";\n\nexport const authorOf = (e: Ev) => {\n if (e.data?.actor) return { name: `@${String(e.data.actor)}`, icon: \"🧩\", color: \"#3ba0c9\" };\n if (e.type === \"tool_call\" || e.type === \"tool_result\")\n return { name: String(e.data?.name ?? \"tool\"), icon: \"⚙️\", color: \"#3ba0c9\" };\n if (e.type === \"prompt\") {\n const src = String(e.data?.source ?? \"user\");\n if (src === \"user\") return AUTHORS.prompt;\n return src.startsWith(\"scheduler:\") ? { name: src.slice(10), icon: \"📣\", color: \"#3ba55d\" } : HARNESS_AUTH;\n }\n return AUTHORS[e.type] ?? { name: e.type, icon: \"•\", color: \"#9298a5\" };\n};\n\nexport const fmtTs = (iso: string) => {\n const d = new Date(iso);\n return `${String(d.getHours()).padStart(2, \"0\")}:${String(d.getMinutes()).padStart(2, \"0\")}`;\n};\n\nexport function rawOf(e: Ev): string {\n const d = e.data ?? {};\n if (e.type === \"prompt\") return String(d.text ?? \"\");\n if (e.type === \"message\") {\n // include reasoning when present, separated, so nothing is lost\n const r = typeof d.reasoning === \"string\" && d.reasoning.trim()\n ? `<reasoning>\\n${d.reasoning}\\n</reasoning>\\n\\n`\n : \"\";\n return `${r}${String(d.content ?? \"\")}`;\n }\n if (e.type === \"tool_call\") {\n // the header copy button used to sit on tool rows too and copied \"\"\n // (rawOf only knew prompts/messages) — tool rows get dedicated\n // command/output buttons inside ToolRow instead, so nothing here\n return \"\";\n }\n return \"\";\n}\n\nexport function fmtK(n: number): string {\n if (n >= 1e9) return `${+(n / 1e9).toFixed(1)}b`;\n if (n >= 1e6) return `${+(n / 1e6).toFixed(1)}m`;\n if (n >= 10_000) return `${Math.round(n / 1000)}k`;\n if (n >= 1000) return `${(n / 1000).toFixed(1)}k`;\n return String(n);\n}\n\nexport function oneLine(s: string, n: number): string {\n const line = s.replace(/\\s+/g, \" \").trim();\n return truncate(line, n);\n}\n","/**\n * Row grouping for the chat feed.\n *\n * The rule: consecutive rows from the same ACTOR group together, so a run of\n * tool calls reads as one block. Three things must NOT group:\n *\n * - a PENDING (queued) message, because its cancel affordance lives inside the\n * msg-head and that head only renders when `!grouped` (#49) — so a queued\n * message following a sent prompt lost its ✕ and could not be withdrawn;\n * - a CANCELLED row, for the same reason;\n * - rows from a different session or branch, which are not adjacent in time.\n *\n * The actor for tool events is THE AGENT, not the tool: keying by tool name\n * split a run as soon as two different tools ran back to back.\n *\n * #75: extracted from App.tsx so the tests drive the code that runs.\n */\n\nexport interface RowLike {\n type: string;\n session?: string;\n branch?: string;\n /**\n * The fields this rule READS, all optional. Deliberately NOT a closed record: an\n * event's payload carries whatever its type needs (promptId, content, result, …) and\n * a caller passing a real event must not be rejected for the fields this function\n * happens to ignore.\n */\n data?: {\n /** the tool name, used to single out a skill load (#149) */\n name?: unknown;\n actor?: unknown;\n source?: unknown;\n pending?: unknown;\n cancelled?: unknown;\n [other: string]: unknown;\n };\n}\n\n/**\n * Which side of the conversation a row belongs to — a coarse 3-way bucket used as\n * a GROUPING key. (App.tsx has its own `authorOf` for display metadata; the two\n * are unrelated, hence the distinct name here.)\n *\n * Returns a STRING, not an object: a comparison of two `{name}` objects is a\n * reference comparison and is always false, which silently disabled grouping.\n */\nfunction authorBucketOf(ev: RowLike): string {\n if (ev.type === \"prompt\" && ev.data?.source === \"user\") return \"you\";\n if (ev.type === \"message\") return \"agent\";\n return \"harness\";\n}\n\n/**\n * The grouping key for a row.\n *\n * Tool events all share the AGENT's key: keying by tool NAME split a run as soon as\n * two different tools ran back to back.\n *\n * `load_skill` is the exception (#149). It renders as an EXPANDED panel of prose\n * (the skill body), so a following row grouping under it reads as part of that\n * prose rather than as the next action — reported as \"the bash after load_skill is\n * hanging under it\". It gets its own key, which still groups the call with its\n * result (one visual unit) but not with an ordinary tool row after it.\n */\nfunction actorKeyOf(ev: RowLike): string {\n const d = ev.data ?? {};\n if (ev.data?.actor) return `sub:${String(ev.data.actor)}`;\n if (ev.type === \"tool_call\" || ev.type === \"tool_result\") {\n const name = typeof d.name === \"string\" ? d.name : \"\";\n // A run of the SAME tool groups; a change of tool starts a new group.\n //\n // Keying every tool as one bucket made `write_file` swallow the `bash` after it,\n // and the bash then rendered with no icon under the file's panel — reported as\n // \"write_file 後の bash が間違ってグループ化されてる\". Reading the earlier comment\n // here (\"keying by tool name split a run as soon as two different tools ran back\n // to back\") the original intent was clearly the opposite complaint: two ROWS of one\n // tool must group, which keying by name does. What must NOT group is one tool\n // hanging under a different tool's output, because the second then reads as part of\n // the first instead of as the next action.\n //\n // `load_skill` keeps its own bucket for the same reason it always had one (#149):\n // it renders as expanded prose, so anything under it reads as that prose.\n return name === \"load_skill\" ? \"agent-skill\" : `tool:${name}`;\n }\n if (ev.type === \"prompt\") return `src:${String(d.source ?? \"user\")}`;\n return `type:${ev.type}`;\n}\n\n/** Does `e` group with the row above it? A first row (no `prev`) never does. */\nexport function groupedWith(prev: RowLike | undefined, e: RowLike): boolean {\n return !!(\n prev &&\n !e.data?.pending &&\n !prev.data?.pending &&\n !e.data?.cancelled &&\n actorKeyOf(prev) === actorKeyOf(e) &&\n authorBucketOf(prev) === authorBucketOf(e) &&\n e.session === prev.session &&\n e.branch === prev.branch\n );\n}\n","/**\n * How a shell invocation ENDED, as shown on the timeline.\n *\n * #46: \"a timed-out bash never reads as complete on the timeline.\"\n *\n * The bash summary line is built from the tool_result's duration and the\n * requested timeout, so a killed command reads as `300ms · timeout 1s` — exactly\n * like a fast SUCCESS. The kill has to be marked on that line.\n *\n * The three terminal shapes come straight from runShell():\n * - `TIMEOUT after <n>ms …` the timeout fired and the group was killed\n * - `ABORTED (harness shutdown) …` the harness was shutting down\n * - anything else a normal exit (ok, or `exit=<code>`)\n */\n\n/** Where a tool_result's text came out; null when it is not a shell result. */\nexport type ShellOutcome = \"timeout\" | \"aborted\" | \"exit\" | \"ok\" | \"empty\";\n\nexport function shellOutcome(\n ok: boolean | undefined,\n result: string | null | undefined,\n): ShellOutcome {\n const text = String(result ?? \"\");\n if (/^TIMEOUT after\\b/.test(text)) return \"timeout\";\n if (/^ABORTED\\b/.test(text)) return \"aborted\";\n if (/^exit=\\d+/.test(text)) return \"exit\";\n if (ok === false) return \"exit\";\n return text.trim() ? \"ok\" : \"empty\";\n}\n\n/**\n * The marker appended to a tool row's summary line. `· FAILED` is kept for\n * non-zero exits, so the common failure path reads as it always has; only the\n * KILLED cases get their own wording.\n */\nexport function outcomeMarker(outcome: ShellOutcome): string {\n switch (outcome) {\n case \"timeout\":\n return \" · TIMED OUT\";\n case \"aborted\":\n return \" · ABORTED\";\n case \"exit\":\n return \" · FAILED\";\n default:\n return \"\";\n }\n}\n\n/**\n * The full summary hint for a shell row, e.g.\n * `7.2m · timeout 3300s` or `300ms · timeout 1s · TIMED OUT`.\n */\nexport function shellHint(opts: {\n outcome: ShellOutcome;\n durationMs: number | undefined;\n timeoutMs: number | undefined;\n fmtDur: (ms: number | undefined) => string;\n}): string {\n const parts: string[] = [];\n if (opts.outcome !== \"empty\") parts.push(opts.fmtDur(opts.durationMs));\n if (opts.timeoutMs) parts.push(`timeout ${Math.round(opts.timeoutMs / 1000)}s`);\n const marker = outcomeMarker(opts.outcome);\n if (marker) parts.push(marker.trim());\n return parts.join(\" · \");\n}\n","/**\n * Which grammar, if any, a tool's OUTPUT should be highlighted with.\n *\n * \"ツールエリアのshikiが効いてない\" was reported with a `set_todo` card whose JSON argument block came\n * out as `<pre class=\"mono toolbody\">`. The ARGUMENTS were already highlighted (`argsBlock` passes\n * `lang=\"json\"`); the OUTPUT beside them was not, because `resultBlock` calls `codeBlock(out(), max)`\n * with no language at all. In a tool whose output is JSON — most MCP tools, and any tool returning a\n * serialised object — that is half the card rendering as plain text, which reads as \"highlighting\n * does not work here\".\n *\n * Guessing is worse than nothing: marking every output `json` would feed shell output, stack traces\n * and prose through a JSON grammar, where the tokenizer produces confident nonsense. So this only\n * says \"json\" when the text actually PARSES as JSON, and `null` otherwise — the caller then renders\n * the plain fallback it always did.\n *\n * Pure and dependency-free so it is unit-testable under `node --test`.\n */\nexport function outputLang(text: string): string | undefined {\n const t = text.trim();\n if (!t) return undefined;\n /**\n * Only the shapes a whole JSON VALUE can start with. This is a cheap gate, not the test: the\n * `JSON.parse` below decides. Without it, every bash output starting with `[` (a glob, a prompt)\n * would pay a parse attempt on each render.\n */\n const first = t[0];\n if (first !== \"{\" && first !== \"[\" && first !== '\"') return undefined;\n // a truncated result (the caller caps at `max`) cannot parse, and highlighting a half-object as\n // JSON is the confident-nonsense case again — so only whole values are accepted\n try {\n const v: unknown = JSON.parse(t);\n // a bare string/number/true/null is technically JSON but carries no structure to colour\n return v !== null && typeof v === \"object\" ? \"json\" : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Reformat a JSON tool result the way the ARGUMENTS beside it are formatted.\n *\n * `argsBlock` renders `JSON.stringify(args, null, 1)` — one field per line. An output that is also\n * JSON was shown as whatever the server happened to send, so a single-line blob sat next to a\n * pretty-printed argument block for the same call: same data, two shapes, and the output side was\n * the unreadable one (most MCP tools return JSON).\n *\n * Only WHOLE JSON values are reformatted. `outputLang` already decides that (it parses), so this\n * reuses the same test rather than guessing — a truncated result or shell output must come through\n * byte-identical, because reformatting something that is not JSON would be a confident lie about the\n * content. A value that is already pretty-printed is left alone (rewriting it would change the byte\n * count for no gain).\n *\n * Indent 1 matches `argsBlock`, so a call and its result line up.\n */\nexport function formatToolOutput(text: string): string {\n if (outputLang(text) !== \"json\") return text;\n try {\n const value: unknown = JSON.parse(text.trim());\n const pretty = JSON.stringify(value, null, 1);\n /**\n * Already laid out → leave it alone. `pretty` is ALWAYS multi-line for an object, so the test has\n * to be on the INPUT: reformatting something the server already formatted would only churn the\n * bytes (and reorder nothing, since key order is preserved).\n */\n return text.trim().split(\"\\n\").length > 1 ? text : pretty;\n } catch {\n return text;\n }\n}\n","import { For, Show, createMemo, createSignal } from \"solid-js\";\nimport { AnsiText, BashElapsed, HighlightedCode } from \"./code\";\nimport { Card } from \"./card\";\nimport { CopyBtn, IconBtn } from \"./chrome\";\nimport { api } from \"../lib/api\";\nimport { flashHint } from \"../lib/flash\";\nimport { hasAnsi, stripAnsi } from \"../lib/ansi\";\nimport { fmtDur, truncate } from \"../lib/format\";\nimport { goalLine } from \"../lib/goal-timeline\";\nimport { toneOf } from \"../lib/timeline-row\";\nimport { renderMarkdown } from \"../md\";\nimport { renderMarkdownCached } from \"../lib/markdown\";\nimport { groupedWith, type RowLike } from \"../lib/row-grouping\";\nimport { outcomeMarker, shellHint, shellOutcome } from \"../lib/shell-outcome\";\nimport { authorOf, fmtK, fmtTs, oneLine, rawOf, type Ev } from \"../lib/timeline-row\";\nimport { formatToolOutput, outputLang } from \"../lib/tool-output-lang\";\n\n\nexport function FreeTextAnswer(props: { answered: boolean; onOption?: (t: string) => void }) {\n const [val, setVal] = createSignal(\"\");\n const submit = () => {\n const t = val().trim();\n if (!t || props.answered) return;\n setVal(\"\");\n props.onOption?.(t);\n };\n return (\n <div class=\"qfree\">\n <input\n type=\"text\"\n placeholder={props.answered ? \"answered\" : \"or type your own answer…\"}\n disabled={props.answered}\n value={val()}\n oninput={(e) => setVal(e.currentTarget.value)}\n onkeydown={(e: KeyboardEvent) => {\n // same Safari IME caveat as the main composer: isComposing is\n // already false by the time Enter's keydown arrives\n if (e.key === \"Enter\" && !e.isComposing) { e.preventDefault(); submit(); }\n }}\n />\n <button disabled={props.answered || !val().trim()} onclick={submit}>reply</button>\n </div>\n );\n}\n\nexport function ToolRow(props: { e: Ev; prev?: Ev; res?: () => Ev | undefined; orphan?: boolean; agentActive?: boolean; onResize?: () => void }) {\n const e = props.e;\n // GROUPING (#75 pattern, again). `groupedWith()` is the shared rule and it\n // ALWAYS said these two bash calls group — but ToolRow never received `prev`, so\n // the rule never ran for tool rows and every one of them rendered a full head:\n //\n // embed class=\"embed done\" summary=\"⚙️ $ echo ALPHA3ms…\"\n // embed class=\"embed done\" summary=\"⚙️ $ echo BETA3ms…\" <- reported\n //\n // helper was right and the CALL was missing. A run of commands therefore read as\n // a stack of unrelated blocks, which is the \"timeline is cluttered\" complaint.\n const grouped = groupedWith(props.prev as RowLike | undefined, e as RowLike);\n // read the result prop REACTIVELY. `<For each={chatEvents()}>` builds the\n // row while its result is still undefined, and a destructured `const res =\n // props.res` is bound once — so the row kept rendering \"running…\" forever when\n // the result arrived.\n //\n // `props.res` is now an ACCESSOR from the caller, not a value: `pairInfo()` re-runs on\n // every append, so passing `pairInfo().resFor.get(id)` inline re-evaluated the prop and\n // re-built this row's whole JSX tree — harmless for a label, fatal for a `<pre>` whose\n // scroll offset lives on the element. MEASURED: a scrolled bash-output block lost its\n // offset whenever an unrelated message arrived, with the row ELEMENT itself reused. An\n // accessor makes the row's tree a one-time build that reads a fresh value on demand.\n // narrow dependency: see the memo below\n /**\n * NARROW the dependency to THIS row's result.\n *\n * `props.res` reads `pairInfo()`, which returns a fresh `{resFor, consumed, orphanCalls}` object\n * on every append — so a row's `res()` \"changed\" whenever ANY event arrived, and every row's\n * `derived` memo re-ran. MEASURED on a 20-row timeline: 40 memo runs and 118 `HighlightedCode`\n * constructions for 20 rows, i.e. roughly twice the work per row plus a full rebuild of every\n * JSX subtree in the memo body (Solid runs the memo function BEFORE `equals` is consulted).\n *\n * This memo compares the RESULT's identity (`Ev.id`), so a row whose result did not change sees\n * no update at all — which is what `equals` was supposed to buy, applied one level earlier where\n * it also skips building the JSX.\n */\n const resEv = createMemo(() => props.res?.(), undefined, {\n equals: (a, b) => a?.id === b?.id,\n });\n /** every read below goes through the NARROW memo, never the raw prop */\n const res = () => resEv();\n\n // STALE-RUN GUARD: if the agent is no longer running, an unpaired tool_call\n // cannot still be in flight (its result event was missed — e.g. logged while\n // the tab was hidden). Rendering it forever as \"running…\" was exactly that:\n // switching sessions and back \"fixed\" it because that reloaded the log.\n //\n // this must be a FUNCTION, not a value. Computed once in the component\n // body it captured `props.agentActive` as it was when the row was BUILT — i.e.\n // `true`, because a row only exists because the agent was working — so the\n // guard could never fire. It was written to close exactly this bug and could\n // not, which is why the issue kept coming back.\n const staleDone = () => !props.agentActive && !res();\n const d = e.data ?? {};\n const name = String(d.name ?? \"tool\");\n const out = () => String(res()?.data?.result ?? \"\");\n\n const argStr = (k: string) => String(d.args?.[k] ?? \"\");\n // best-effort \"what was run\" text per tool: bash→the command, others→path/args\n const cmdText = () => {\n if (name === \"bash\") return argStr(\"command\");\n return argStr(\"path\") || JSON.stringify(d.args ?? {}, null, 1);\n };\n // effective timeout for live elapsed display — tools with defaults that the\n // model omitted (wait_children: 5 min) still show their real cap\n const effTimeout = () => {\n if (name === \"bash\") return Number(argStr(\"timeout_ms\")) || undefined;\n if (name === \"wait_children\") return Number(argStr(\"timeout_ms\")) || 300_000;\n return Number(argStr(\"timeout_ms\")) || undefined;\n };\n /**\n * A tool card's code surface: the SAME depth for arguments and output.\n *\n * ではどっちも一段深い\". The cause was two different renderers: the output went through\n * `codeBlock` (`.toolbody`, `--bg-darkest`) while the arguments were a bare `<div class=\"mono\">`\n * with no surface at all — so a generic tool showed the card colour for its input and the deeper\n * surface for its result, and `bash` happened to use the deeper one for both.\n *\n * Every code surface in a tool card now uses `.toolbody`, so input and output read as one block\n * with a consistent depth regardless of which tool the row is.\n */\n const codeBlock = (text: string, max = 1500, lang?: string) => (\n <HighlightedCode text={truncate(text, max)} lang={lang} />\n );\n /** the ARGUMENT block: same surface as the output, and JSON-highlighted when it is an object */\n const argsBlock = () => <HighlightedCode text={JSON.stringify(d.args ?? {}, null, 1)} lang=\"json\" />;\n /**\n * The tool's output, in FULL.\n *\n * Not truncated, and not folded either: a tool row is ALREADY a `<details>`, so the operator\n * opens the card deliberately — a second fold behind the first is another gate, and a character\n * budget discards what they just asked to see.\n *\n * Measured over 91,048 real tool results: median 293 chars, p90 2,364, p99 8,000, max 8,000 —\n * the server caps a result at 8,000, so \"show it all\" is bounded and cheap. `.toolbody` keeps its\n * own max-height with a scrollbar for the rare tall one.\n */\n const resultBlock = () =>\n (() => {\n const r = res();\n return r ? (\n <>\n {hasAnsi(out()) ? (\n <AnsiText text={out()} />\n ) : (\n <HighlightedCode text={formatToolOutput(out())} lang={outputLang(out())} />\n )}\n <div class=\"meta\">\n {fmtDur(r.data?.durationMs)}\n {/* #46: a killed shell said nothing here beyond a generic · FAILED, so\n a TIMED OUT command still read as an ordinary completed run. */}\n {name === \"bash\"\n ? outcomeMarker(shellOutcome(r.data?.ok, String(r.data?.result ?? \"\")))\n : r.data?.ok === false\n ? \" · FAILED\"\n : \"\"}\n {/* copy exactly what is SHOWN: the same JSON reformatting, so the clipboard and the card\n cannot disagree about the content */}\n <CopyBtn text={hasAnsi(out()) ? stripAnsi(out()) : formatToolOutput(out())} />\n </div>\n </>\n ) : (\n <div class=\"meta\">waiting for output…</div>\n );\n })();\n\n // this whole derivation depends on the result, so it must be a MEMO. It used to\n // run once in the component body, which is why a row created before its result\n // arrived kept the pre-result label and body for good: only the class (re-read\n // from the prop) changed. See the note on `res` above.\n /**\n * The per-tool summary AND its body, built once per RESULT.\n *\n * `body` is a JSX value, so every re-run of this memo builds a NEW element tree — and a\n * `<pre>` replaced that way loses its scroll offset even when the row element itself is\n * reused. MEASURED: a scrolled bash-output block reset whenever an unrelated message\n * arrived, with `ownerWasReused=true`.\n *\n * Two things were needed:\n *\n * 1. read `res()` through a local so the memo's dependencies are explicit;\n * 2. give `createMemo` an `equals` that compares the RESULT ID. Without it the memo's\n * return value is a fresh `{label, hint, body}` object every run, which never equals\n * the previous one, so Solid re-rendered the body on every `pairInfo()` recompute —\n * and `pairInfo()` recomputes on every append, because its `resFor` Map is new even\n * when the `Ev` inside it is the same object.\n *\n * With the `equals`, the only re-run left is a result that actually changed, which is\n * exactly when the body must be rebuilt.\n */\n const derived = createMemo(\n () => {\n const r = res();\n void r;\n // per-tool summary line: [label, hint]. There is no icon: the default was \"⚙️\" for\n // every tool and no case ever overrode it, so it identified nothing — the tool NAME\n // is already in the row's author slot, and a grouped row showed no ⚙️ at all, which is\n // the inconsistency this removes.\n let label = name;\n let hint: string | null = \"\";\n let body: any = argsBlock();\n try {\n switch (name) {\n case \"bash\": {\n const cmd = argStr(\"command\");\n const isBg = d.args?.background === true;\n // background jobs return INSTANTLY (the shell keeps running) — a plain\n // \"$ cmd · 12ms\" row read as \"finished immediately\" and the job was\n // forgotten. Give them their own identity + the job id for bash_output.\n const bgJob = isBg ? (String(out()).match(/job (bg\\d+)/)?.[1] ?? \"\") : \"\";\n label = (isBg ? \"⏳ \" : \"$ \") + oneLine(cmd, 96);\n const timeoutMs = argStr(\"timeout_ms\") ? Number(argStr(\"timeout_ms\")) : undefined;\n // a command the harness KILLED used to render as\n // `300ms · timeout 1s` — indistinguishable from a fast success, so the\n // row never read as finished. Name the outcome on the summary line.\n const r = res();\n const outcome = shellOutcome(r?.data?.ok, r ? String(r.data?.result ?? \"\") : \"\");\n hint = r\n ? isBg\n ? `background job${bgJob ? ` ${bgJob}` : \"\"}${timeoutMs ? ` · timeout ${Math.round(timeoutMs / 1000)}s` : \"\"}`\n : shellHint({ outcome, durationMs: r.data?.durationMs, timeoutMs, fmtDur })\n : null; // live elapsed renders in the summary (below)\n body = (\n <>\n {isBg ? (\n <div class=\"meta bgjob-note\">\n runs in background — poll with <b>bash_output(job_id="{bgJob || \"?\"}")</b>\n {bgJob ? <> · kill with <b>action=\"kill\"</b></> : null}\n </div>\n ) : null}\n {/**\n * The command, in FULL, with shell highlighting — it is the one tool input where the\n * syntax carries meaning (quoting, pipes, flags), not just data.\n *\n * `codeBlock(cmd, 800, …)` cut it at 800 characters, so a heredoc or a long pipeline\n * showed its first few lines and a `…`. The card is already a `<details>` the operator\n * opened deliberately, and the same mistake in the RESULT block was fixed by rendering\n * it whole — the arguments deserve the same answer.\n */}\n {cmd !== label.slice(isBg ? 2 : 2) ? (\n <HighlightedCode text={cmd} lang=\"shellscript\" />\n ) : null}\n {resultBlock()}\n </>\n );\n break;\n }\n case \"read_file\": {\n label = argStr(\"path\") || \"(no path)\";\n const bits: string[] = [];\n if (argStr(\"pattern\")) bits.push(`grep /${oneLine(argStr(\"pattern\"), 40)}/`);\n if (Number(d.args?.offset) < 0) bits.push(`last ${-Number(d.args.offset)} lines`);\n else if (d.args?.offset) bits.push(`from L${d.args.offset}`);\n if (d.args?.limit) bits.push(`≤${d.args.limit} lines`);\n hint = bits.join(\" · \");\n body = resultBlock();\n break;\n }\n case \"write_file\": {\n const content = String(d.args?.content ?? \"\");\n label = argStr(\"path\") || \"(no path)\";\n hint = `${fmtK(content.length)} bytes`;\n // content was rendered UNTRUNCATED — a few big write_file calls (the\n // 100KB+ ones real sessions accumulate) made those chats take seconds\n // to open and chew CPU on every prepend while scrolling back\n body = (\n <>\n {codeBlock(content, 1500)}\n {content.length > 1500 ? <div class=\"meta muted\">{fmtK(content.length)} bytes — open it from 🗂 files for the full view</div> : null}\n {res() ? <div class=\"meta\">{oneLine(out(), 160)}</div> : <div class=\"meta\">writing…</div>}\n </>\n );\n break;\n }\n case \"edit_file\": {\n label = argStr(\"path\") || \"(no path)\";\n hint = d.args?.replace_all === true ? \"replace all\" : \"unique spot\";\n body = (\n <>\n <pre class=\"mono toolbody del\">{truncate(\"- \" + argStr(\"old_text\"), 900)}</pre>\n <pre class=\"mono toolbody add\">{\"+ \" + truncate(argStr(\"new_text\"), 900)}</pre>\n {res() ? (\n <div class=\"meta\">\n {oneLine(out(), 120)} · {fmtDur(res()!.data?.durationMs)}\n </div>\n ) : (\n <div class=\"meta\">applying…</div>\n )}\n </>\n );\n break;\n }\n case \"apply_patch\": {\n const patchLines = argStr(\"patch\").split(\"\\n\").filter((l) => l && !/^---$/.test(l.trim()));\n const files = patchLines\n .map((l) => l.match(/^\\*\\*\\* (?:Add|Update|Delete) File: (.+)$/)?.[1])\n .filter(Boolean) as string[];\n label = files.length ? `${files.length} file${files.length > 1 ? \"s\" : \"\"}: ${oneLine(files.join(\", \"), 80)}` : \"patch\";\n // huge patches rendered one <div> PER LINE with no cap — multi-thousand-\n // line patches froze the feed. Show the head; the rest is noise here.\n const MAX_PATCH_LINES = 60;\n const shown = patchLines.slice(0, MAX_PATCH_LINES);\n body = (\n <>\n <pre class=\"mono toolbody patch\">\n {shown.map((l) => {\n const cls = l.startsWith(\"+\") ? \" add\" : l.startsWith(\"-\") ? \" del\" : /^\\*\\*\\*|^@@/.test(l) ? \" meta\" : \"\";\n return <div class={\"pline\" + cls}>{l.length > 240 ? l.slice(0, 240) + \"…\" : l}</div>;\n })}\n {patchLines.length > MAX_PATCH_LINES ? <div class=\"pline meta\">… {patchLines.length - MAX_PATCH_LINES} more lines</div> : null}\n </pre>\n {res() ? <div class=\"meta\">{oneLine(out().split(\"\\n\")[0] ?? \"\", 140)}{res()!.data?.ok === false ? \" · FAILED\" : \"\"}</div> : <div class=\"meta\">validating…</div>}\n </>\n );\n break;\n }\n case \"list_dir\": {\n label = argStr(\"path\") || \".\";\n body = resultBlock();\n break;\n }\n case \"read_url\": {\n let host = argStr(\"url\");\n try { const u = new URL(host); host = u.host + u.pathname; } catch { /* keep raw */ }\n label = oneLine(host, 70);\n hint = \"web\";\n body = (\n <>\n <div class=\"meta\">\n <Show\n when={/^https?:/i.test(argStr(\"url\"))}\n fallback={<span class=\"muted\">{oneLine(argStr(\"url\"), 80)}</span>}\n >\n <a href={argStr(\"url\")} target=\"_blank\" rel=\"noopener noreferrer\" referrerPolicy=\"no-referrer\">open ↗</a>\n </Show>\n </div>\n {resultBlock()}\n </>\n );\n break;\n }\n case \"bash_output\": {\n // reading vs killing reads differently at a glance\n const action = argStr(\"action\") || \"read\";\n const jobId = argStr(\"job_id\") || \"(?)\";\n label = `bash_output ${jobId}`;\n hint = action;\n body = resultBlock();\n break;\n }\n case \"load_skill\": {\n label = `skill: ${argStr(\"name\")}`;\n const mdBody = out().replace(/^---\\r?\\n[\\s\\S]*?\\r?\\n---\\r?\\n?/, \"\"); // strip frontmatter\n body = res() ? (\n <>\n <div class=\"content\" innerHTML={renderMarkdown(mdBody)} />\n <div class=\"meta\">{fmtDur(res()!.data?.durationMs)}</div>\n </>\n ) : (\n <div class=\"meta\">loading…</div>\n );\n break;\n }\n case \"save_skill\": {\n label = `skill: ${argStr(\"name\")}`;\n hint = oneLine(argStr(\"description\"), 60);\n const files = Array.isArray(d.args?.files) ? d.args.files.map((f: any) => f?.name).filter(Boolean) : [];\n body = (\n <>\n {files.length ? <div class=\"meta\">bundled: {files.join(\", \")}</div> : null}\n {res() ? <div class=\"meta\">{oneLine(out(), 160)} · {fmtDur(res()!.data?.durationMs)}</div> : <div class=\"meta\">saving…</div>}\n </>\n);\n break;\n }\n default: {\n /**\n * EVERY other tool: show the arguments AND the result.\n *\n * There was no `default:` branch, so any tool without an explicit case — every MCP\n * tool, `wait_children`, `read_memory`, the meta tools, `web` — kept the initial `body`,\n * which is the JSON of its INPUT. Reported as \"bashやfile系以外のツールは入力パラメータは\n * 表示されるのに出力がタイムラインに表示されない\". The output was in the log and paired\n * correctly; it simply had no case that rendered it.\n *\n * The generic view is the right fallback in shape (the input is often what you want to\n * see first), but it must not be the WHOLE view: for a tool whose effect is its return\n * value — `read_memory`, an MCP lookup, `wait_children` — showing only the arguments\n * tells the operator nothing about what happened.\n */\n label = name;\n // the duration is the only summary fact a generic tool has; the outcome is in the body\n hint = res() ? fmtDur(res()!.data?.durationMs) : null;\n body = (\n <>\n {argsBlock()}\n {resultBlock()}\n </>\n );\n break;\n }\n }\n } catch {\n /* fall back to the generic view on anything unexpected */\n }\n // `key` is what the memo's `equals` compares: the RESULT's identity plus the label. Two\n // runs that would build the same body must produce the same key, or the `<pre>` inside is\n // discarded and its scroll offset with it.\n return { label, hint, body, key: `${res()?.id ?? \"none\"}|${label}|${hint ?? \"\"}` };\n },\n undefined,\n {\n // compare the RESULT the memo was built from, not the returned object (which is always\n // a fresh `{label, hint, body}` and would therefore never compare equal)\n equals: (a, b) => (a as { key?: string }).key === (b as { key?: string }).key,\n },\n );\n\n return (\n <details\n class={\"embed\" + (grouped ? \" grouped\" : \"\") + (res() ? (res()!.data?.ok === false ? \" fail\" : \" done\") : staleDone() ? \" done\" : \" running\")}\n title={`${name}${derived().hint ? \" — \" + derived().hint : \"\"}`}\n onToggle={(ev: ToggleEvent) => {\n // expanding/collapsing changes the feed height; while following, the\n // bottom line must stay pinned instead of drifting out of view\n if ((ev.target as HTMLDetailsElement).open) props.onResize?.();\n }}\n >\n <summary>\n {/* A GROUPED row keeps its command (you still need to know what ran) but drops\n the repeated marker, so a run of commands reads as one block instead of N\n unrelated ones. The label already carries its own marker (\"$ \", \"⏳ \"). */}\n <b>{derived().label}</b>\n <Show when={e.data?.actor}>\n <span class=\"actor\">@{String(e.data.actor)}</span>\n </Show>\n <span class=\"meta\">\n {res()\n ? derived().hint || \"\"\n : staleDone()\n ? \"(result missed)\"\n : name === \"bash\" || effTimeout()\n ? // any tool with a timeout shows live elapsed + its cap\n <BashElapsed startedAt={e.ts} inline timeoutMs={effTimeout()} /> // visible while folded\n : \"running…\"}\n </span>\n {/* dedicated copy buttons: the generic header \"copy\" copied \"\" on tool\n rows (rawOf only knows prompts/messages) — now the command that ran\n and its output each have their own button */}\n <span class=\"toolcopy\">\n <CopyBtn text={cmdText()} label=\"⧉ cmd\" title={`copy the ${name} arguments`} />\n <Show when={res()}>\n <CopyBtn\n text={hasAnsi(out()) ? stripAnsi(out()) : out()}\n label=\"⧉ out\"\n title=\"copy this tool's full output (escapes removed)\"\n />\n </Show>\n </span>\n </summary>\n {derived().body}\n </details>\n );\n}\n\nexport function MessageRow(props: { e: Ev; prev?: () => Ev | undefined; next?: () => Ev | undefined; res?: () => Ev | undefined; orphan?: boolean; showBranch?: boolean; onEdit?: () => void; onCancel?: () => void; onOption?: (text: string) => void; answeredIds?: () => Set<string>; onAnswered?: (callId: string) => void; agentActive?: boolean; onResize?: () => void }) {\n const e = props.e;\n const a = authorOf(e);\n // Grouping is `groupedWith()` from ./row-grouping — extracted so the rule can\n // be tested against the code that runs. It used to live inline here,\n // and the tests re-implemented it, which is why deleting the real #49 fix left\n // them all green.\n const grouped = () => groupedWith(props.prev?.() as RowLike | undefined, e as RowLike);\n /**\n * Whether the row BELOW continues this run — computed here rather than in CSS.\n *\n * The spacing around a run needs three facts: is this a continuation (`grouped`), does a\n * continuation follow, and does one follow THIS row. `:has(+ .msg.grouped)` could answer\n * the last two, but it makes the style engine run a sibling-matching pass for EVERY row on\n * every style recalc — and this feed renders ~1,100 rows on open. The component\n * already knows the next event, so the answer is free here and the selector disappears.\n */\n const nextGrouped = () => {\n const n = props.next?.();\n return !!n && groupedWith(e as RowLike, n as RowLike);\n };\n\n // non-chat-looking events become divider lines\n if (e.type === \"fork\") {\n const d = e.data ?? {};\n return (\n <div class=\"divider-msg\">\n ⑂ forked from {String(d.fromBranch ?? \"?\")} → {String(d.newBranch ?? e.branch)}\n </div>\n );\n }\n if (e.type === \"goal\") {\n // the finish→audit→continue lifecycle used to render as bare labels\n // with an EMPTY body (\"🎯 goal audit:\"), hiding the verification contract\n // and the verdict. Every branch now carries a real detail, and \"done\" is\n // labelled as PENDING audit because it is logged before the audit runs.\n //\n // the label and this card were children of `.divider-msg`, which is\n // `display:flex` with ::before/::after filling the slack — so the card was\n // a FLEX SIBLING of the label and everything shared one row, with the\n // card's left edge wherever the flex layout put it. `.goalline` stacks them\n // instead: label on its own line, card beneath, both aligned to the same\n // left edge as every other card in the feed.\n const line = goalLine(e.data ?? {});\n return (\n <div class={\"goalline \" + (line.tone === \"err\" ? \"err\" : line.tone === \"warn\" ? \"warn\" : \"\")}>\n <div class=\"goalline-label\">{line.label}</div>\n {/* an empty detail means \"nothing real to show\" — the label stands\n alone rather than getting a placeholder card. `hasCard` is\n the explicit flag, so this is never a guess from an empty string. */}\n <Show when={line.hasCard}>\n <Card\n tone={line.tone === \"ok\" ? \"ok\" : line.tone === \"warn\" ? \"warn\" : \"tool\"}\n markdown={line.markdown}\n body={line.detail}\n />\n </Show>\n </div>\n );\n }\n /**\n * One step of the completion audit.\n *\n * The auditor runs in its own conversation, so without these rows the timeline showed\n * `audit-started` and then only the verdict — an audit that produced NO verdict was\n * indistinguishable from one that never ran (measured: three silent audits, then an abandonment\n * that read like a provider fault). These are the auditor's own steps, attributed to it.\n */\n if (e.type === \"audit_step\") {\n const st = String(e.data?.step ?? \"\");\n const name = String(e.data?.name ?? \"\");\n const label =\n st === \"started\"\n ? \"🔍️ auditor started\"\n : st === \"tool\"\n ? `🔍️ auditor → ${name}`\n : st === \"tool_done\"\n ? `🔍️ auditor ← ${name} ${e.data?.ok === false ? \"failed\" : `${String(e.data?.chars ?? 0)} chars`}`\n : st === \"reply\"\n ? \"🔍️ auditor replied\"\n : \"🔍️ auditor\";\n return (\n <details class=\"embed auditstep\">\n <summary>\n <span class=\"meta\">{label}</span>\n <Show when={st === \"tool\" && e.data?.args}>\n <span class=\"meta muted\">{truncate(String(e.data?.args ?? \"\"), 120)}</span>\n </Show>\n </summary>\n <Show when={st === \"reply\" && e.data?.text}>\n <pre class=\"mono toolbody\">{String(e.data?.text ?? \"\")}</pre>\n </Show>\n <Show when={st === \"tool\" && e.data?.args}>\n <pre class=\"mono toolbody\">{String(e.data?.args ?? \"\")}</pre>\n </Show>\n </details>\n );\n }\n if (e.type === \"todo\") {\n return <div class=\"divider-msg\">✅ tasks updated ({String(e.data?.by ?? \"human\")})</div>;\n }\n if (e.type === \"state\") {\n if (e.data.from === e.data.to) return null;\n return (\n <div class={\"divider-msg\" + (e.data.to === \"error\" ? \" err\" : \"\")}>\n {e.data.from} → {e.data.to}{e.data.reason ? ` — ${e.data.reason}` : \"\"}\n </div>\n );\n }\n // system_note MUST resolve here (before the .msg wrapper): the wrapper\n // always renders an avatar + empty body, so notes handled only inside\n // SwitchContent appeared as mysterious EMPTY rows on the timeline.\n // Most notes are log-only; these few earn a visible divider/embed row.\n if (e.type === \"system_note\") {\n const ev = String(e.data?.event ?? \"\");\n if (ev === \"runaway-detected\") {\n return (\n <div class=\"embed fail\" title={`${e.data?.failures} consecutive tool failures hit the configured limit (${e.data?.limit})`}>\n <div class=\"mono\">🛑 runaway: {String(e.data?.failures)} tool failures in a row (limit {String(e.data?.limit)})</div>\n <div class=\"meta\">last: {String(e.data?.lastTool)} — {String(e.data?.lastError ?? \"\").slice(0, 200)}</div>\n </div>\n );\n }\n if (ev === \"error-retry\") {\n return (\n <div class=\"embed warn-embed\" title=\"a round-fatal API error occurred; auto-retry is waiting, then a fresh round starts (onError: retry)\">\n <div class=\"mono\">↻ API error — retrying (attempt {String(e.data?.attempt)}) in {Math.round(Number(e.data?.waitMs) / 1000)}s…</div>\n </div>\n );\n }\n if (ev === \"background-exit\") {\n const failed = e.data?.failed === true;\n const secs = Math.round(Number(e.data?.durationMs ?? 0) / 1000);\n return (\n <div class={\"divider-msg\" + (failed ? \" err\" : \"\")} title={String(e.data?.cmd ?? \"\")}>\n {(failed ? \"⚠ background job \" : \"✓ background job \") +\n String(e.data?.jobId ?? \"?\") + \" \" +\n (failed ? `FAILED (exit ${String(e.data?.code ?? \"?\")})` : `finished (${secs}s)`)}\n </div>\n );\n }\n if (ev === \"context-compacted\") {\n return (\n <div class=\"divider-msg\">\n 🗜 compacted: {String(e.data?.tokensBefore ?? \"?\")} → {String(e.data?.tokensAfter ?? \"?\")} tok ({String(e.data?.mode ?? \"\")})\n </div>\n );\n }\n // the START of the pass, logged before the (slow) summarizer runs so\n // the timeline shows the conversation being rewritten rather than going\n // quiet for the whole summarize. The completion divider above carries the\n // after-figures; this one only claims what was already known.\n if (ev === \"context-compaction-started\") {\n return (\n <div class=\"divider-msg\" title=\"compaction is rewriting older history — the agent is not stuck\">\n 🗜 compacting: summarizing {String(e.data?.messages ?? \"?\")} earlier messages from{\" \"}\n {String(e.data?.tokensBefore ?? \"?\")} tok ({String(e.data?.reason ?? \"auto\")})…\n </div>\n );\n }\n return null; // log-only notes (prompt-delivered, llm-retry, …)\n }\n\n return (\n <div\n class={\n \"msg\" +\n (grouped() ? \" grouped\" : \"\") +\n // the row BELOW continues this run — replaces a `:has(+ .msg.grouped)` selector,\n // which made every row pay for a sibling match on every recalc\n (nextGrouped() ? \" next-grouped\" : \"\") +\n (e.data?.pending ? \" pending\" : \"\") +\n (e.data?.cancelled ? \" withdrawn\" : \"\")\n }\n data-eid={e.id}\n >\n {/* grouped rows keep the same geometry as the row that started the\n run — same avatar slot, but EMPTY (no faded ghost icon): a column of\n faint 🧩s read as separate \"sub messages\" instead of continuation\n lines. Hover still shows time+branch via the title. */}\n {/**\n * The author's colour is a CLASS now, not a custom property.\n *\n * `style={{ \"--author\": colour }}` was still an inline style on an element created once per\n * row (~1,100 per session) — the exact cost this file's other rules exist to avoid. The\n * palette is a fixed set, so `toneOf()` maps it to one of five classes.\n */}\n <div\n class={`avatar avghost tone-${toneOf(a.color)}` + (grouped() ? \" ghosted\" : \"\")}\n title={grouped() ? `${fmtTs(e.ts)} · ${e.branch}` : undefined}\n >\n {grouped() ? \"\" : a.icon}\n </div>\n <div class=\"msg-body\">\n {grouped() && <span class=\"grouptime\" title={`${fmtTs(e.ts)} · ${e.branch}`} />}\n <Show when={!grouped()}>\n <div class=\"msg-head\">\n <span class={`author tone-${toneOf(a.color)}`}>{a.name}</span>\n <Show when={e.data?.actor}>\n <span class=\"actor\">@{String(e.data.actor)}</span>\n </Show>\n <span class=\"ts\">{e.data?.pending ? \"queued…\" : e.data?.cancelled ? \"withdrawn\" : fmtTs(e.ts)}</span>\n {/* #32 (clutter): the branch label is constant for a whole session and\n was repeated on EVERY row — MEASURED, all 14940 events of this\n session carry `br0`, so ~1500 rendered rows said \"br0\" for no\n information. Show it only when the session actually HAS more than\n one branch (a fork), which is the only time it distinguishes\n anything. It stays in the row title, and in the branch picker. */}\n <Show when={props.showBranch}>\n <span class=\"ts\">{e.branch}</span>\n </Show>\n <Show when={props.onCancel}>\n <button\n class=\"editbtn\"\n title=\"withdraw this message — it has not reached the model yet; the text goes back to the input box\"\n onclick={(ev: MouseEvent) => { ev.stopPropagation(); props.onCancel!(); }}\n >✕ cancel</button>\n </Show>\n {/* tool rows have no copyable message body — their command/output\n buttons live inside ToolRow; rendering the header button anyway\n produced a \"copy\" that silently copied the empty string */}\n <Show when={e.type !== \"tool_call\"}>\n <CopyBtn text={rawOf(e)} label=\"⧉ copy\" title=\"copy the RAW text of this message (no markdown rendering)\" />\n </Show>\n <Show when={props.onEdit}>\n <button\n class=\"editbtn\"\n title=\"edit this prompt — forks the conversation here (later events are dropped or summarized)\"\n onclick={(ev: MouseEvent) => { ev.stopPropagation(); props.onEdit!(); }}\n >✎ edit</button>\n </Show>\n </div>\n </Show>\n\n <SwitchContent e={e} prev={props.prev?.()} res={props.res} orphan={props.orphan} onOption={props.onOption} answeredIds={props.answeredIds} onAnswered={props.onAnswered} agentActive={props.agentActive} onResize={props.onResize} />\n </div>\n </div>\n );\n}\n\nexport function SwitchContent(props: { e: Ev; prev?: Ev; res?: () => Ev | undefined; orphan?: boolean; onOption?: (text: string) => void; answeredIds?: () => Set<string>; onAnswered?: (callId: string) => void; agentActive?: boolean; onResize?: () => void }) {\n const e = props.e;\n switch (e.type) {\n case \"prompt\": {\n // image attachments render as thumbnails under the text (logged events\n // carry data.images; optimistic echoes carry data.pending images array)\n const imgs: string[] = e.data?.images ?? [];\n return (\n <>\n <div class=\"content\" innerHTML={renderMarkdownCached(String(e.data.text ?? \"\"))} />\n <Show when={imgs.length}>\n <div class=\"promptimgs\">\n <For each={imgs}>{(src) => <img src={src} class=\"promptimg\" alt=\"attachment\" />}</For>\n </div>\n </Show>\n </>\n );\n }\n case \"message\":\n return (\n <>\n <Show when={typeof e.data.reasoning === \"string\" && e.data.reasoning.trim()}>\n <details class=\"reasoning\">\n {/**\n * In FULL. Truncating bought nothing: the block is inside a `<details>` that starts\n * closed, and when opened it scrolls — so the text was already gated twice, and\n * cutting it only removed the part the operator opened it to read. Reported as\n * \"長いreasoningをturncatedするのをやめる、隠れててスクロールも効くので切り取る意味がない\".\n */}\n <summary>💭 thinking</summary>\n <div class=\"mono\">{String(e.data.reasoning)}</div>\n </details>\n </Show>\n <div class=\"content\" innerHTML={renderMarkdownCached(String(e.data.content ?? \"\"))} />\n <Show when={e.data.interrupted}>\n <div class=\"interrupted\">⚠ interrupted — partial output kept</div>\n </Show>\n <Show when={e.data.final}>\n <div class=\"msgfoot\"><CopyBtn text={String(e.data.content ?? \"\")} /><span>copy summary</span></div>\n </Show>\n </>\n );\n case \"tool_call\":\n // `prev` must be FORWARDED (grouping #75): without it ToolRow cannot know it\n // continues the previous actor's run, which is what made every consecutive\n // bash row render its own icon + label.\n return <ToolRow e={e} prev={props.prev} res={props.res} orphan={props.orphan} agentActive={props.agentActive} onResize={props.onResize} />;\n case \"tool_result\": {\n // a result whose call is no longer in the events window. It used to\n // render as a bare output blob with no tool name and no command, which\n // read as \"the run never finished\". Render the SAME completed tool row a\n // paired result gets, from the result's own metadata, so it is\n // indistinguishable from one that survived in the window.\n const out = String(e.data.result ?? \"\");\n const name = String(e.data.name ?? \"tool\");\n const ok = e.data.ok !== false;\n return (\n <details class={\"embed \" + (ok ? \"\" : \"fail\")} open={props.orphan}>\n <summary>\n <span class=\"meta\">\n {/* the call is gone, so the command is too — show the tool and\n the outcome rather than inventing an argument that was never\n logged here */}\n {name === \"bash\" ? `$ (bash, call evicted)` : name}\n </span>\n <CopyBtn text={out} />\n </summary>\n {/* In FULL, like a paired result: the operator opened the card to read it, and this\n path used to cut at 4000 chars — so an evicted call showed a truncated output while a\n surviving one showed everything, from what looked like the same row. */}\n <div class=\"mono\">{out}</div>\n <div class=\"meta\">\n {fmtDur(e.data.durationMs)}\n {name === \"bash\"\n ? outcomeMarker(shellOutcome(e.data.ok, out))\n : ok\n ? \"\"\n : \" · FAILED\"}\n </div>\n <Show when={props.orphan}>\n <div class=\"meta\">its call is no longer in the loaded events — the run itself finished</div>\n </Show>\n </details>\n );\n }\n case \"decision\": {\n const alts = Array.isArray(e.data?.alternatives) ? (e.data.alternatives as string[]) : [];\n return (\n <details class=\"embed decision\">\n <summary>\n <b>📌 <span class=\"content inline-md\" innerHTML={renderMarkdownCached(String(e.data?.decision ?? \"\"))} /></b>\n <span class=\"meta\">decision logged</span>\n </summary>\n {/* model-written markdown, same as progress bodies */}\n <div class=\"content\" innerHTML={renderMarkdownCached(String(e.data?.rationale ?? \"\"))} />\n <Show when={alts.length}>\n <div class=\"content muted\">Rejected: {alts.join(\" / \")}</div>\n </Show>\n </details>\n );\n }\n case \"question\": {\n const opts = Array.isArray(e.data?.options) ? (e.data.options as string[]) : [];\n // a question is ANSWERED once its tool_result exists in the log (ask_user\n // parks the loop; the reply lands as a user prompt and the tool_result\n // closes the call). Answered questions keep their options visible but\n // disabled — tapping them twice used to send duplicate prompts.\n const callId = e.data?.callId ? String(e.data.callId) : \"\";\n // called inside the row, so it tracks the signal reactively\n const answered = () => props.answeredIds?.().has(callId) ?? false;\n return (\n <div class={\"embed question\" + (answered() ? \" answered\" : \"\")}>\n {/* questions are model-written and often carry markdown (code refs,\n lists) — render them like progress embeds instead of dumping raw */}\n <div>❓️ <div class=\"content inline-md\" innerHTML={renderMarkdownCached(String(e.data?.question ?? \"\"))} /></div>\n <Show when={answered()}>\n <div class=\"meta answerdone\">✓ answered — continuing below</div>\n </Show>\n <Show when={opts.length > 0}>\n <div class=\"qopts\">\n <For each={opts}>\n {(o) => (\n <button\n class=\"qopt\"\n disabled={answered()}\n onclick={() => {\n // mark it answered NOW, before the POST. The derived\n // set only catches up when the prompt event is logged, and\n // until then the buttons stayed live — so a second click\n // sent a duplicate prompt.\n props.onAnswered?.(callId);\n const actor = e.data?.actor;\n if (actor) {\n void api(`/api/agents/${encodeURIComponent(String(actor))}/prompt`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ text: o, start: true }),\n }).then(() => flashHint(`→ answered @${String(e.data.actor)}`)).catch(() => flashHint(\"answer failed\"));\n } else {\n props.onOption?.(o);\n }\n }}\n >{o}</button>\n )}\n </For>\n </div>\n </Show>\n <FreeTextAnswer answered={answered()} onOption={props.onOption} />\n </div>\n );\n }\n case \"progress\":\n return (\n <div class=\"embed progembed\">\n {/* progress bodies are model-written markdown — render them, don't\n dump raw text (structured fields keep their labels) */}\n <div>📈 <div class=\"content inline-md\" innerHTML={renderMarkdownCached(String(e.data.doing ?? \"\"))} /></div>\n <Show when={e.data.goalStatus}><div class=\"progrow\"><b>goal</b><span>{String(e.data.goalStatus)}</span></div></Show>\n <Show when={e.data.recent}><div class=\"progrow\"><b>recent</b><span class=\"content inline-md\" innerHTML={renderMarkdownCached(String(e.data.recent))} /></div></Show>\n <Show when={e.data.problems}><div class=\"progrow warn\"><b>⚠ problems</b><span class=\"content inline-md\" innerHTML={renderMarkdownCached(String(e.data.problems))} /></div></Show>\n <Show when={e.data.next}><div class=\"progrow\"><b>next</b><span class=\"content inline-md\" innerHTML={renderMarkdownCached(String(e.data.next))} /></div></Show>\n </div>\n );\n case \"error\":\n return <div class=\"embed fail\"><div class=\"mono\">⚠ {String(e.data.message ?? \"\")}</div></div>;\n case \"compaction\":\n /**\n * Only a `<details>` when there is something to expand.\n *\n * A summary-pass FAILURE still logs a compaction event with no `summary`, and the disclosure\n * triangle then expanded to nothing — reported as \"compactionのカードの中身が空なのにクリックで\n * 展開できるせいでちょっとだけ広がる\". The row is a plain embed in that case, so there is no\n * affordance that promises content it does not have.\n */\n if (!e.data.summary)\n return (\n <div class=\"embed compaction\">\n <b>🗜 context compacted</b>\n <span class=\"meta\">\n {String(e.data.mode ?? \"\")} · {fmtK(Number(e.data.tokensBefore ?? 0))} → {fmtK(Number(e.data.tokensAfter ?? 0))} tok\n {\" · \"}{e.data.summarized ? `${e.data.summarized} summarized` : `${e.data.dropped} dropped`}\n {String(e.data.mode ?? \"\") === \"truncate\" ? \" · older history dropped\" : \"\"}\n </span>\n <Show when={String(e.data.mode ?? \"\") === \"truncate\"}>\n <div class=\"muted compactnote\">\n the summary pass produced nothing, so the oldest messages were dropped instead — the\n session continues with the recent tail intact\n </div>\n </Show>\n </div>\n );\n return (\n <details class=\"embed compaction\">\n <summary>\n <b>🗜 context compacted</b>\n <span class=\"meta\">\n {String(e.data.mode ?? \"\")} · {fmtK(Number(e.data.tokensBefore ?? 0))} → {fmtK(Number(e.data.tokensAfter ?? 0))} tok\n {\" · \"}{e.data.summarized ? `${e.data.summarized} summarized` : `${e.data.dropped} dropped`}\n </span>\n </summary>\n <Show when={e.data.summary}>\n <div class=\"vtitle compactkept\">what the agent kept</div>\n <div class=\"content\" innerHTML={renderMarkdownCached(String(e.data.summary))} />\n </Show>\n </details>\n );\n default:\n return <div class=\"content muted\">{truncate(JSON.stringify(e.data), 200)}</div>;\n }\n}\n","export type ProviderPreset = {\n key: string;\n label: string;\n url: string;\n /** pre-filled model suggestion — empty means \"keep what's typed\" */\n model: string;\n hint?: string;\n};\n\nexport const PROVIDER_PRESETS: ProviderPreset[] = [\n {\n key: \"openrouter\",\n label: \"OpenRouter\",\n url: \"https://openrouter.ai/api/v1\",\n model: \"\",\n hint: \"400+ models behind one key — teapot sends app-attribution headers automatically\",\n },\n {\n key: \"orcarouter\",\n label: \"OrcaRouter\",\n url: \"https://api.orcarouter.ai/v1\",\n model: \"\",\n hint: \"zero-markup routing gateway — 'orcarouter/auto' grades each prompt and picks the model\",\n },\n {\n key: \"openai\",\n label: \"OpenAI\",\n url: \"https://api.openai.com/v1\",\n model: \"\",\n hint: \"your account's models — pick from the list once the endpoint answers\",\n },\n {\n key: \"opencode-go\",\n label: \"OpenCode Go\",\n url: \"https://opencode.ai/zen/go/v1\",\n model: \"\",\n hint: \"OpenCode's open-model subscription — teapot sends the required x-opencode-session header; choose a chat/completions model\",\n },\n {\n key: \"llamacpp\",\n label: \"llama.cpp server\",\n url: \"http://localhost:8080/v1\",\n model: \"\",\n hint: \"free & local — start it with: llama-server -m ./model.gguf (any model name works)\",\n },\n];\n","/**\n * Which appearance slot a theme selection belongs in.\n *\n * #theme-slots: under \"follow the system\" the painter reads `sysDarkTheme()`/`sysLightTheme()`, so\n * anything that wrote the FIXED slot (`teapot.theme`) changed a value nothing read. The visible\n * symptom was a theme that highlighted but did not paint, reported as \"follow the system を入れてる\n * ときにテーマ複製したりするとやっぱりちょっと変な挙動になる\" — and because the control responded,\n * it read as a logic error rather than as a no-op.\n *\n * Pure and dependency-free so it is unit-testable under `node --test`; `App.tsx` has three call\n * sites (a card click, the editor's select, and \"duplicate current\") and all three must agree.\n */\n\nexport type AppearanceMode = \"dark\" | \"light\";\n\nexport interface SlotTarget {\n /** which store to write */\n slot: \"fixed\" | \"dark\" | \"light\";\n /** the localStorage key that belongs to that store */\n key: string;\n}\n\n/**\n * The slot a theme of `mode` goes into.\n *\n * Following the system there are two slots and a selection fills the one for ITS OWN appearance:\n * picking a dark theme populates the dark slot whether or not the OS is currently dark, which is\n * what makes \"choose a theme for the other appearance\" possible at all. Not following it there is\n * one slot, and it is the fixed one.\n */\nexport function slotForSelection(auto: boolean, mode: AppearanceMode): SlotTarget {\n if (!auto) return { slot: \"fixed\", key: \"teapot.theme\" };\n return mode === \"dark\"\n ? { slot: \"dark\", key: \"teapot.theme.dark\" }\n : { slot: \"light\", key: \"teapot.theme.light\" };\n}\n\n/**\n * Which theme id is PAINTED — the one whose card must read as selected.\n *\n * The card grid used to key its `on` class off the fixed slot, so under \"follow the system\" it\n * marked a theme that was not on screen and left the real one unmarked. That is the second half of\n * the same complaint: the panel said one thing and the picture said another.\n */\nexport function paintedIdFor(state: {\n auto: boolean;\n fixed: string;\n dark: string;\n light: string;\n prefersLight: boolean;\n}): string {\n if (!state.auto) return state.fixed;\n return state.prefersLight ? state.light : state.dark;\n}\n","import { For, Index, Show, createEffect, createMemo, createSignal, onMount } from \"solid-js\";\nimport { IconBtn, Modal } from \"./chrome\";\nimport { CodePreview, NumberField, ThemePreview, TodoEditor } from \"./settings-parts\";\nimport { api } from \"../lib/api\";\nimport { bgSrc, bgSrcSet } from \"../lib/bg-srcset\";\nimport { flashHint } from \"../lib/flash\";\nimport { relTime } from \"../lib/format\";\nimport { renderMarkdownCached } from \"../lib/markdown\";\nimport { PROVIDER_PRESETS } from \"../lib/provider-presets\";\nimport { paintedIdFor, slotForSelection } from \"../lib/theme-slots\";\nimport {\n DEFAULT_PALETTE,\n PALETTE_KEYS,\n PRESET_PALETTES,\n applyCustomTheme,\n newThemeId,\n normalizeColour,\n opaque,\n sanitizeTheme,\n saveCustomThemes,\n type CustomTheme,\n type ThemePalette,\n} from \"../lib/theme-store\";\nimport { THEMES } from \"../lib/themes-presets\";\n\ndeclare const __APP_VERSION__: string;\n\n\nexport function ThemeEditor(props: {\n /**\n * An ACCESSOR, not the array.\n *\n * Passing `props.themes={customThemes()}` hands the editor a snapshot of the list as it was\n * when the component was created, so every later change was invisible to it — pressing\n * \"+ duplicate current\" persisted a theme to localStorage and the editor still rendered\n * \"no custom themes yet\". That is the same freeze AGENTS.md describes for destructured props\n * (\"same for destructuring a getter's RESULT: pass the accessor down\"), and it only showed up\n * in the browser: the persistence worked, so nothing failed loudly.\n */\n themes: () => CustomTheme[];\n activeId: string;\n /**\n * The id of the theme ACTUALLY PAINTED right now — which is not `activeId` under \"follow the\n * system\".\n *\n * `activeId` is the FIXED choice (what the picker shows); with auto mode the document is painted\n * with `sysDarkTheme()`/`sysLightTheme()` instead. Duplicating from `activeId` therefore copied\n * the LIVE COLOURS (read from the document) while labelling the copy after the SELECTED theme —\n * so with \"follow the system\" the copy had the painted palette and the wrong name. Reported as\n * \"「follow the system」のときに選択中のテーマじゃなくて、実際に当たっているテーマの色が複製されて、\n * でも名前は選択中のテーマが使用される\".\n *\n * A separate prop rather than redefining `activeId`: that one also answers \"which theme does the\n * editor edit\" and \"which `<option>` is selected\", and those must keep meaning the fixed choice.\n */\n paintedId: string;\n onChange: (next: CustomTheme[]) => void;\n onPick: (id: string) => void;\n}) {\n // which theme the editor is open on: the active one if it is custom, else the first custom,\n // else none (nothing to edit until one exists)\n const [editingId, setEditingId] = createSignal<string>(\n props.themes().some((t) => t.id === props.activeId) ? props.activeId : (props.themes()[0]?.id ?? \"\"),\n );\n /**\n * `editingId` is a plain signal, so it can outlive the theme it names — deleting the theme\n * being edited left it pointing at a dead id, and the editor then rendered `<Show>`'s\n * fallback (\"no custom themes yet — press duplicate\") while other themes existed.\n *\n * Resolving through the list instead of trusting the signal means the editor always shows a\n * theme that EXISTS: the named one if it is still there, otherwise the first remaining one.\n */\n const editing = () => {\n const list = props.themes();\n /**\n * The theme being edited defaults to the ACTIVE one, not `list[0]`.\n *\n * `editingId` is only set by a click in this dialog, so on open it is empty and the editor\n * showed the FIRST custom theme — which may be neither the active one nor one with a\n * background image. Combined with the gate below (which requires a custom theme to be active),\n * the whole editor and its \"background image\" section appeared or vanished depending on an\n * arbitrary list order. Reported as \"背景画像があるカスタムテーマと無いテーマがあるときに背景画像\n * 設定欄がどっちからも消失してそう\".\n *\n * Falling back to `activeId` means: when a custom theme is on screen, the editor is about THAT\n * theme, so its image field is reachable whenever there is an image to edit.\n */\n return (\n list.find((t) => t.id === editingId()) ??\n list.find((t) => t.id === props.activeId) ??\n list[0]\n );\n };\n /**\n * What the hex field SHOWS while it is being typed in, keyed by palette key.\n *\n * A half-typed \"#ff\" is not a colour, so it cannot be stored — but it must still be visible,\n * or the input jumps back to the old value on every keystroke and a hex can never be entered.\n * The draft is cleared on blur, at which point the field shows the colour that was applied.\n */\n const [hexDraft, setHexDraft] = createSignal<Record<string, string>>({});\n /** the hidden file input the 🖼 button opens (see the button's comment for why) */\n let filePick: HTMLInputElement | undefined;\n\n /** write one field of the theme being edited, and persist immediately */\n const patch = (fn: (t: CustomTheme) => CustomTheme) => {\n /**\n * Patch the theme the editor is SHOWING, which is `editing()` — not `editingId()`.\n *\n * `editing()` falls back to the first theme when the signal names one that no longer exists\n * (or nothing at all), so the UI renders a real theme. `patch()` read the raw signal and\n * bailed when it was empty, so the editor was showing a theme that every edit silently\n * failed to touch: \"choose image… で画像選択したのに何も変わらない\". The two must resolve the\n * same way, or the panel lies about what it is editing.\n */\n const id = editing()?.id;\n if (!id) return;\n // apply the palette live so the operator sees the change as they type\n const next = props.themes().map((t) => (t.id === id ? fn(t) : t));\n props.onChange(next);\n };\n const setColour = (key: keyof ThemePalette, raw: string) => {\n const norm = normalizeColour(raw);\n // a half-typed value must not repaint the app with an empty colour: an unparseable string\n // leaves the LAST valid colour applied, which is what the operator sees while typing\n if (!norm) return;\n patch((t) => ({ ...t, palette: { ...t.palette, [key]: norm } }));\n };\n\n /** copy the CURRENT preset into a new custom theme, so presets never drift */\n const duplicatePreset = () => {\n /**\n * Copy whatever is PAINTED — preset or custom — and take the NAME from the same theme.\n *\n * Both halves must come from `paintedId`, because the palette below is read from the LIVE\n * document. Using `activeId` for the name while the colours came from the document split the\n * two under \"follow the system\": the copy got the painted palette and the selected theme's\n * label. Using `paintedId` for both keeps name and colours describing one theme.\n *\n * (An earlier bug had the same shape: looking the id up in THEMES alone meant duplicating a\n * CUSTOM theme produced \"Dark copy\" with `mode: \"dark\"`, because the lookup missed and fell\n * back to THEMES[0]. MEASURED: active=custom-x (mode light) produced a dark copy labelled after\n * the wrong theme.)\n */\n const activeCustom = props.themes().find((t) => t.id === props.paintedId);\n const activePreset = THEMES.find((t) => t.key === props.paintedId);\n const base = activeCustom ?? activePreset ?? THEMES[0]!;\n // Colours come from the LIVE document, which is what the operator is looking at: for a\n // preset that is the stylesheet's value, and for a custom theme the inline value it\n // applied. A hardcoded copy in JS would drift from app.css the first time a palette was\n // retuned, and copying a custom theme from DEFAULT_PALETTE would silently lose its colours.\n const cs = getComputedStyle(document.documentElement);\n const palette = { ...DEFAULT_PALETTE } as ThemePalette;\n for (const { key, cssVar } of PALETTE_KEYS) {\n const v = normalizeColour(cs.getPropertyValue(cssVar));\n if (v) palette[key] = v;\n }\n const id = newThemeId(props.themes().map((t) => t.id).concat(THEMES.map((t) => t.key)));\n const theme: CustomTheme = {\n id,\n label: `${base.label}${activeCustom ? \"\" : \" copy\"}`.slice(0, 40),\n mode: base.mode,\n palette,\n // carry the background too, or duplicating a themed setup loses the image\n ...(activeCustom?.backgroundImage\n ? {\n backgroundImage: activeCustom.backgroundImage,\n backgroundDim: activeCustom.backgroundDim,\n surfaceAlpha: activeCustom.surfaceAlpha,\n }\n : {}),\n };\n props.onChange([...props.themes(), theme]);\n setEditingId(id);\n /**\n * ADOPT the copy as the active theme.\n *\n * `applyCustomTheme()` only paints the theme that is ACTIVE — a custom theme the operator\n * is merely editing has no effect on the document. \"Duplicate current\" creates an editable\n * copy, so without this the operator got a copy they could edit with no visible result:\n * changing a colour, choosing a background image, none of it reached the screen. Reported\n * as \"choose image… で画像選択したのに何も変わらない\".\n *\n * Selecting the thing you just created is also what the button implies.\n */\n props.onPick(id);\n };\n\n /**\n * Upload the image to the SERVER and store its URL.\n *\n * It used to be read into a data URI and kept in `localStorage`, which forced a 1.5MB cap\n * because the whole origin shares a ~5MB quota — one wallpaper could break every other setting\n * the UI stores there, and a phone photo is bigger than that anyway. The bytes now live in\n * `<dataDir>/assets/` and the theme holds a short URL, so there is no size limit worth\n * mentioning and nothing competes with the theme palette for storage.\n *\n * The raw `File` is the request body (no multipart), because the server only needs the bytes\n * and its content type.\n */\n const importFile = async (file: File | undefined) => {\n if (!file) return;\n if (!/^image\\//.test(file.type)) {\n flashHint(`that file is ${JSON.stringify(file.type || \"unknown\")} — pick an image`);\n return;\n }\n flashHint(`uploading ${file.name} (${Math.round(file.size / 1024)}KB)…`);\n try {\n const r = (await fetch(\"/api/assets\", {\n method: \"POST\",\n headers: { \"content-type\": file.type },\n body: file,\n }).then(async (res) => ({ ok: res.ok, body: await res.json().catch(() => null) }))) as {\n ok: boolean;\n body: { url?: string; bytes?: number; error?: string } | null;\n };\n if (!r.ok || !r.body?.url) {\n flashHint(r.body?.error ?? \"upload failed\");\n return;\n }\n patch((t) => ({ ...t, backgroundImage: r.body!.url!, backgroundImageBytes: r.body!.bytes }));\n /**\n * ADOPT the theme being edited — the image is otherwise invisible.\n *\n * `patch()` only repaints the theme that is ACTIVE (`applyCustomTheme` paints exactly\n * one), so uploading into a theme the operator has not selected set the URL, saved it, and\n * showed nothing: reported as \"背景画像アップロードして保存したのに適用されない\". It looked\n * like the upload had failed, because the one thing they asked for — seeing the picture —\n * did not change.\n *\n * Selecting the theme you just decorated is also what the action implies, and it is what\n * `duplicatePreset()` already does for the same reason.\n */\n const id = editing()?.id;\n if (id) props.onPick(id);\n flashHint(\"background image set\");\n } catch (ex) {\n flashHint(`upload failed: ${(ex as Error).message}`);\n }\n };\n\n return (\n <div class=\"themeeditor\">\n <h4 class=\"cfgsub\">your themes</h4>\n <div class=\"btnrow\">\n <button type=\"button\" onclick={duplicatePreset} title=\"copy the theme you are using into a new editable one — presets themselves are never modified\">\n + duplicate current\n </button>\n {/**\n * NO theme picker here.\n *\n * The card grid above is the selection surface, and picking a card already makes that\n * theme the edited AND painted one. A second dropdown listing the same themes was the same\n * decision offered twice — \"duplicate 右のプルダウンが不要、上で選択中のテーマの編集画面が出る\n * べきで、編集の選択経路は2つなくて良い\". Two paths also meant two ways to disagree about\n * which theme is being edited, which is the class of bug this editor has already had.\n */}\n </div>\n\n <Show\n /**\n * The editing controls appear only when a CUSTOM theme is ACTIVE.\n *\n * They used to show whenever any custom theme existed, defaulting to the first one — so\n * the panel offered a colour picker for a theme that was not on screen and edits went\n * somewhere the operator had not chosen. Reported as \"テーマエディタは、ユーザー作成テーマが\n * アクティブなときだけ出現してほしい\".\n *\n * The \"+ duplicate current\" row above stays ALWAYS visible: hiding the whole editor also\n * removed the only way to CREATE a custom theme, which the smoke test caught\n * (\"no way to create a custom theme — the editor cannot be reached\"). Create is how you\n * get into the state this gate tests for, so it cannot live behind the gate.\n *\n * `props.themes()` contains the active id — the same resolution the painter uses — so \"is\n * it active\" here and \"is it painted\" there cannot disagree.\n */\n when={editing() && props.themes().some((t) => t.id === props.activeId) ? editing() : null}\n fallback={\n <div class=\"muted\" style=\"margin:6px 0\">\n {props.themes().length === 0\n ? <>no custom themes yet — press <b>+ duplicate current</b> to start from the palette you are using.</>\n : <>the editor shows when one of your themes is ACTIVE — pick one under \"your themes\" above (or press <b>+ duplicate current</b>).</>}\n </div>\n }\n >\n {(t) => (\n <>\n <div class=\"cfggrid\" style=\"margin-top:8px\">\n {/**\n * NO name field here.\n *\n * \"your themes のテーマ名欄と themes のテーマプレビュー選択が実質役割が重複している\"\n * — the field and the card grid were two ways to point at the same theme, and the\n * label is what the card shows anyway. The theme keeps the name it was created\n * with (`<preset> copy`); an operator who wants a different one duplicates again,\n * which is the same effort as typing over it.\n */}\n <label class=\"trow\">appearance\n <select\n value={editing()!.mode}\n onchange={(e) => patch((cur) => ({ ...cur, mode: e.currentTarget.value as \"dark\" | \"light\" }))}\n >\n <option value=\"dark\">dark</option>\n <option value=\"light\">light</option>\n </select>\n </label>\n </div>\n\n <div class=\"paletterows\">\n <For each={PALETTE_KEYS}>\n {(k) => (\n <label class=\"paletterow\" title={k.cssVar}>\n <input\n type=\"color\"\n value={normalizeColour(editing()!.palette[k.key]) ?? \"#000000\"}\n oninput={(e) => setColour(k.key, e.currentTarget.value)}\n />\n <span class=\"paletterow-label\">{k.label}</span>\n <input\n class=\"mono paletterow-hex\"\n /**\n * The DRAFT, not the stored colour.\n *\n * Bound to the palette value, every keystroke was normalised and reverted:\n * typing \"#ff\" stores nothing (not a valid colour yet), so the input\n * snapped back to the old value and the operator could never finish\n * typing a hex. `#{hexDraft()[k.key] ?? stored}` lets an incomplete value\n * sit in the field while only valid colours repaint the app.\n */\n value={hexDraft()[k.key] ?? editing()!.palette[k.key]}\n spellcheck={false}\n oninput={(e) => {\n const raw = e.currentTarget.value;\n setHexDraft((d) => ({ ...d, [k.key]: raw }));\n setColour(k.key, raw);\n }}\n onblur={() =>\n // leave the field showing the colour that actually got applied\n setHexDraft((d) => {\n const next = { ...d };\n delete next[k.key];\n return next;\n })\n }\n />\n </label>\n )}\n </For>\n </div>\n <div class=\"btnrow\">\n <button\n type=\"button\"\n title=\"put every colour back to the palette this theme was created from\"\n onclick={() => patch((cur) => ({ ...cur, palette: { ...DEFAULT_PALETTE } }))}\n >\n ↺ reset palette\n </button>\n <button\n type=\"button\"\n onclick={() => {\n // capture the doomed id BEFORE mutating: `props.themes` is a getter, and\n // reading it again after `onChange` depends on whether the parent has already\n // re-rendered — the same expression then means two different things\n const doomed = editing()?.id;\n if (!doomed) return;\n props.onChange(props.themes().filter((x) => x.id !== doomed));\n setEditingId(props.themes().find((x) => x.id !== doomed)?.id ?? \"\");\n }}\n title=\"delete this custom theme\"\n >\n 🗑 delete\n </button>\n </div>\n\n <h4 class=\"cfgsub\">background image</h4>\n <div class=\"cfggrid\">\n {/**\n * THE PREVIEW IS THE CONTROL.\n *\n * Asked for as \"replace imageボタンをやめて、背景画像が設定されているときは背景画像を\n * hoverでreplaceのガイド、クリックでファイルピッカーにしたほうが良い気がする、よくある\n * UIパターン\". It is: the thing you want to change is the thing you click, and a\n * separate button makes the operator map \"which image does this replace?\" themselves.\n *\n * With NO image the same slot is an empty drop-target-style button, so there is still\n * exactly one place to go.\n *\n * The hidden `<input type=\"file\">` is still the mechanism (a native file control\n * cannot be styled and always shows \"no file chosen\" once cleared), and it is still\n * cleared after each pick so the SAME file can be chosen twice.\n */}\n <button\n type=\"button\"\n class={\"bgpick\" + (editing()!.backgroundImage ? \" has\" : \"\")}\n onclick={() => filePick?.click()}\n title={\n editing()!.backgroundImage\n ? \"click to replace this background image (PNG/JPG/WebP)\"\n : \"choose a background image (PNG/JPG/WebP)\"\n }\n >\n <Show\n when={editing()!.backgroundImage}\n fallback={<span class=\"bgpick-empty\">🖼 choose a background image…</span>}\n >\n {/**\n * `srcset` HERE TOO — this is why the appearance panel felt laggy.\n *\n * The app's own wallpaper (`<BgPhoto>`) loads through `srcset` + `sizes`, so the\n * browser picks a width that suits the viewport. This preview asked for the\n * ORIGINAL file, which is a multi-megabyte photo, and it does so every time the\n * section opens. Asked as \"appearanceがラグくて… こっちはUI本体と違って背景画像が\n * srcset無しでロードされてる\" — exactly right.\n *\n * The preview is small, so it asks for the smallest rung and never the original.\n */}\n <img\n src={bgSrc(editing()!.backgroundImage)}\n srcset={bgSrcSet(editing()!.backgroundImage)}\n sizes=\"260px\"\n alt=\"current background\"\n decoding=\"async\"\n loading=\"lazy\"\n />\n <span class=\"bgpick-hint\">🖼 replace…</span>\n </Show>\n </button>\n <input\n ref={filePick}\n type=\"file\"\n accept=\"image/*\"\n style=\"display:none\"\n oninput={(e) => e.stopPropagation()}\n onchange={(e) => {\n // stop the change from reaching the settings <form>: it was firing a full\n // PUT /api/config (saving every setting and running connectAll) on an upload\n e.stopPropagation();\n importFile(e.currentTarget.files?.[0]);\n // clear so the SAME file can be picked again\n e.currentTarget.value = \"\";\n }}\n />\n <Show when={editing()!.backgroundImage}>\n <div class=\"bgpreview\">\n {/**\n * Show the UPLOADED size, not a guess from the URL length.\n *\n * The bytes live on the server and the theme stores only\n * `/api/assets/<32hex>.<ext>`, so estimating from the string's length reported\n * \"0 KB\" for every image. A size is only known at upload time.\n */}\n <span class=\"muted\" title=\"this image is served from the server; the theme stores only its URL\">\n ✓ image set{(() => {\n const b = editing()?.backgroundImageBytes;\n return b ? ` — ${Math.max(1, Math.round(b / 1024))} KB` : \"\";\n })()}\n </span>\n <div class=\"btnrow\">\n <label class=\"trow\" title=\"how much the image is dimmed so text stays readable\">\n dim\n <input\n type=\"range\"\n min=\"0\"\n max=\"0.9\"\n step=\"0.05\"\n value={editing()!.backgroundDim ?? 0.55}\n oninput={(e) => patch((cur) => ({ ...cur, backgroundDim: Number(e.currentTarget.value) }))}\n />\n <span class=\"muted mono\">{Math.round((editing()!.backgroundDim ?? 0.55) * 100)}%</span>\n </label>\n {/**\n * How see-through the code / tool cards are. Floored at 35% in\n * `sanitizeTheme`: lower than that and monospace output over a busy photo\n * becomes unreadable, which is the bug the opaque rule was added to fix.\n */}\n <label title=\"how much of the background shows through code blocks and tool cards — lower is more transparent\">\n surfaces\n <input\n type=\"range\"\n min=\"0.35\"\n max=\"1\"\n step=\"0.01\"\n value={editing()!.surfaceAlpha ?? 0.82}\n oninput={(e) =>\n patch((cur) => ({ ...cur, surfaceAlpha: Number(e.currentTarget.value) }))\n }\n />\n <span class=\"muted mono\">\n {Math.round((editing()!.surfaceAlpha ?? 0.82) * 100)}%\n </span>\n </label>\n <button type=\"button\" onclick={() => patch((cur) => ({ ...cur, backgroundImage: undefined }))}>\n ✕ remove\n </button>\n </div>\n </div>\n </Show>\n </div>\n <div class=\"muted\" style=\"margin-top:6px;font-size:var(--text-xs)\">\n the image is uploaded to the server and sits behind the panels, dimmed so text\n stays readable. No size limit — it is a file now, not browser storage.\n </div>\n </>\n )}\n </Show>\n </div>\n );\n}\n\nexport function ConfigModal(props: {\n cfg: any;\n onClose: () => void;\n onSaved: () => void;\n /**\n * MCP servers whose missing grant has already been announced.\n *\n * Owned by App and shared across opens, because \"this server needs authorization\" is a fact\n * about the SERVER, not about this dialog instance: a per-mount Set would forget it every\n * time the dialog was closed and re-open the same interruption on the next save.\n */\n announcedOAuth: Set<string>;\n /**\n * Skills available to the SELECTED session, for the skills section.\n *\n * Read-only and passed in rather than fetched here: App already holds them for the `/` command\n * palette, and a second fetch would be a second copy to keep in step.\n */\n skills: { name: string; description: string }[];\n /** whether a session is selected at all, so the lists can say \"select a session\" honestly */\n hasSelection: boolean;\n /** the selected agent's id, so a skill body can be fetched by name */\n agentId: string | null;\n /** optional native tools this host has; null while unknown */\n features: {\n imageResize: { available: boolean; tool: string | null; maxEdge: number; found: { name: string; present: boolean }[] };\n pty: { available: boolean; provider: string | null };\n } | null;\n /** theme state, owned by App because it paints `<html>` */\n theme: {\n themes: () => CustomTheme[];\n activeId: () => string;\n /** the id ACTUALLY PAINTED (differs from activeId under \"follow the system\") */\n paintedId: () => string;\n auto: () => boolean;\n setAuto: (v: boolean) => void;\n dark: () => string;\n setDark: (v: string) => void;\n light: () => string;\n setLight: (v: string) => void;\n setThemes: (v: CustomTheme[]) => void;\n setActive: (v: string) => void;\n /** persist the appearance — called by SAVE, never by a preview */\n commitAppearance: (v: { auto: boolean; dark: string; light: string; fixed: string }) => void;\n /** paint this id regardless of the slot the OS selects, or null to stop previewing */\n preview: (id: string | null) => void;\n };\n}) {\n /**\n * a provider row holds a LIST of keys, rotated round-robin by the server.\n *\n * `apiKeys` is read when present and `apiKey` seeds it otherwise, matching the\n * migration on the server side — an existing config must open in this dialog\n * showing its key, and save back without changing its shape.\n */\n type PRow = { name: string; baseUrl: string; apiKeys: string[]; model: string };\n const rowOf = (name: string, v: any): PRow => {\n const keys: string[] = Array.isArray(v?.apiKeys) && v.apiKeys.length\n ? v.apiKeys.filter((k: unknown) => typeof k === \"string\" && k.trim())\n : v?.apiKey\n ? [String(v.apiKey)]\n : [\"\"];\n return { name, baseUrl: v?.baseUrl ?? \"\", apiKeys: keys.length ? keys : [\"\"], model: v?.model ?? \"\" };\n };\n const [providers, setProviders] = createSignal<PRow[]>(\n Object.entries(props.cfg.providers ?? {}).map(([name, v]: [string, any]) => rowOf(name, v)),\n );\n const [defaultProvider, setDefaultProvider] = createSignal(props.cfg.defaultProvider ?? \"\");\n // the default as it exists on disk, so we can tell \"configured but missing\"\n // from \"you just changed it\"\n const cfgDefaultProvider = () => props.cfg.defaultProvider ?? \"\";\n // A <select> whose value matches no <option> silently falls back to the\n // first option — which is exactly the \"(none — first provider wins)\" row.\n // So a configured default that has no provider row (deleted/renamed) showed\n // as \"none\", i.e. as if the topmost provider were always chosen, and the\n // next save persisted that. Render the orphaned name as its own option so\n // the dropdown always shows the real value.\n const providerNames = (): string[] => {\n const names = [...new Set(providers().map((p) => p.name.trim()).filter(Boolean))];\n const cur = defaultProvider();\n if (cur && !names.includes(cur)) names.push(cur);\n return names;\n };\n const staleDefaultProvider = (): string => {\n const cur = defaultProvider();\n if (!cur) return \"\";\n return providers().some((p) => p.name.trim() === cur) ? \"\" : cur;\n };\n const [intervalMin, setIntervalMin] = createSignal(Math.round((props.cfg.progressIntervalMs ?? 600000) / 60000));\n const [minChars, setMinChars] = createSignal(props.cfg.progressMinChars ?? 4000);\n // empty input = DERIVED budget (75% of each model's window) — the old UI\n // always showed 96 and saved it back on every settings save, silently\n // turning every agent into \"manual override\" at a fixed 96k that fit\n // neither 32k local models nor 1M-context ones. Null means \"not set\".\n const [ctxBudgetK, setCtxBudgetK] = createSignal<number | null>(\n props.cfg.contextTokenBudget != null ? Math.round(props.cfg.contextTokenBudget / 1000) : null,\n );\n const [ctxWinK, setCtxWinK] = createSignal(props.cfg.contextWindowTokens ? Math.round(props.cfg.contextWindowTokens / 1000) : 0);\n const [maxDepth, setMaxDepth] = createSignal(props.cfg.maxSpawnDepth ?? 3);\n const [shortContext, setShortContext] = createSignal(Boolean(props.cfg.shortContext));\n /**\n * The `/api/*` password — empty means \"no auth\", which is correct and safe on loopback.\n *\n * This field exists because there was NO way to set one: `POST /api/setup` accepts a password but\n * refuses once a config file exists, and that path was only ever driven by the first-run wizard,\n * which was removed. Asked as \"初回起動ウィザードは前に廃止したはずだからパスワード設定できないのでは?\"\n * — correct, and the answer is this field rather than resurrecting the wizard.\n *\n * Seeded EMPTY rather than showing the stored value: it is a secret, and the panel has no way to\n * display \"unchanged\" for it the way masked provider keys do. An untouched empty field therefore\n * means \"leave it alone\", which is why the save only sends it when it was actually edited.\n */\n const [apiPassword, setApiPassword] = createSignal(\"\");\n const [apiPasswordDirty, setApiPasswordDirty] = createSignal(false);\n const [tasks, setTasks] = createSignal<any[]>((props.cfg.tasks ?? []).map((t: any) => ({ ...t })));\n // MCP servers. The header text is kept separately as STRINGS: the config holds\n // an object, and round-tripping it through JSON on every keystroke would rewrite what\n // the operator is typing (a half-typed quote would be erased mid-word).\n const [mcpServers, setMcpServers] = createSignal<any[]>(\n (props.cfg.mcpServers ?? []).map((m: any) => ({ ...m })),\n );\n const [mcpHeadersText, setMcpHeadersText] = createSignal<Record<number, string>>(\n Object.fromEntries(\n (props.cfg.mcpServers ?? []).map((m: any, i: number) => [\n i,\n m.headers ? JSON.stringify(m.headers) : \"\",\n ]),\n ),\n );\n const [mcpHeaderErr, setMcpHeaderErr] = createSignal<Record<number, string>>({});\n /**\n * Which auth input to show per row, and its value.\n *\n * \"headers as JSON\" was the only way to authenticate, reported as \"正直わかりやすいとは言い難い\":\n * a bearer token meant knowing the header name, the \"Bearer \" prefix and JSON quoting — to do\n * the one thing every server needs. A choice with one input per case makes the common path a\n * paste; the JSON box stays for anything unusual.\n *\n * Derived from the saved headers so re-opening settings shows the right control rather than\n * resetting everything to \"no auth\".\n */\n const [mcpAuthKind, setMcpAuthKind] = createSignal<\n Record<number, \"none\" | \"bearer\" | \"header\" | \"json\">\n >(\n Object.fromEntries(\n (props.cfg.mcpServers ?? []).map((m: any, i: number) => {\n const h = (m.headers ?? {}) as Record<string, string>;\n const keys = Object.keys(h);\n if (!keys.length) return [i, \"none\"];\n const only = keys.length === 1 ? keys[0]! : \"\";\n if (only === \"Authorization\" && /^Bearer /i.test(h[only] ?? \"\")) return [i, \"bearer\"];\n return [i, keys.length === 1 ? \"header\" : \"json\"];\n }),\n ),\n );\n const [mcpAuthValue, setMcpAuthValue] = createSignal<Record<number, string>>(\n Object.fromEntries(\n (props.cfg.mcpServers ?? []).map((m: any, i: number) => {\n const h = (m.headers ?? {}) as Record<string, string>;\n const keys = Object.keys(h);\n if (keys.length !== 1) return [i, \"\"];\n const only = keys[0]!;\n return [i, only === \"Authorization\" ? (h[only] ?? \"\").replace(/^Bearer /i, \"\") : (h[only] ?? \"\")];\n }),\n ),\n );\n const [mcpHeaderName, setMcpHeaderName] = createSignal<Record<number, string>>(\n Object.fromEntries(\n (props.cfg.mcpServers ?? []).map((m: any, i: number) => {\n const keys = Object.keys((m.headers ?? {}) as Record<string, string>);\n const only = keys.length === 1 ? keys[0]! : \"\";\n return [i, only && only !== \"Authorization\" ? only : \"\"];\n }),\n ),\n );\n const [mcpStatus, setMcpStatus] = createSignal<\n Record<\n number,\n {\n kind: \"testing\" | \"ok\" | \"err\";\n text: string;\n /** what the connect found — a COUNT alone cannot tell you it is the right server */\n tools?: { name: string; description?: string }[];\n needsOAuth?: boolean;\n }\n >\n >({});\n /**\n * Pending debounce timers for the URL-triggered OAuth probe, keyed by row.\n *\n * A plain object rather than a closure per row: a row can be removed while its timer is pending,\n * so the callback re-reads `mcpServers()[i]` and bails when the row is gone.\n */\n const urlProbeTimers: Record<number, ReturnType<typeof setTimeout> | undefined> = {};\n /**\n * Ask the server whether an UNSAVED config needs OAuth, and show the 🔑 button if so.\n *\n * `/api/mcp/test` takes a config and never touches the saved list, so this is safe to run before\n * a save — which is the point: the operator should not have to save, close, reopen and authorize.\n */\n const probeOAuth = async (i: number, cfg: Record<string, unknown>) => {\n if (!mcpServers()[i]) return; // the row was removed while the timer was pending\n const r = (await api(\"/api/mcp/test\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(cfg),\n }).catch(() => null)) as { ok?: boolean; error?: string; needsOAuth?: boolean; tools?: unknown[] } | null;\n if (!mcpServers()[i]) return;\n // only a DEFINITE answer replaces the status: a network blip must not wipe what is shown\n if (!r) return;\n setMcpStatus((m) => ({\n ...m,\n [i]: r.ok\n ? { kind: \"ok\", text: `${(r.tools as unknown[] | undefined)?.length ?? 0} tools` }\n : {\n kind: \"err\",\n text: r.needsOAuth ? \"needs authorization — press 🔑\" : r.error ?? \"no response\",\n ...(r.needsOAuth ? { needsOAuth: true } : {}),\n },\n }));\n };\n // live per-server state, refreshed when the section is opened\n const [mcpStates, setMcpStates] = createSignal<Record<string, any>>({});\n /**\n * Per-server OAuth state, keyed by NAME.\n *\n * It was keyed by row INDEX, and that silently broke in two directions. The save path\n * iterates `cleanMcp` (which SKIPS blank rows) while the row UI iterates `mcpServers()`, so\n * the two disagree the moment any row is blank — the status fetched for server N got stored\n * under a different row's index, and the save then read a stale flag and redirected to the MCP\n * section on saves that had nothing to do with MCP (\"テーマ編集後に save settings をすると\n * MCP servers のセクションに飛ぶ\").\n *\n * A name is the server's identity everywhere else (the server itself looks states up by name),\n * so it is the only key that cannot drift.\n */\n const [mcpOAuth, setMcpOAuth] = createSignal<\n Record<string, { required?: boolean; authorized?: boolean; hasRefreshToken?: boolean; flow?: { phase: string; url?: string } }>\n >({});\n /**\n * The OAuth state for a server NAME, or null when the server is not OAuth at all.\n *\n * Keyed by name because that is the server's identity everywhere else (`mcpOAuth` was once keyed\n * by ROW INDEX and drifted between the save loop and the render loop). Returned as an accessor so\n * the dropdown re-renders when authorization completes.\n */\n const oauthState = (name: string) => {\n const key = String(name ?? \"\").trim();\n if (!key) return null;\n const st = mcpOAuth()[key];\n return st && (st.required || st.authorized) ? st : null;\n };\n const refreshMcpStates = async () => {\n const r = (await api(\"/api/mcp\").catch(() => null)) as { states?: any[] } | null;\n setMcpStates(Object.fromEntries((r?.states ?? []).map((s: any) => [s.name, s])));\n };\n const refreshMcpOAuth = async (name: string) => {\n const key = String(name ?? \"\").trim();\n if (!key) return;\n\n // \"needs OAuth\" is discovered by the server itself now: an unauthorized connect\n // leaves the state flagged, so there is no separate probe to trigger here.\n const r = (await api(`/api/mcp/oauth/status?name=${encodeURIComponent(key)}`).catch(\n () => null,\n )) as any;\n if (r && !r.error) setMcpOAuth((m) => ({ ...m, [key]: r }));\n };\n /**\n * Start OAuth for one server and open the authorization page.\n *\n * The server answers as soon as the SDK's discovery + registration produce a URL; the\n * token exchange finishes when the browser hits the loopback callback. So the panel\n * opens a tab and POLLS — polling is what makes \"authorized\" appear on its own, which\n * is the whole point of an automatic flow.\n */\n const startMcpOAuth = async (i: number, srv: any) => {\n if (!srv.name) {\n setMcpStatus((m) => ({ ...m, [i]: { kind: \"err\", text: \"give it a name first\" } }));\n return;\n }\n setMcpStatus((m) => ({\n ...m,\n [i]: { kind: \"testing\", text: \"discovering the authorization server…\" },\n }));\n const r = (await api(\"/api/mcp/oauth/start\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n /**\n * Send the URL too, so an UNSAVED server can be authorized.\n *\n * The endpoint used to require the name to exist in `config.mcpServers`, which forced\n * save → dialog closes → reopen → authorize → save again. The grant is stored per server\n * NAME, so authorizing first and saving afterwards keeps it.\n */\n body: JSON.stringify({ name: srv.name, url: srv.url }),\n }).catch(() => null)) as\n | { ok?: boolean; url?: string; error?: string; alreadyAuthorized?: boolean }\n | null;\n if (r?.alreadyAuthorized) {\n setMcpStatus((m) => ({ ...m, [i]: { kind: \"ok\", text: \"already authorized\" } }));\n await refreshMcpOAuth(srv.name);\n await refreshMcpStates();\n return;\n }\n if (!r?.ok || !r.url) {\n setMcpStatus((m) => ({ ...m, [i]: { kind: \"err\", text: r?.error ?? \"no response\" } }));\n await refreshMcpOAuth(srv.name);\n return;\n }\n // Open the authorization page. `noopener` is deliberate: the page must not get a\n // handle on this window.\n window.open(r.url, \"_blank\", \"noopener\");\n setMcpStatus((m) => ({\n ...m,\n [i]: { kind: \"testing\", text: \"waiting for you to finish in the browser…\" },\n }));\n // poll until the flow settles (the server gives up after 5 minutes)\n const deadline = Date.now() + 5 * 60_000;\n while (Date.now() < deadline) {\n await new Promise((res) => setTimeout(res, 1000));\n const st = (await api(`/api/mcp/oauth/status?name=${encodeURIComponent(srv.name)}`).catch(\n () => null,\n )) as any;\n if (!st || st.error) continue;\n setMcpOAuth((m) => ({ ...m, [i]: st }));\n if (st.authorized) {\n setMcpStatus((m) => ({\n ...m,\n [i]: { kind: \"ok\", text: \"authorized — the tools are available now\" },\n }));\n await refreshMcpStates();\n // `onSaved` re-fetches the agent list, so a newly-authorized server's tools are\n // usable on the next turn rather than being a promise\n props.onSaved();\n return;\n }\n if (st.flow?.phase === \"error\") {\n setMcpStatus((m) => ({\n ...m,\n [i]: { kind: \"err\", text: st.flow.message ?? st.lastError ?? \"authorization failed\" },\n }));\n return;\n }\n }\n setMcpStatus((m) => ({ ...m, [i]: { kind: \"err\", text: \"authorization timed out\" } }));\n };\n createEffect(() => {\n if (section() !== \"mcp\") return;\n void refreshMcpStates();\n // OAuth state is per row and changes independently of the server list, so it is\n // fetched for every configured server when the section opens.\n mcpServers().forEach((m, i) => {\n if (m.name) void refreshMcpOAuth(m.name);\n });\n });\n const [err, setErr] = createSignal(\"\");\n\n /**\n * Which section the settings dialog is showing.\n *\n * The five sections used to be stacked in one column, so reaching the task list meant\n * scrolling past every provider row — and with several providers (each now holding\n * several keys, #170) the dialog was a wall of inputs with no way to see what it\n * contained. A menu on the left names them, shows only one at a time, and marks the\n * one you are on.\n *\n * The SAVE button stays outside the menu: it applies the whole form, so it must not\n * look like it belongs to whichever section happens to be visible.\n */\n type Section = \"providers\" | \"runtime\" | \"appearance\" | \"mcp\" | \"tasks\" | \"archive\" | \"agents\" | \"update\" | \"skills\" | \"help\";\n const [section, setSection] = createSignal<Section>(\"providers\");\n /**\n * Pick a theme from a CARD, routing to whichever slot the painter actually reads.\n *\n * Under \"follow the system\" the painted theme comes from the dark/light slots, so the cards'\n * old `setActive(...)` (which writes the FIXED slot) changed a value nothing read: the card\n * highlighted and the screen did not move. That invisible-edit shape is what showed up as\n * \"follow the system を入れてるときにテーマ複製したりするとやっぱりちょっと変な挙動になる\".\n *\n * A card writes the slot for ITS OWN mode, exactly as the labelled pickers above do — so picking\n * a light card while the OS is dark updates the light slot instead of applying something the OS\n * mode says is not current.\n */\n const pickThemeCard = (id: string, mode: \"dark\" | \"light\") => {\n const { slot } = slotForSelection(props.theme.auto(), mode);\n /**\n * Through `applyDraft`, so a card click is BOTH a draft edit and a preview.\n *\n * Calling the setters directly wrote the slot but never previewed, so a light card clicked\n * while the OS is dark still showed nothing — the painter reads the slot matching the OS.\n */\n if (slot === \"dark\") setSysDarkTheme(id);\n else if (slot === \"light\") setSysLightTheme(id);\n else setFixedTheme(id);\n };\n /**\n * Which card reads as selected.\n *\n * Following the system there are TWO slots, so BOTH marked cards are legitimate — the dark choice\n * and the light choice each carry a frame, because each is the answer for one appearance. Asked\n * as \"follow systemの時はdarkとlightでそれぞれ選択中のやつに枠が出て、最後に押したテーマが\n * プレビューされるべき\".\n *\n * Marking only `paintedIdFor()` (the slot the OS is currently in) hid the other choice entirely:\n * the operator could not see what their light theme was set to without flipping the OS.\n *\n * Not following the system there is one slot, so exactly one card is marked.\n */\n const themeCardChosen = (id: string) =>\n props.theme.auto()\n ? id === props.theme.dark() || id === props.theme.light()\n : id === props.theme.activeId();\n // the archive list is SERVER state (which entries are archived), fetched on open\n // and after every action — not derived from props.cfg, which carries the config as\n // loaded and would go stale the moment an agent is archived from the controls panel\n const [archived, setArchived] = createSignal<\n {\n id: string;\n workspace: string;\n archivedAt?: number;\n sessions: number;\n parent?: string;\n subs?: number;\n }[]\n >([]);\n const refreshArchived = async () => {\n const r = (await api(\"/api/archived\").catch(() => null)) as {\n agents?: {\n id: string;\n workspace: string;\n archivedAt?: number;\n sessions: number;\n parent?: string;\n subs?: number;\n }[];\n } | null;\n setArchived(r?.agents ?? []);\n };\n // Only TOP-LEVEL archived entries get a row. Archiving a parent takes its subtree\n // with it, so listing every descendant individually would suggest the operator\n // archived several things when they archived one — and restoring the parent already\n // brings the children back.\n const archivedTop = () => archived().filter((a) => !a.parent);\n // refresh whenever the panel is OPENED, so it never shows a stale list\n createEffect(() => {\n if (section() === \"archive\") void refreshArchived();\n });\n const SECTIONS: { key: Section; label: string; hint: string }[] = [\n { key: \"providers\", label: \"🧦 providers\", hint: \"endpoints, API keys, default models\" },\n // themes moved here from a sidebar icon: it is a preference, not a per-session action,\n // and the editor needs room a popover does not have\n { key: \"appearance\", label: \"🎨 appearance\", hint: \"theme, custom palettes, background image\" },\n { key: \"runtime\", label: \"⚙️ runtime\", hint: \"context budget, retries, spawn depth\" },\n { key: \"tasks\", label: \"⏰ scheduled tasks\", hint: \"cron prompts run against an agent\" },\n { key: \"mcp\", label: \"🔌 MCP servers\", hint: \"external tool servers exposed to every agent\" },\n { key: \"archive\", label: \"🗄 archive\", hint: \"agents you put away — restore or delete for good\" },\n { key: \"agents\", label: \"👥 agents\", hint: \"what exists (read-only)\" },\n { key: \"update\", label: \"⬆️ live update\", hint: \"restart onto a newer build\" },\n // what the agent can load: skills it wrote itself, workspace ones, and bundled ones\n { key: \"skills\", label: \"🧠 skills\", hint: \"reusable playbooks available to the selected session\" },\n // where the explanations that used to sit permanently under the UI now live\n { key: \"help\", label: \"❔️ help\", hint: \"keyboard shortcuts and what each toggle does\" },\n ];\n\n const agentIds = () => (props.cfg.agents ?? []).map((a: any) => a.id);\n\n // Theme state is owned by App (it paints `<html>`); these local names keep the appearance\n // panel readable without implying a second copy of the state.\n const customThemes = () => props.theme.themes();\n const fixedTheme = () => props.theme.activeId();\n /**\n * The appearance actually in force, for gating the theme groups.\n *\n * A custom theme carries its own `mode`; a preset's lives in `THEMES`. Both are needed because a\n * custom light theme must count as light. Defaulting to \"dark\" matches `<html>`'s own default, so\n * the grouping can never offer a group the document is not painting.\n */\n /**\n * APPEARANCE IS A DRAFT UNTIL SAVE.\n *\n * Every other section here commits on the save button, and themes used to commit on click — so\n * the same dialog had two meanings for \"apply\". Reported as \"save settingsボタンがあるのにテーマは\n * saveしなくても適用確定してるから設定の操作に一貫性が無い\".\n *\n * The PREVIEW still has to be immediate (you cannot choose a colour you cannot see), so the draft\n * is pushed to the live theme on every change and only PERSISTED on save:\n *\n * click → the screen changes (preview)\n * save → written to localStorage (commit)\n * close → the stored values are restored (discard)\n *\n * The draft starts from whatever is stored, so an untouched dialog commits nothing new.\n */\n /**\n * The state as STORED when the dialog opened — captured ONCE, so a discard can restore it.\n *\n * `props.theme.*()` reads the live signal, which the preview has already changed; reading it at\n * revert time would restore the preview, not the stored value.\n */\n const storedAppearance = {\n auto: localStorage.getItem(\"teapot.theme.auto\") === \"1\",\n dark: localStorage.getItem(\"teapot.theme.dark\") ?? \"dark\",\n light: localStorage.getItem(\"teapot.theme.light\") ?? \"light\",\n fixed: localStorage.getItem(\"teapot.theme\") ?? \"dark\",\n };\n const draft = createSignal(storedAppearance);\n const draftOf = draft[0];\n /**\n * Push a draft to the LIVE theme without storing it.\n *\n * `props.theme.set*` persists (it has to, for the sidebar's own theme switch), so previewing\n * through it would commit. The setters below therefore write the signal and let `commit` own\n * storage — see `commitAppearance`.\n */\n const applyDraft = (next: Partial<ReturnType<typeof draftOf>>) => {\n const merged = { ...draftOf(), ...next };\n draft[1](merged);\n props.theme.setAuto(merged.auto);\n props.theme.setDark(merged.dark);\n props.theme.setLight(merged.light);\n props.theme.setActive(merged.fixed);\n /**\n * PREVIEW the theme just chosen, whichever slot it landed in.\n *\n * Following the system the painter reads the slot matching the OS appearance, so choosing the\n * LIGHT theme while the OS is dark wrote a value nothing painted — the click looked dead.\n * Previewing the id directly makes the last-clicked theme visible regardless of which slot the\n * OS selects, which is what \"最後に押したテーマがプレビューされる\" means.\n */\n const chosen = next.dark ?? next.light ?? next.fixed;\n if (chosen) props.theme.preview(chosen);\n };\n const setFixedTheme = (v: string) => applyDraft({ fixed: v });\n const themeAuto = () => draftOf().auto;\n const setThemeAuto = (v: boolean) => applyDraft({ auto: v });\n const sysDarkTheme = () => draftOf().dark;\n const setSysDarkTheme = (v: string) => applyDraft({ dark: v });\n const sysLightTheme = () => draftOf().light;\n const setSysLightTheme = (v: string) => applyDraft({ light: v });\n const setCustomThemes = (v: CustomTheme[]) => props.theme.setThemes(v);\n\n /**\n * Restore the stored appearance — the DISCARD path.\n *\n * Called when the dialog closes without saving. Without it the preview would silently become the\n * committed state, which is the inconsistency this whole change removes.\n */\n const revertAppearance = () => {\n const s = storedAppearance;\n props.theme.setAuto(s.auto);\n props.theme.setDark(s.dark);\n props.theme.setLight(s.light);\n props.theme.setActive(s.fixed);\n // stop previewing: back to whichever slot the OS selects\n props.theme.preview(null);\n };\n\n /**\n * A PRESET's palette, read back from the stylesheet so a preview can be drawn for it.\n *\n * The presets live as `[data-theme=\"…\"]` blocks in app.css, and duplicating all ten palettes\n * into JS would be a second source of truth that silently drifts the first time a theme is\n * retuned. Instead the variables are read for real: a detached probe carries the\n * `data-theme` attribute, and `getComputedStyle` resolves the cascade for it.\n *\n * Memoised per key — this touches computed style, so it must not run per render.\n */\n /**\n * A PRESET's palette, for drawing its preview.\n *\n * A static table (`PRESET_PALETTES`), NOT a probe: the first version appended an element to\n * `document.body` to resolve the CSS cascade, and doing that from inside a `<For>` render broke\n * the settings dialog (MEASURED: \"the config dialog renders no key inputs at all\"). The table\n * duplicates app.css, which is unavoidable — a bundler inlines the stylesheet as a blob and\n * its rules are not readable back — so `test/theme-store.test.ts` asserts the two agree.\n */\n const presetPalette = (key: string): ThemePalette => PRESET_PALETTES[key] ?? DEFAULT_PALETTE;\n\n const saveProviders = (): Record<string, any> | null => {\n const out: Record<string, any> = {};\n for (const p of providers()) {\n if (!p.name.trim()) { setErr(\"provider name is required\"); return null; }\n if (p.baseUrl && !/^https?:\\/\\//.test(p.baseUrl)) { setErr(`provider ${p.name}: baseUrl must start with http(s)://`); return null; }\n // blanks are dropped on save (an empty row the operator added and did not\n // fill), and the legacy scalar mirrors the FIRST key so anything still\n // reading `apiKey` keeps working\n const keys = p.apiKeys.map((k) => k.trim()).filter(Boolean);\n out[p.name.trim()] = {\n baseUrl: p.baseUrl,\n ...(keys.length ? { apiKeys: keys, apiKey: keys[0] } : {}),\n ...(p.model ? { model: p.model } : {}),\n };\n }\n return out;\n };\n\n /**\n * What the save button should say — the same shape as the model panel's apply.\n *\n * Reported: \"設定のsaveが適用されたのかわかりにくいのでmodelパネルのapplyと同じ感じにしてほしい\".\n * The model panel disables the button, does the work, shows `✓ applied` and restores the label;\n * this footer just said \"save settings\" the whole time, so a save that succeeded and one that\n * did nothing looked identical.\n */\n const [saveState, setSaveState] = createSignal<\"idle\" | \"saving\" | \"saved\" | \"error\">(\"idle\");\n\n /**\n * A validation failure clears \"saving\" in ONE place.\n *\n * `save` has six early `return`s (a task with no agent, an MCP row with no name, …). Resetting the\n * state at each of them is a list of things to forget — and forgetting one parks the button\n * disabled on \"saving…\" for good, so the only control that could retry is dead.\n */\n const failSave = (message: string) => {\n setErr(message);\n setSaveState((s) => (s === \"saving\" ? \"idle\" : s));\n };\n\n const save = async (e: Event) => {\n e.preventDefault(); setErr(\"\");\n setSaveState(\"saving\");\n const providers = saveProviders();\n if (!providers) return setSaveState(\"idle\");\n const cleanTasks = tasks()\n .filter((t) => t.id?.trim() || t.prompt?.trim())\n .map((t, i) => ({ id: t.id?.trim() || `task-${i + 1}`, agent: t.agent, schedule: t.schedule, prompt: t.prompt, ...(t.forked ? { forked: true } : {}) }));\n for (const t of cleanTasks) {\n if (!t.agent) return failSave(`task \"${t.id}\": agent is required`);\n if (!t.schedule?.trim()) return failSave(`task \"${t.id}\": schedule is required`);\n }\n // MCP servers: validate HERE so a bad entry fails in the dialog that made it.\n // A nameless server would otherwise connect as \"\" and its tools would flatten to\n // `mcp____tool`, which the model cannot tell apart from another nameless one.\n const cleanMcp: any[] = [];\n const seenMcp = new Set<string>();\n for (const m of mcpServers()) {\n const name = String(m.name ?? \"\").trim();\n const url = String(m.url ?? \"\").trim();\n const transport = m.transport ?? \"http\";\n const command = String(m.command ?? \"\").trim();\n if (!name && !url && !command) continue; // a blank row is not an error\n if (!name) return failSave(\"MCP: a server needs a name\");\n if (seenMcp.has(name)) return failSave(`MCP: two servers are named \"${name}\"`);\n seenMcp.add(name);\n if (transport === \"stdio\" ? !command : !url) {\n return failSave(\n `MCP \"${name}\": ${transport === \"stdio\" ? \"a command is\" : \"a url is\"} required`,\n );\n }\n cleanMcp.push({\n name,\n transport,\n enabled: m.enabled !== false,\n ...(url ? { url } : {}),\n ...(transport === \"stdio\"\n ? { command, ...(m.args?.length ? { args: m.args } : {}) }\n : {}),\n ...(m.headers && Object.keys(m.headers).length ? { headers: m.headers } : {}),\n });\n }\n try {\n await api(\"/api/config\", {\n method: \"PUT\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n providers,\n defaultProvider: defaultProvider() || undefined,\n progressIntervalMs: Math.max(1, intervalMin()) * 60000,\n progressMinChars: Math.max(100, minChars()),\n ...(ctxBudgetK() != null ? { contextTokenBudget: Math.max(1, ctxBudgetK()!) * 1000 } : {}),\n ...(ctxWinK() > 0 ? { contextWindowTokens: ctxWinK() * 1000 } : {}),\n maxSpawnDepth: Math.max(0, maxDepth()),\n shortContext: shortContext(),\n ...(apiPasswordDirty() ? { password: apiPassword() } : {}),\n tasks: cleanTasks,\n mcpServers: cleanMcp,\n }),\n });\n // The save also CONNECTS every server (`PUT /api/config` → `mcp.connectAll()`), and\n // THAT is what discovers \"this one needs OAuth\". The panel only fetched OAuth\n // status when the section OPENED, so the 🔑 authorize button did not appear until\n // the operator closed and reopened settings — reported as \"一回設定を閉じて、再度\n // 開かないとOAuthのボタンが出ない\".\n //\n // `connectAll()` is fired-and-forgotten server-side, so the result lands AFTER this\n // response: refresh now AND once more shortly after, then let the operator see the\n // outcome. Closing immediately would hide the very thing the save discovered.\n await refreshMcpStates();\n await Promise.all(\n cleanMcp.map((m, i) => (m.name ? refreshMcpOAuth(m.name) : Promise.resolve())),\n );\n // one more pass after the connections settle\n setTimeout(() => {\n void refreshMcpStates();\n cleanMcp.forEach((m, i) => {\n if (m.name) void refreshMcpOAuth(m.name);\n });\n }, 1200);\n props.onSaved();\n /**\n * Move to the MCP section only when THIS save NEWLY discovered a missing grant.\n *\n * Reported twice (\"save settings をすると何故か MCP servers のセクションに移動する\"), and\n * the first fix was not enough. It narrowed the scan to the names this save wrote, but a\n * server that needs a grant KEEPS needing it until someone authorizes it — so once that\n * was true, every later save jumped again. The condition described an ongoing state, not\n * an event.\n *\n * A redirect earns its interruption only once: the moment the panel learns there is\n * something to act on. After that the 🔑 badge in the row is the standing notice, and the\n * save does what the operator asked it to do — save and close.\n */\n const savedNames = new Set(cleanMcp.map((m) => m.name).filter(Boolean));\n const needing = mcpServers().filter((m) => {\n const key = String(m.name ?? \"\").trim();\n return (\n savedNames.has(key) && mcpOAuth()[key]?.required && !mcpOAuth()[key]?.authorized\n );\n });\n const newlyNeeding = needing.filter((m) => !props.announcedOAuth.has(String(m.name ?? \"\")));\n const needsAction = newlyNeeding.length > 0;\n if (needsAction) {\n // remember it, so the NEXT save closes instead of interrupting again\n for (const m of newlyNeeding) props.announcedOAuth.add(String(m.name ?? \"\"));\n /**\n * NEVER navigate away from the section the operator was editing.\n *\n * Reported twice: \"設定パネルの appearance を保存するとMCP serversに移動する\". The\n * redirect was meant as a courtesy — a saved server needs authorization, so take them\n * there. But it fired on saves that had nothing to do with MCP, so saving a theme\n * silently moved the panel to a different section, which reads as the save having done\n * something it did not.\n *\n * They are already LOOKING at the MCP section in the one case where moving is a no-op,\n * so the panel stays put and the hint names the server. The hint is where the\n * information goes: it is visible on any section, and it does not move anything.\n */\n const names = newlyNeeding.map((m) => String(m.name ?? \"\").trim()).filter(Boolean);\n flashHint(\n `${names.join(\", \") || \"a saved MCP server\"} needs authorization — 🔑 authorize in MCP servers`,\n );\n }\n /**\n * The panel CLOSES on a successful save, in every case.\n *\n * The OAuth branch above used to return without closing, so saving anything — appearance\n * included — left the dialog on screen whenever a saved MCP server merely *needed* a grant.\n * では設定ウィンドウが閉じる\". The hint is the whole message; keeping the dialog open only made\n * the behaviour differ by section.\n *\n * The button state is set FIRST and the close deferred: a state change on a component that is\n * already unmounting would never be painted, and the operator would see the dialog vanish\n * with no confirmation.\n */\n /**\n * COMMIT the appearance here, not on click.\n *\n * Everything the operator can see is already live (the preview pushed it); this makes it\n * survive a reload, which is what \"save settings\" means for every other section.\n */\n props.theme.commitAppearance(draftOf());\n props.theme.preview(null); // the committed state now paints itself\n setSaveState(\"saved\");\n // the draft IS the stored state now: closing must not revert what was just saved\n Object.assign(storedAppearance, draftOf());\n setTimeout(() => {\n setSaveState(\"idle\");\n props.onClose();\n }, 400);\n } catch (ex) {\n setErr((ex as Error).message);\n setSaveState(\"error\");\n setTimeout(() => setSaveState(\"idle\"), 1600);\n }\n };\n\n\n return (\n <Modal\n title=\"settings\"\n onClose={() => {\n /**\n * CLOSING DISCARDS an unsaved appearance preview.\n *\n * The preview writes the live theme so the choice is visible; without this, closing the\n * dialog would silently keep a change the operator never saved — the inconsistency that\n * \"save settings\" is supposed to resolve.\n */\n revertAppearance();\n props.onClose();\n }}\n >\n <form onsubmit={save} style=\"display:flex;flex-direction:column;gap:12px;min-height:0\">\n {/* A MENU, not one long column. With several providers — each holding\n several keys — the stacked form was a wall of inputs whose extent\n the operator could not see; reaching the task list meant scrolling past\n every credential. One section at a time, named on the left.\n\n The menu is a VERTICAL rail rather than a wrapping row: a row of five\n labels re-wrapped to two lines on a narrow dialog and pushed the panel\n down every time the window changed, which moved the content the operator\n was already reading. A rail keeps its own width and the panel's top edge\n fixed. */}\n <div class=\"cfgbody\">\n <nav class=\"cfgmenu\" aria-label=\"settings sections\">\n <For each={SECTIONS}>\n {(sec) => (\n <button\n type=\"button\"\n class={\"cfgmenu-item\" + (section() === sec.key ? \" on\" : \"\")}\n title={sec.hint}\n aria-current={section() === sec.key ? \"page\" : undefined}\n onclick={() => setSection(sec.key)}\n >\n <span class=\"cfgmenu-label\">{sec.label}</span>\n </button>\n )}\n </For>\n </nav>\n <div class=\"cfgpanel\">\n <fieldset classList={{ hide: section() !== \"providers\" }}>\n <legend>providers</legend>\n {/* Index keyed by position — editing a row must not recreate its\n input DOM and steal focus. For (keyed by identity) recreated\n the edited row on every keystroke (new object → new identity\n → unmount/remount → focus lost). Index keeps the same input\n element for the same index, preserving focus and cursor. */}\n <Index each={providers()}>\n {(p, i) => (\n <div class=\"cfgrow\">\n <input class=\"cfgname\" placeholder=\"name\" value={p().name} oninput={(e) => setProviders(providers().map((x, j) => (j === i ? { ...x, name: e.currentTarget.value } : x)))} />\n <input placeholder=\"https://…/v1\" value={p().baseUrl} oninput={(e) => setProviders(providers().map((x, j) => (j === i ? { ...x, baseUrl: e.currentTarget.value } : x)))} />\n <input placeholder=\"default model\" value={p().model} oninput={(e) => setProviders(providers().map((x, j) => (j === i ? { ...x, model: e.currentTarget.value } : x)))} />\n <button type=\"button\" class=\"danger\" title=\"remove provider\" onclick={() => setProviders(providers().filter((_, j) => j !== i))}>✕</button>\n {/* #170: several keys per provider, rotated round-robin. A\n rate-limited key is parked for a minute and the next one is\n used, so an exhausted key no longer stalls every agent on it.\n The first key is what anything reading the legacy `apiKey`\n sees, which is why order is preserved. */}\n <div class=\"cfgkeys\">\n <For each={p().apiKeys}>\n {(k, ki) => (\n <div class=\"cfgkeyrow\">\n <input\n placeholder={ki() === 0 ? \"api key\" : \"api key (backup)\"}\n type=\"password\"\n value={k}\n oninput={(e) =>\n setProviders(\n providers().map((x, j) =>\n j === i\n ? { ...x, apiKeys: x.apiKeys.map((v, m) => (m === ki() ? e.currentTarget.value : v)) }\n : x,\n ),\n )\n }\n />\n <Show when={p().apiKeys.length > 1}>\n <button\n type=\"button\"\n title=\"remove this key\"\n onclick={() =>\n setProviders(\n providers().map((x, j) =>\n j === i ? { ...x, apiKeys: x.apiKeys.filter((_, m) => m !== ki()) } : x,\n ),\n )\n }\n >−</button>\n </Show>\n </div>\n )}\n </For>\n <button\n type=\"button\"\n title=\"add another key for this provider — they are rotated round-robin, and a rate-limited key is skipped for a minute\"\n onclick={() =>\n setProviders(providers().map((x, j) => (j === i ? { ...x, apiKeys: [...x.apiKeys, \"\"] } : x)))\n }\n >+ key</button>\n </div>\n </div>\n )}\n </Index>\n <button type=\"button\" onclick={() => setProviders([...providers(), { name: \"\", baseUrl: \"\", apiKeys: [\"\"], model: \"\" }])}>+ add custom</button>\n <div style=\"display:flex;gap:6px;flex-wrap:wrap;margin-top:6px\">\n <span class=\"muted\" style=\"font-size:11.5px\">quick-add:</span>\n <For each={PROVIDER_PRESETS}>\n {(p) => (\n <button\n type=\"button\"\n title={`fill a ${p.label} row — ${p.url}${p.model ? ` (model: ${p.model})` : \"\"}`}\n onclick={() => {\n // re-click = update the existing entry instead of duplicating\n const rest = providers().filter((x) => x.name !== p.key);\n setProviders([...rest, { name: p.key, baseUrl: p.url, apiKeys: [\"\"], model: p.model }]);\n if (!defaultProvider()) setDefaultProvider(p.key);\n }}\n >+ {p.label}</button>\n )}\n </For>\n </div>\n <div><label style=\"display:flex;align-items:center;gap:6px;margin-top:6px\" title=\"agents without an explicit provider use this one\">\n default provider\n <select\n value={defaultProvider()}\n onchange={(e) => setDefaultProvider(e.currentTarget.value)}\n >\n <option value=\"\">(none — first provider wins)</option>\n <For each={providerNames()}>\n {(n) => <option value={n}>{n}</option>}\n </For>\n </select>\n </label></div>\n <Show when={staleDefaultProvider()}>\n <div class=\"muted\" style=\"font-size:11.5px;margin-top:4px\">\n ⚠ configured default provider <code>{staleDefaultProvider()}</code> has no provider row here\n {staleDefaultProvider() === cfgDefaultProvider()\n ? \" — the dropdown above cannot show it.\"\n : \" — it was replaced by your selection.\"}{\" \"}\n Add a provider named <code>{staleDefaultProvider()}</code> or pick a default below; otherwise agents\n fall back to the first provider.\n </div>\n </Show>\n </fieldset>\n\n {/* 🎨 appearance. Moved out of the sidebar's 🎨 popover: a theme is a PREFERENCE, so\n it belongs beside the other settings, and an editor (palette rows, a background\n picker) needs the room a popover does not have. */}\n <fieldset classList={{ hide: section() !== \"appearance\" }}>\n <legend>appearance</legend>\n\n <div class=\"cfggrid\">\n <label class=\"trow\">follow the system\n <input\n type=\"checkbox\"\n checked={themeAuto()}\n onchange={(e) => {\n setThemeAuto(e.currentTarget.checked);\n }}\n />\n </label>\n </div>\n {/* The per-mode pickers appear ONLY when following the system: that is the one\n case where two choices exist. It used to be inverted — turning \"follow the system\"\n OFF showed two pickers (so you chose a dark AND a light theme while following\n neither) and turning it ON showed a read-only sentence instead of letting you pick.\n The sentence was also redundant with the picker below it. */}\n <Show when={themeAuto()}>\n <div class=\"cfggrid\" style=\"margin-top:8px\">\n <label class=\"trow\">dark theme →\n <select\n class=\"w100\"\n value={sysDarkTheme()}\n onchange={(e) => {\n setSysDarkTheme(e.currentTarget.value);\n }}\n >\n <For each={customThemes().filter((t) => t.mode === \"dark\").map((t) => ({ key: t.id, label: `${t.label} (custom)` })).concat(THEMES.filter((t) => t.mode === \"dark\"))}>\n {(t) => <option value={t.key}>{t.label}</option>}\n </For>\n </select>\n </label>\n <label class=\"trow\">light theme →\n <select\n class=\"w100\"\n value={sysLightTheme()}\n onchange={(e) => {\n setSysLightTheme(e.currentTarget.value);\n }}\n >\n <For each={customThemes().filter((t) => t.mode === \"light\").map((t) => ({ key: t.id, label: `${t.label} (custom)` })).concat(THEMES.filter((t) => t.mode === \"light\"))}>\n {(t) => <option value={t.key}>{t.label}</option>}\n </For>\n </select>\n </label>\n </div>\n </Show>\n\n <h4 class=\"cfgsub\">themes</h4>\n {/* Grouped by LIGHT and DARK, as Misskey does — \"which theme do I want\" is almost\n always \"which dark theme\", so one mixed grid makes the eye filter the half it does\n not want. Custom themes appear in their own group first: they are what the operator\n just made, so they belong where the eye lands. */}\n <For each={[{ mode: \"dark\" as const, title: \"dark themes\" }, { mode: \"light\" as const, title: \"light themes\" }]}>\n {(group) => (\n /**\n * BOTH groups are always shown — including when \"follow the system\" is OFF.\n *\n * I once gated this to only the group matching the current appearance, reasoning that\n * with one slot a light card under a fixed dark theme was \"a theme you cannot\n * meaningfully have\". That was wrong, and the operator said so twice: \"follow system\n * オフならライト、ダーク問わず選択できるべき\".\n *\n * The premise was the bug. Picking a light theme while not following the system is\n * SUPPOSED to make the app light — the appearance control naming \"dark\" only\n * reflected the choice that was there before, not a constraint. Hiding the group\n * removed the only way to switch, so a light theme became unreachable unless the OS\n * happened to be light (which is what \"やっぱりライトテーマしかでない\" was reporting:\n * the surviving group was whichever one the gate happened to match).\n */\n <Show when={[...customThemes(), ...THEMES].some((t) => t.mode === group.mode)}>\n <div class=\"cfgsub\" style=\"margin-bottom:var(--space-1)\">{group.title}</div>\n <div class=\"themepick\">\n <For each={customThemes().filter((t) => t.mode === group.mode)}>\n {(t) => (\n <button\n type=\"button\"\n class={\"themecard\" + (themeCardChosen(t.id) ? \" on\" : \"\")}\n title={`${t.label} (custom)${t.backgroundImage ? \" · with a background image\" : \"\"}`}\n aria-pressed={themeCardChosen(t.id)}\n onclick={() => pickThemeCard(t.id, t.mode)}\n >\n <span class=\"themecard-preview\"><ThemePreview palette={t.palette} backgroundImage={t.backgroundImage} surfaceAlpha={t.surfaceAlpha} backgroundDim={t.backgroundDim} /></span>\n <span class=\"themecard-label\">{t.label} ★</span>\n </button>\n )}\n </For>\n <For each={THEMES.filter((t) => t.mode === group.mode)}>\n {(t) => (\n <button\n type=\"button\"\n class={\"themecard\" + (themeCardChosen(t.key) ? \" on\" : \"\")}\n title={`${t.label} (${t.mode})`}\n aria-pressed={themeCardChosen(t.key)}\n onclick={() => pickThemeCard(t.key, t.mode)}\n >\n <span class=\"themecard-preview\">\n <ThemePreview palette={presetPalette(t.key)} />\n </span>\n <span class=\"themecard-label\">{t.label}</span>\n </button>\n )}\n </For>\n </div>\n </Show>\n )}\n </For>\n\n <ThemeEditor\n themes={customThemes}\n activeId={fixedTheme()}\n paintedId={props.theme.paintedId()}\n onChange={(requested) => {\n /**\n * Persist FIRST, then adopt what was actually stored.\n *\n * The old order was `setCustomThemes(next)` then save, so a quota failure left\n * memory ahead of storage: the theme worked, looked saved, and vanished on the next\n * reload with only a transient toast. A background image is the only unbounded\n * field here, so an over-quota save retries without the images — losing a\n * wallpaper is much better than losing a palette — and only then reports failure,\n * in which case the on-screen state is rolled BACK so it matches what is stored.\n */\n let saved = saveCustomThemes(requested);\n let adopted = requested;\n if (!saved.ok) {\n const stripped = requested.map((t) =>\n t.backgroundImage\n ? {\n ...t,\n backgroundImage: undefined,\n backgroundDim: undefined,\n surfaceAlpha: undefined,\n backgroundImageBytes: undefined,\n }\n : t,\n );\n const retry = saveCustomThemes(stripped);\n if (retry.ok) {\n adopted = stripped;\n flashHint(\"storage was full — saved without the background image(s)\");\n } else {\n // nothing could be stored: keep the screen in step with disk rather than\n // showing a theme that a reload will silently drop\n flashHint(retry.error ?? \"could not save theme\");\n return;\n }\n }\n setCustomThemes(adopted);\n /**\n * Deleting a theme must not leave ANY of the three theme ids pointing at it.\n *\n * There are three places an id is stored — the fixed theme and the two per-mode\n * choices — and the old code only checked the first. With \"follow the system\" on,\n * the per-mode `<select>`s kept the dead id: `<select value=…>` with no matching\n * `<option>` silently displays the FIRST option while the state still held the dead\n * one, so the picker showed a theme that was not the one in use.\n *\n * Each falls back to a preset that still exists, and is written back to\n * localStorage so a reload agrees with the screen.\n */\n const alive = (id: string) =>\n adopted.some((t) => t.id === id) || THEMES.some((t) => t.key === id);\n if (!alive(fixedTheme())) {\n setFixedTheme(\"dark\");\n localStorage.setItem(\"teapot.theme\", \"dark\");\n }\n // the per-mode fallback keeps its APPEARANCE: a deleted dark theme must fall back\n // to a dark preset, not to whatever happens to be first\n if (!alive(sysDarkTheme())) {\n setSysDarkTheme(\"dark\");\n localStorage.setItem(\"teapot.theme.dark\", \"dark\");\n }\n if (!alive(sysLightTheme())) {\n setSysLightTheme(\"light\");\n localStorage.setItem(\"teapot.theme.light\", \"light\");\n }\n }}\n onPick={(id) => {\n /**\n * ADOPT the theme into whichever slot is PAINTED.\n *\n * `duplicatePreset()` and the editor's select both call this, and both say \"this is\n * the theme I am now working on\". Writing `teapot.theme` while \"follow the system\"\n * is on put it in a slot nothing reads, so the new copy was never painted — the\n * operator kept waiting for a visible result and then reported the whole flow as\n * \"follow the system を入れてるときにテーマ複製したりするとやっぱりちょっと変な挙動に\n * なる\".\n *\n * Following the system, the copy goes into the slot for ITS OWN appearance — the one\n * the OS is showing if they match, and the copy's own slot otherwise, so the operator\n * can still reach it by flipping the system appearance.\n */\n const mode =\n customThemes().find((t) => t.id === id)?.mode ??\n THEMES.find((t) => t.key === id)?.mode ??\n \"dark\";\n const target = slotForSelection(themeAuto(), mode);\n if (target.slot === \"dark\") setSysDarkTheme(id);\n else if (target.slot === \"light\") setSysLightTheme(id);\n else setFixedTheme(id);\n }}\n />\n </fieldset>\n\n <fieldset classList={{ hide: section() !== \"runtime\" }}>\n <legend>agent runtime</legend>\n <div class=\"cfgrow\">\n <label style=\"flex:1\">\n API password\n <input\n type=\"password\"\n class=\"w100\"\n placeholder={props.cfg.hasPassword ? \"(unchanged — type to replace)\" : \"(none — loopback only)\"}\n value={apiPassword()}\n oninput={(e) => {\n setApiPassword(e.currentTarget.value);\n setApiPasswordDirty(true);\n }}\n />\n </label>\n <span class=\"muted\" style=\"font-size:11.5px;max-width:34ch\">\n bearer token for /api. empty = loopback only.\n </span>\n </div>\n <div class=\"cfggrid\">\n <NumberField label=\"progress interval (min)\" value={intervalMin()} onValue={(v) => setIntervalMin(v)} hint=\"how often the harness asks for a progress report\" />\n <NumberField label=\"progress min chars\" value={minChars()} onValue={(v) => setMinChars(v)} hint=\"progress prompts wait for this much real output\" />\n <label title=\"auto-compact threshold in k tokens. Leave EMPTY to derive per model (75% of its context window) — recommended, since models differ wildly in window size. Set only to force an absolute cap across all models.\">\n compact budget (k tok)\n <input\n type=\"number\"\n min=\"0\"\n placeholder=\"(derive: 75% of window)\"\n value={ctxBudgetK() ?? \"\"}\n oninput={(e) => setCtxBudgetK(e.currentTarget.value === \"\" ? null : Number(e.currentTarget.value))}\n />\n </label>\n <NumberField label=\"context window (k tok)\" value={ctxWinK()} onValue={(v) => setCtxWinK(v)} hint=\"model's real window — 0/blank hides the % gauge\" />\n <NumberField label=\"max spawn depth\" value={maxDepth()} onValue={(v) => setMaxDepth(v)} hint=\"sub-agent nesting limit (0 = no spawning)\" />\n </div>\n {/* #161: opt-in because it DISCARDS information early by design. On a large\n window that is pure loss; on a 32k–262k model waiting for overflow means\n one huge cut instead of many small ones. */}\n <label class=\"cfgtoggle\" title=\"prune old tool output early (at 60% of the budget) instead of waiting for the window to fill. Meant for small-window models — on a large window it throws away context you had room for.\">\n <input\n type=\"checkbox\"\n checked={shortContext()}\n onchange={(e) => setShortContext(e.currentTarget.checked)}\n />\n short-context mode\n {/* no inline repeat of the tooltip: the label already carries the whole\n explanation, including the window range that makes it worth using */}\n </label>\n </fieldset>\n\n <fieldset classList={{ hide: section() !== \"mcp\" }}>\n <legend>MCP servers — external tools, shared by every agent</legend>\n {/* Tool discovery is the part that goes wrong, so `test` is a first-class\n control: it connects, lists, and reports the exact failure WITHOUT\n saving. Discovering on save would put the error on an agent's turn\n instead of on the row that caused it. */}\n <div class=\"muted\" style=\"font-size:11.5px;margin-bottom:8px\">\n each tool becomes <code class=\"mono\">mcp__server__tool</code> for every agent.\n saving connects them; the status shown here is live.\n </div>\n <Show\n when={mcpServers().length > 0}\n fallback={\n <div class=\"muted\" style=\"font-size:12.5px\">\n no MCP servers. add one below — a remote url, or a local command for stdio.\n </div>\n }\n >\n <Index each={mcpServers()}>\n {(srv, i) => {\n const st = () => mcpStates()[srv().name];\n const upd = (patch: Record<string, any>) =>\n setMcpServers(mcpServers().map((x, j) => (j === i ? { ...x, ...patch } : x)));\n return (\n <div class=\"cfgcol mcpcard\">\n <div class=\"cfgrow\">\n <input\n class=\"cfgname\"\n placeholder=\"name\"\n value={srv().name}\n oninput={(e) => upd({ name: e.currentTarget.value })}\n title=\"the name that appears inside mcp__<name>__ in tool names\"\n />\n <input\n placeholder=\"https://example.com/mcp (or leave empty for a stdio command)\"\n value={srv().url ?? \"\"}\n oninput={(e) => {\n upd({ url: e.currentTarget.value });\n /**\n * Detect OAuth from the URL alone, WITHOUT saving.\n *\n * Asked as \"OAuthのdetectはURLが入力されて数秒経ったら未保存でも検出してみると\n * かがいいと思う (未保存のMCPサーバーに対してOAuthまでした状態を後から保存すると\n * いうちょっとめんどくさいフローが発生しちゃうので要検討)\".\n *\n * `/api/mcp/test` already answers `needsOAuth` for an arbitrary config — it\n * never touches the saved list — so the probe costs nothing but a request,\n * and it means the 🔑 button can appear before a save/reopen round trip.\n *\n * Debounced because this fires per keystroke and every call is a real\n * network attempt. 700ms is long enough to finish typing a URL and short\n * enough to feel automatic.\n */\n const mine = e.currentTarget.value.trim();\n clearTimeout(urlProbeTimers[i]);\n if (!/^https?:\\/\\//.test(mine)) return;\n urlProbeTimers[i] = setTimeout(() => {\n void probeOAuth(i, { ...mcpServers()[i], url: mine });\n }, 700);\n }}\n />\n <label style=\"display:flex;gap:3px;align-items:center;white-space:nowrap;color:var(--dim);font-size:11px\">\n <input\n type=\"checkbox\"\n checked={srv().enabled !== false}\n onchange={(e) => upd({ enabled: e.currentTarget.checked })}\n />on\n </label>\n <button\n type=\"button\"\n class=\"danger\"\n onclick={() => setMcpServers(mcpServers().filter((_, j) => j !== i))}\n >✕</button>\n </div>\n <div class=\"cfgrow\">\n <select\n value={srv().transport ?? \"http\"}\n onchange={(e) => upd({ transport: e.currentTarget.value })}\n title=\"streamable HTTP is the current spec; legacy SSE is the 2024-11-05 handshake; stdio spawns a local process\"\n >\n <option value=\"http\">streamable http</option>\n <option value=\"sse\">legacy http+sse</option>\n <option value=\"stdio\">stdio (local command)</option>\n </select>\n <Show when={srv().transport === \"stdio\"}>\n <>\n <input\n placeholder=\"command (e.g. npx)\"\n value={srv().command ?? \"\"}\n oninput={(e) => upd({ command: e.currentTarget.value })}\n />\n <input\n placeholder=\"args, space separated\"\n value={(srv().args ?? []).join(\" \")}\n oninput={(e) =>\n upd({ args: e.currentTarget.value.split(\" \").filter(Boolean) })\n }\n />\n </>\n </Show>\n </div>\n {/* AUTH as a CHOICE, not a JSON textarea.\n \"headers as JSON\" was the only way to authenticate, reported as\n \"正直わかりやすいとは言い難い\": a bearer token meant knowing the header name,\n the \"Bearer \" prefix and JSON quoting, to do the one thing every server\n needs. The JSON box stays under \"advanced\" for anything unusual — the\n same shape open-webui uses (a select whose sibling region swaps). */}\n <div class=\"cfgrow\">\n <select\n /**\n * OAuth WINS over the header-derived kind: an authorized server has a\n * token in the server-side store, so `headers` is empty and the\n * derivation would say \"none\". Showing \"no auth\" while the 🔑 row says\n * authorization is required is the reported contradiction.\n */\n value={oauthState(String(srv().name ?? \"\")) ? \"oauth\" : (mcpAuthKind()[i] ?? \"none\")}\n onchange={(e) => {\n const kind = e.currentTarget.value as \"none\" | \"bearer\" | \"header\" | \"json\";\n setMcpAuthKind((m) => ({ ...m, [i]: kind }));\n // switching away must actually REMOVE the header, or the old token keeps\n // being sent and a 403 looks like a broken server\n if (kind === \"none\") upd({ headers: undefined });\n else if (kind === \"bearer\") {\n const v = mcpAuthValue()[i] ?? \"\";\n upd({ headers: v ? { Authorization: `Bearer ${v}` } : undefined });\n } else if (kind === \"header\") {\n const hname = mcpHeaderName()[i] ?? \"\";\n const v = mcpAuthValue()[i] ?? \"\";\n upd({ headers: hname && v ? { [hname]: v } : undefined });\n }\n }}\n title=\"how this server authenticates\"\n >\n {/**\n * An OAuth server is NOT \"no auth\", and showing it that way hid the one\n * fact that mattered: the dropdown said \"no auth\" while the panel's own\n * 🔑 row said authorization was required. Reported as \"MCPサーバーで\n * OAuthが検出されたのに No auth がメニューから選択されてるのはどうなの?\".\n *\n * The kind is derived from `headers`, and an OAuth grant lives in the\n * server-side token store instead — so headers were empty and the\n * derivation fell through to \"none\". The state is shown from `mcpOAuth`\n * (keyed by NAME, which is the server's identity) and is not selectable by\n * hand: it is a fact about the server, not a setting the operator picks.\n */}\n <Show when={oauthState(String(srv().name ?? \"\"))}>\n {(st) => (\n <option value=\"oauth\" selected>\n {st().authorized ? \"OAuth — authorized\" : \"OAuth — authorization needed\"}\n </option>\n )}\n </Show>\n <option value=\"none\">no auth</option>\n <option value=\"bearer\">bearer token</option>\n <option value=\"header\">custom header</option>\n <option value=\"json\">headers as JSON (advanced)</option>\n </select>\n <Show when={mcpAuthKind()[i] === \"bearer\"}>\n <input\n type=\"password\"\n placeholder=\"paste the token\"\n value={mcpAuthValue()[i] ?? \"\"}\n oninput={(e) => {\n const v = e.currentTarget.value;\n setMcpAuthValue((m) => ({ ...m, [i]: v }));\n upd({ headers: v ? { Authorization: `Bearer ${v}` } : undefined });\n }}\n title=\"sent as Authorization: Bearer <token>\"\n style=\"flex:1\"\n />\n </Show>\n <Show when={mcpAuthKind()[i] === \"header\"}>\n <input\n placeholder=\"header name\"\n value={mcpHeaderName()[i] ?? \"\"}\n oninput={(e) => {\n const hname = e.currentTarget.value;\n setMcpHeaderName((m) => ({ ...m, [i]: hname }));\n const v = mcpAuthValue()[i] ?? \"\";\n upd({ headers: hname && v ? { [hname]: v } : undefined });\n }}\n style=\"flex:0 1 150px\"\n />\n <input\n type=\"password\"\n placeholder=\"value\"\n value={mcpAuthValue()[i] ?? \"\"}\n oninput={(e) => {\n const v = e.currentTarget.value;\n setMcpAuthValue((m) => ({ ...m, [i]: v }));\n const hname = mcpHeaderName()[i] ?? \"\";\n upd({ headers: hname && v ? { [hname]: v } : undefined });\n }}\n style=\"flex:1\"\n />\n </Show>\n </div>\n <Show when={mcpAuthKind()[i] === \"json\"}>\n <div class=\"cfgrow\">\n <textarea\n class=\"mono\"\n rows={2}\n placeholder={'{\"Authorization\": \"Bearer …\", \"X-Team\": \"infra\"}'}\n value={mcpHeadersText()[i] ?? \"\"}\n oninput={(e) => {\n const t = e.currentTarget.value;\n setMcpHeadersText((m) => ({ ...m, [i]: t }));\n // parse eagerly so a typo is visible here, not as a 401 later\n if (!t.trim()) upd({ headers: undefined });\n else {\n try {\n const parsed = JSON.parse(t);\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new Error(\"not an object\");\n }\n upd({ headers: parsed });\n setMcpHeaderErr((m) => ({ ...m, [i]: \"\" }));\n } catch {\n setMcpHeaderErr((m) => ({ ...m, [i]: \"must be a JSON object — not applied\" }));\n }\n }\n }}\n title=\"static headers for every request. Use the bearer option unless the server needs something unusual.\"\n style=\"flex:1\"\n />\n </div>\n </Show>\n <div class=\"cfgrow\">\n <button\n type=\"button\"\n onclick={async () => {\n const patch = mcpServers()[i];\n if (!patch.name) {\n setMcpStatus((m) => ({ ...m, [i]: { kind: \"err\", text: \"give it a name first\" } }));\n return;\n }\n setMcpStatus((m) => ({ ...m, [i]: { kind: \"testing\", text: \"connecting…\" } }));\n const r = (await api(\"/api/mcp/test\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(patch),\n }).catch(() => null)) as\n | {\n ok?: boolean;\n tools?: { name: string; description?: string }[];\n error?: string;\n needsOAuth?: boolean;\n }\n | null;\n setMcpStatus((m) => ({\n ...m,\n [i]: r?.ok\n ? {\n kind: \"ok\",\n text: `${r.tools?.length ?? 0} tool${r.tools?.length === 1 ? \"\" : \"s\"}`,\n tools: r.tools ?? [],\n }\n : {\n kind: \"err\",\n text: r?.error ?? \"no response\",\n ...(r?.needsOAuth ? { needsOAuth: true } : {}),\n },\n }));\n // A failed test may be a MISSING GRANT rather than a wrong url.\n // The status endpoint reports what the connect attempt found, so\n // \"authorize\" appears without the operator diagnosing a 401.\n if (!r?.ok) await refreshMcpOAuth(patch.name);\n }}\n title=\"connect now and list the tools — nothing is saved\"\n >test</button>\n {/* OAuth: offer \"authorize\" when the 401 challenge said this\n server wants a grant. Without this the operator sees only\n \"error\" and has to know the difference between a bad header\n and a missing grant. */}\n <Show when={mcpOAuth()[String(srv().name ?? \"\").trim()]?.required && !mcpOAuth()[String(srv().name ?? \"\").trim()]?.authorized}>\n <button\n type=\"button\"\n class=\"archrestore\"\n onclick={() => void startMcpOAuth(i, srv())}\n title=\"start the OAuth flow: a browser tab opens, and the tools appear when you finish\"\n >🔑 authorize</button>\n </Show>\n <Show when={mcpOAuth()[String(srv().name ?? \"\").trim()]?.authorized}>\n <span class=\"mcpstate connected\" title=\"an OAuth access token is usable\">\n 🔑 authorized\n </span>\n <button\n type=\"button\"\n onclick={async () => {\n await api(\"/api/mcp/oauth/disconnect\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ name: srv().name }),\n }).catch(() => {});\n await refreshMcpOAuth(srv().name);\n setMcpStatus((m) => ({ ...m, [i]: { kind: \"ok\", text: \"disconnected\" } }));\n }}\n title=\"forget the stored grant (the refresh token is deleted)\"\n >disconnect</button>\n </Show>\n <Show when={st()}>\n <span\n class={\"mcpstate \" + (st()?.status ?? \"\")}\n title={st()?.lastError ?? \"\"}\n >\n {st()?.status === \"connected\"\n ? `● ${st()?.tools} tools`\n : st()?.status === \"error\"\n ? \"● error\"\n : st()?.status === \"disabled\"\n ? \"● off\"\n : \"● idle\"}\n </span>\n </Show>\n </div>\n <Show when={mcpHeaderErr()[i]}>\n <div class=\"muted\" style=\"font-size:11px;color:var(--warn)\">{mcpHeaderErr()[i]}</div>\n </Show>\n <Show when={mcpStatus()[i]}>\n {(st2) => (\n <div class={\"mcpresult \" + (st2().kind === \"err\" ? \"err\" : \"ok\")}>\n <div class=\"mcpresult-head\">\n <b>{st2().text}</b>\n <Show when={st2().needsOAuth}>\n <span class=\"muted\"> · needs a grant (🔑 authorize)</span>\n </Show>\n </div>\n {/* The TOOL LIST, not just the count.\n \"4 tools\" says nothing about whether this is the server you meant,\n or whether the tool you wanted is among them — a wrong URL and a\n working URL with the wrong scopes looked identical. The names\n answer \"did that do what I wanted\"; the description says which one\n to reach for. */}\n {/* A `details` because a server can expose dozens of tools and the list\n had no way to be put away — it stayed open under the row forever,\n pushing every other server down the panel. Closed by default: the\n count in the head already answers \"did it connect\". */}\n <Show when={(st2().tools?.length ?? 0) > 0}>\n <details class=\"mcptools-wrap\">\n <summary>show {st2().tools?.length} tool{st2().tools?.length === 1 ? \"\" : \"s\"}</summary>\n <ul class=\"mcptools\">\n <For each={st2().tools ?? []}>\n {(t2) => (\n <li title={t2.description ?? \"\"}>\n <code class=\"mono\">{t2.name}</code>\n <Show when={t2.description}>\n <span class=\"mcptool-desc\">{t2.description}</span>\n </Show>\n </li>\n )}\n </For>\n </ul>\n </details>\n </Show>\n </div>\n )}\n </Show>\n </div>\n );\n }}\n </Index>\n </Show>\n <button\n type=\"button\"\n onclick={() => setMcpServers([...mcpServers(), { name: \"\", url: \"\", transport: \"http\", enabled: true }])}\n >+ add MCP server</button>\n </fieldset>\n\n <fieldset classList={{ hide: section() !== \"tasks\" }}>\n <legend>scheduled tasks</legend>\n <Show when={tasks().length > 0}>\n <Index each={tasks()}>\n {(t, i) => (\n <div class=\"cfgcol\">\n <div class=\"cfgrow\">\n <input placeholder=\"id\" value={t().id} oninput={(e) => setTasks(tasks().map((x, j) => (j === i ? { ...x, id: e.currentTarget.value } : x)))} />\n <input placeholder=\"agent id\" value={t().agent} oninput={(e) => setTasks(tasks().map((x, j) => (j === i ? { ...x, agent: e.currentTarget.value } : x)))} />\n <input placeholder=\"every 30m / cron\" value={t().schedule} oninput={(e) => setTasks(tasks().map((x, j) => (j === i ? { ...x, schedule: e.currentTarget.value } : x)))} />\n <label style=\"display:flex;gap:3px;align-items:center;white-space:nowrap;color:var(--dim);font-size:11px\">\n <input type=\"checkbox\" checked={!!t().forked} onchange={(e) => setTasks(tasks().map((x, j) => (j === i ? { ...x, forked: e.currentTarget.checked } : x)))} />fork\n </label>\n <button type=\"button\" class=\"danger\" onclick={() => setTasks(tasks().filter((_, j) => j !== i))}>✕</button>\n </div>\n <textarea rows={2} placeholder=\"prompt to send\" value={t().prompt} oninput={(e) => setTasks(tasks().map((x, j) => (j === i ? { ...x, prompt: e.currentTarget.value } : x)))} />\n </div>\n )}\n </Index>\n </Show>\n <button type=\"button\" onclick={() => setTasks([...tasks(), { id: \"\", agent: agentIds()[0] ?? \"\", schedule: \"every 30m\", prompt: \"\" }])}>+ add task</button>\n </fieldset>\n\n <fieldset classList={{ hide: section() !== \"archive\" }}>\n <legend>archived agents — restore, or delete for good</legend>\n {/* Archived entries keep their config and their session history. The\n distinction the UI must make obvious is which of the two buttons is\n irreversible, so DELETE states exactly what it destroys. */}\n <Show\n when={archivedTop().length > 0}\n fallback={\n <div class=\"muted\" style=\"font-size:12.5px\">\n nothing archived. 🗄 archive in the controls panel puts an agent away\n without losing its history.\n </div>\n }\n >\n <For each={archivedTop()}>\n {(a) => (\n <div class=\"cfgrow archrow\">\n <div class=\"archmain\">\n <b>{a.id}</b>\n <span class=\"muted\">\n {a.sessions} session{a.sessions === 1 ? \"\" : \"s\"}\n {(a.subs ?? 0) > 0\n ? ` · +${a.subs} sub-agent${a.subs === 1 ? \"\" : \"s\"} (restored together)`\n : \"\"}\n {a.archivedAt ? ` · archived ${relTime(new Date(a.archivedAt).toISOString())}` : \"\"}\n </span>\n <span class=\"muted mono ellip\" title={a.workspace}>{a.workspace}</span>\n </div>\n <button\n type=\"button\"\n class=\"archrestore\"\n onclick={async () => {\n const r = (await api(`/api/agents/${a.id}/restore`, { method: \"POST\" }).catch(\n () => null,\n )) as { live?: boolean; ids?: string[] } | null;\n await refreshArchived();\n // `onSaved` re-fetches the agent list, so the restored agent\n // reappears in the controls panel without a reload\n props.onSaved();\n const extra = (r?.ids?.length ?? 1) - 1;\n flashHint(\n (r?.live === false\n ? `restored ${a.id} — it could not be started (check its provider)`\n : `restored ${a.id}`) +\n (extra > 0 ? ` + ${extra} sub-agent${extra === 1 ? \"\" : \"s\"}` : \"\"),\n );\n }}\n title=\"bring it back and start it again — its history was never touched\"\n >↩ restore</button>\n <button\n type=\"button\"\n class=\"danger\"\n onclick={async () => {\n // The count comes from the server's own listing, so the\n // warning names a real number rather than a guess.\n if (\n !confirm(\n `PERMANENTLY DELETE ${a.id}?\\n\\n` +\n `${a.sessions} session${a.sessions === 1 ? \"\" : \"s\"} of history will be ` +\n \"erased from disk along with the config entry. This cannot be undone \" +\n \"— archiving was the reversible option.\",\n )\n )\n return;\n await api(`/api/agents/${a.id}/purge`, { method: \"DELETE\" }).catch(() => {});\n await refreshArchived();\n props.onSaved();\n flashHint(`deleted ${a.id} for good`);\n }}\n title=\"erase the config entry AND every session directory — irreversible\"\n >🗑 delete</button>\n </div>\n )}\n </For>\n </Show>\n </fieldset>\n\n <fieldset classList={{ hide: section() !== \"agents\" }}>\n <legend>agents (read-only — edit config file or use +)</legend>\n <For each={props.cfg.agents ?? []}>\n {(a: any) => (\n <div class=\"cfgrow\">\n <b>{a.id}</b><span class=\"muted\">{a.workspace}</span>\n <Show when={a.parent}><span class=\"muted\">🧩 sub of @{a.parent}</span></Show>\n </div>\n )}\n </For>\n </fieldset>\n\n <fieldset classList={{ hide: section() !== \"update\" }}>\n <legend>live update</legend>\n <div class=\"cfgrow\">\n <span class=\"muted\">current version: {props.cfg.version ?? \"unknown\"}</span>\n <button\n type=\"button\"\n onclick={async (e) => {\n try {\n setErr(\"\");\n const btn = e.currentTarget as HTMLButtonElement;\n btn.disabled = true;\n btn.textContent = \"updating…\";\n const res = await api(\"/api/update/restart\", { method: \"POST\" });\n if (!res.ok) throw new Error((await res.json()).error ?? \"restart failed\");\n /**\n * Wait for the NEW image to answer, then reload.\n *\n * Three signals are checked together because no single one is enough:\n *\n * - it ANSWERED at all: during the old handover the port was dead, and\n * reloading into a dead port was #35;\n * - a DIFFERENT version: the usual case, and `__APP_VERSION__` was baked into\n * this bundle at build time, so a new server is genuinely distinguishable;\n * - a FRESH uptime: a restart that did not bump the version (a local build, a\n * code change shipped under the same number) would otherwise spin for the full\n * timeout even though the server was healthy. Before the request the uptime\n * was large; after it, it must be small — that is the true \"it restarted\".\n *\n * is against the value read just before the POST.\n */\n btn.textContent = \"restarting…\";\n let beforeUptime: number | null = null;\n let reloaded = false;\n for (let i = 0; i < 120 && !reloaded; i++) {\n await new Promise((r) => setTimeout(r, 1000));\n try {\n const v = (await api(\"/api/version\")) as {\n version?: string;\n uptimeSeconds?: number;\n };\n if (!v.version) continue;\n if (beforeUptime === null) beforeUptime = v.uptimeSeconds ?? null;\n const restarted =\n v.version !== __APP_VERSION__ ||\n (typeof v.uptimeSeconds === \"number\" &&\n beforeUptime !== null &&\n v.uptimeSeconds < beforeUptime);\n if (restarted) {\n reloaded = true;\n window.location.reload();\n }\n } catch {\n /* the port is briefly down mid-update — keep polling */\n }\n }\n if (!reloaded) throw new Error(\"restart timeout — new server did not come up\");\n } catch (ex) {\n setErr((ex as Error).message);\n } finally {\n (e.currentTarget as HTMLButtonElement).disabled = false;\n (e.currentTarget as HTMLButtonElement).textContent = \"update & restart\";\n }\n }}\n class=\"primarybtn\"\n >\n update & restart\n </button>\n <span class=\"muted\" style=\"margin-left:8px;font-size:12px\">gracefully stops all agents, spawns new process, then reloads this page</span>\n </div>\n </fieldset>\n\n <fieldset classList={{ hide: section() !== \"skills\" }}>\n <legend>skills</legend>\n {/**\n * READ-ONLY: a skill is a file the agent writes while working, and editing it here would\n * be a second writer racing `save_skill`. The file stays the source of truth.\n */}\n <Show\n when={props.skills.length > 0}\n fallback={\n <div class=\"muted\">\n {props.hasSelection\n ? \"this session has no skills yet — the agent saves them with save_skill once a procedure proves itself\"\n : \"select a session to see the skills available to it\"}\n </div>\n }\n >\n <div class=\"skilllist\">\n <For each={props.skills}>\n {(s) => {\n /**\n * A skill row EXPANDS to show the playbook.\n *\n * The list alone answered \"what is there\" but not \"what does it say\", and the\n * body is the whole point of a skill — \"スキルの内容を読みたい\". Fetched on\n * demand rather than included in the list response, because a body runs to tens\n * of KB and the / palette uses the same list.\n */\n const [open, setOpen] = createSignal(false);\n const [body, setBody] = createSignal<string | null>(null);\n const [err, setErr] = createSignal(\"\");\n const toggle = async () => {\n if (open()) return setOpen(false);\n setOpen(true);\n if (body() !== null || !props.agentId) return;\n try {\n const r = await api(\n `/api/agents/${props.agentId}/skills/${encodeURIComponent(s.name)}`,\n );\n setBody(String(r.text ?? \"\"));\n } catch (ex) {\n setErr((ex as Error).message);\n }\n };\n return (\n <div classList={{ skillrow: true, open: open() }}>\n <button type=\"button\" class=\"skillhead\" onclick={toggle} title=\"show the playbook\">\n <span class=\"skillcaret\">{open() ? \"▾\" : \"▸\"}</span>\n <b class=\"mono\">{s.name}</b>\n <span class=\"muted\">{s.description}</span>\n </button>\n <Show when={open()}>\n <Show\n when={body() !== null}\n fallback={<div class=\"muted skillbody\">{err() || \"loading…\"}</div>}\n >\n {/* RENDERED markdown, not a <pre> of the raw file: a SKILL.md is\n prose + headings + fenced code, and showing its own `##` markers was\n half of \"適切な折り返しと本文のシンタックスハイライトも実装して\".\n `renderMarkdown` is the same renderer the timeline uses, so a skill\n reads exactly like a message. */}\n {/* cached: a skill body is up to hundreds of KB and re-rendering it on\n every parent update would be wasteful, exactly as for timeline rows */}\n <div class=\"skillbody\" innerHTML={renderMarkdownCached(String(body() ?? \"\"))} />\n </Show>\n </Show>\n </div>\n );\n }}\n </For>\n </div>\n </Show>\n </fieldset>\n\n <fieldset classList={{ hide: section() !== \"help\" }}>\n <legend>help</legend>\n {/* The cheat-sheet and the toggle explanations live here rather than in the main UI:\n they are read once, then only get in the way. */}\n <div class=\"helpsec\">\n <h4 class=\"cfgsub\">this host</h4>\n {/* Which of the OPTIONAL native tools this machine actually has. A feature that\n silently does nothing when a binary is missing is indistinguishable from a broken\n one, and this is the only place the answer is visible. */}\n <div class=\"featgrid\">\n <div class=\"featrow\">\n <b>image downscaling</b>\n <span class=\"muted\">\n {props.features\n ? props.features.imageResize.available\n ? `on — ${props.features.imageResize.tool}, long edge ≤ ${props.features.imageResize.maxEdge}px`\n : \"off — no ffmpeg / ImageMagick found; uploads are served as-is\"\n : \"checking…\"}\n </span>\n </div>\n <div class=\"featrow\">\n <b>terminal pty</b>\n <span class=\"muted\">\n {props.features\n ? props.features.pty.available\n ? `on — ${props.features.pty.provider}`\n : \"off — no pty provider; terminals run on plain pipes (no resize)\"\n : \"checking…\"}\n </span>\n </div>\n </div>\n </div>\n <div class=\"helpsec\">\n <h4 class=\"cfgsub\">keyboard</h4>\n <div class=\"helprow\"><kbd>enter</kbd><span>send (shift+enter for a newline)</span></div>\n <div class=\"helprow\"><span class=\"kbdgroup\"><kbd>↑</kbd><kbd>↓</kbd></span><span>move between sessions</span></div>\n <div class=\"helprow\"><kbd>/</kbd><span>command palette — commands and focus</span></div>\n <div class=\"helprow\"><kbd>t</kbd><span>open the terminal panel</span></div>\n <div class=\"helprow\"><kbd>d</kbd><span>toggle the details panel</span></div>\n <div class=\"helprow\"><kbd>esc</kbd><span>interrupt the running turn</span></div>\n </div>\n\n <div class=\"helpsec\">\n <h4 class=\"cfgsub\">what the toggles do</h4>\n <div class=\"helprow\">\n <b>auto-continue</b>\n <span>\n fires after a round only when all hold: the toggle is on, a goal is set and its\n status is <code>active</code>, and the round ended cleanly (not an error, not\n stopped). It stops when the goal is marked done, or when you press ■ stop.\n Sending any prompt starts an idle agent regardless.\n </span>\n </div>\n <div class=\"helprow\">\n <b>auto-compact</b>\n <span>\n when the live context passes the budget shown under 📊 runtime, older turns are\n summarized into notes and the recent stretch is kept verbatim, so work continues\n without losing the thread. Off means you compact by hand (<code>/compact</code>).\n </span>\n </div>\n <div class=\"helprow\">\n <b>messages while it works</b>\n <span>\n anything you send queues up and is handed to the model at its next turn\n boundary — the timeline shows it as \"pending (queued)…\" until then. Withdraw it\n with ✕ cancel while it is still queued.\n </span>\n </div>\n <div class=\"helprow\">\n <b>👻 ghost sessions</b>\n <span>\n a session whose workspace directory no longer exists on disk. The session log is\n intact — recreate the directory and it stops being a ghost.\n </span>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n\n {/* The footer sits OUTSIDE the two columns and outside the scroll area, so\n SAVE is always reachable no matter how long the visible section is —\n previously it scrolled away with the form and the operator had to reach\n the bottom to commit anything. */}\n <div class=\"cfgfoot\">\n <Show when={err()}><span style=\"color:var(--err);font-size:13px\">{err()}</span></Show>\n {/**\n * The button reports its own outcome, like the model panel's apply.\n *\n * Reported: \"設定のsaveが適用されたのかわかりにくいのでmodelパネルのapplyと同じ感じに\".\n * The label is fixed-width and cannot wrap (see `.cfgsave`), so changing it cannot\n * resize the footer — \"✓ applied\" once grew this button vertically.\n */}\n <button\n type=\"submit\"\n classList={{\n cfgsave: true,\n saved: saveState() === \"saved\",\n error: saveState() === \"error\",\n }}\n disabled={saveState() === \"saving\"}\n >\n {saveState() === \"saving\"\n ? \"saving…\"\n : saveState() === \"saved\"\n ? \"✓ saved\"\n : saveState() === \"error\"\n ? \"✕ failed\"\n : \"save settings\"}\n </button>\n </div>\n </form>\n </Modal>\n );\n}\n","/* ---------- workspace file tree ---------- */\n\nexport interface TreeNode {\n name: string;\n path: string;\n dir: boolean;\n size?: number;\n ignored?: boolean;\n}\n\nexport type MediaKind = \"image\" | \"video\" | \"audio\";\nexport const IMAGE_EXT = new Set([\"png\", \"jpg\", \"jpeg\", \"gif\", \"webp\", \"svg\", \"bmp\", \"ico\", \"avif\"]);\nexport const VIDEO_EXT = new Set([\"mp4\", \"webm\", \"mov\", \"mkv\", \"avi\", \"m4v\"]);\nexport const AUDIO_EXT = new Set([\"mp3\", \"wav\", \"ogg\", \"m4a\", \"flac\", \"aac\", \"opus\"]);\nexport function ficon(name: string): string {\n const ext = name.split(\".\").pop()?.toLowerCase() ?? \"\";\n const mk = mediaKindOf(name);\n if (mk === \"image\") return \"🖼\";\n if (mk === \"video\") return \"🎬️\";\n if (mk === \"audio\") return \"🎵\";\n if ([\"ts\", \"tsx\", \"mts\", \"cts\"].includes(ext)) return \"🟦\";\n if ([\"js\", \"mjs\", \"cjs\", \"jsx\"].includes(ext)) return \"🟨\";\n if (ext === \"json\" || ext === \"jsonc\") return \"🧾\";\n if (ext === \"md\" || ext === \"mdx\" || ext === \"markdown\") return \"📝\";\n if (ext === \"css\" || ext === \"scss\" || ext === \"less\") return \"🎨\";\n if (ext === \"html\" || ext === \"htm\" || ext === \"svg\") return \"🌐️\";\n if ([\"py\", \"pyi\"].includes(ext)) return \"🐍\";\n if (ext === \"rs\") return \"🦀\";\n if (ext === \"go\") return \"🐹\";\n if (ext === \"java\" || ext === \"kt\" || ext === \"kts\") return \"☕️\";\n if (ext === \"rb\") return \"💎\";\n if (ext === \"php\") return \"🐘\";\n if (ext === \"c\" || ext === \"h\" || ext === \"cpp\" || ext === \"hpp\" || ext === \"cc\") return \"🧩\";\n if (ext === \"sh\" || ext === \"bash\" || ext === \"zsh\" || ext === \"fish\") return \"🐚\";\n if (ext === \"sql\") return \"🗄\";\n if (ext === \"yml\" || ext === \"yaml\" || ext === \"toml\" || ext === \"ini\" || ext === \"conf\") return \"⚙️\";\n if (ext === \"lock\") return \"🔒️\";\n if (name === \"Dockerfile\" || ext === \"dockerfile\") return \"🐳\";\n if (ext === \"zip\" || ext === \"gz\" || ext === \"tar\" || ext === \"tgz\" || ext === \"bz2\") return \"📦\";\n if (ext === \"pdf\") return \"📕\";\n if (ext === \"txt\" || ext === \"log\") return \"📄\";\n return \"·\";\n}\n\nexport function mediaKindOf(path: string): MediaKind | null {\n const ext = path.split(\".\").pop()?.toLowerCase() ?? \"\";\n if (IMAGE_EXT.has(ext)) return \"image\";\n if (VIDEO_EXT.has(ext)) return \"video\";\n if (AUDIO_EXT.has(ext)) return \"audio\";\n return null;\n}\n\n/* ---------- per-agent file-panel UI state (remount-proof) ----------\n * Preview popups / expanded dirs used to live INSIDE FilesPanel. Any parent\n * re-render that remounted the panel (agent snapshot churn re-evaluating the\n * keyed <Show>) wiped them: an open file popup vanished mid-read and the\n * tree collapsed. Keeping the state in a module-level store keyed by agent\n * makes it survive remounts; only a REAL agent switch starts fresh. */\nexport type FileUiState = {\n expanded: Set<string>;\n preview: { path: string; content: string; binary?: boolean; truncated?: boolean } | null;\n media: { path: string; kind: MediaKind } | null;\n viewMode: \"code\" | \"edit\" | \"md\" | \"media\";\n};\nexport const fileUi = new Map<string, FileUiState>();\nexport const fileUiFor = (agentId: string): FileUiState => {\n let s = fileUi.get(agentId);\n if (!s) {\n s = { expanded: new Set(), preview: null, media: null, viewMode: \"code\" };\n fileUi.set(agentId, s);\n }\n return s;\n};\n","import { For, Show, createEffect, createSignal, onCleanup } from \"solid-js\";\nimport { api } from \"../lib/api\";\nimport { flashHint } from \"../lib/flash\";\nimport { IconBtn, Modal } from \"./chrome\";\nimport { CodePreview } from \"./settings-parts\";\nimport { renderMarkdown } from \"../md\";\nimport { highlightChunks } from \"../lib/shiki\";\nimport { ficon, fileUiFor, mediaKindOf, type FileUiState, type TreeNode } from \"../lib/file-tree\";\nimport { fmtK } from \"../lib/timeline-row\";\n\n\nexport function FilesPanel(props: { agentId: string; workspace: string }) {\n const ui = fileUiFor(props.agentId);\n // path → lazily fetched child listing (\"\" = workspace root)\n const [kids, setKids] = createSignal<Map<string, TreeNode[]>>(new Map());\n const [expanded, setExpandedRaw] = createSignal<Set<string>>(ui.expanded);\n // every preview/media/mode write mirrors into `ui` so a remount of this\n // panel (parent re-render churn) restores the open popup instead of losing it\n const [preview, setPreviewRaw] = createSignal(ui.preview);\n const setPreview = (v: FileUiState[\"preview\"]) => { ui.preview = v; setPreviewRaw(v); };\n const setExpanded = (v: Set<string>) => { ui.expanded = v; setExpandedRaw(v); };\n const [media, setMediaRaw] = createSignal(ui.media);\n const setMedia = (v: FileUiState[\"media\"]) => { ui.media = v; setMediaRaw(v); };\n const [viewMode, setViewModeRaw] = createSignal(ui.viewMode);\n const setViewMode = (v: FileUiState[\"viewMode\"]) => { ui.viewMode = v; setViewModeRaw(v); };\n const [err, setErr] = createSignal(\"\");\n // gitignored files: \"dim\" (default) | \"hide\" | \"show\"\n const [ignoreMode, setIgnoreMode] = createSignal(\n localStorage.getItem(\"teapot.ignoreMode\") ?? \"dim\",\n );\n const cycleIgnoreMode = () => {\n const order = [\"dim\", \"hide\", \"show\"] as const;\n const next = order[(order.indexOf(ignoreMode() as any) + 1) % 3];\n setIgnoreMode(next);\n localStorage.setItem(\"teapot.ignoreMode\", next);\n };\n /** filter helper per current mode */\n // \"hide\" removes ignored entries entirely — INCLUDING ignored directories\n // (node_modules/, dist/…). The old `!n.dir` exception kept ignored dirs\n // visible, which read as the toggle being broken. Expanding a hidden dir is\n // still possible via 🙈→👁 if ever needed.\n const ignoreFilter = (n: TreeNode) => (ignoreMode() === \"hide\" ? !n.ignored : true);\n // show dotfiles — also persisted; toggling refetches the open dirs\n const [showHidden, setShowHidden] = createSignal(\n localStorage.getItem(\"teapot.showHidden\") === \"1\",\n );\n const toggleHidden = () => {\n const next = !showHidden();\n // Fetch FIRST with the new flag, then flip the signal and patch the map\n // in place — flipping before the fetch landed left the tree showing its\n // old rows under a new filter (or nothing at all while in flight), which\n // collapsed .filebox and visibly reflowed the whole right panel.\n const targets = [\"\", ...expanded()];\n void Promise.all(targets.map(async (p) => ({ p, rows: await fetchDirWith(p, next) })))\n .then((results) => {\n setShowHidden(next);\n localStorage.setItem(\"teapot.showHidden\", next ? \"1\" : \"0\");\n // merge (not replace): unchanged rows keep their object identity, so\n // the toggle no longer rebuilds every visible row\n for (const { p, rows } of results) if (rows) mergeKids(p, rows);\n });\n };\n\n const parseEntries = (parentPath: string, list: any[]): TreeNode[] =>\n list.map((e) => ({\n name: String(e.name),\n path: parentPath ? `${parentPath}/${e.name}` : String(e.name),\n dir: !!e.dir,\n ...(typeof e.size === \"number\" ? { size: e.size } : {}),\n ...(e.ignored ? { ignored: true } : {}),\n }));\n\n async function fetchDir(path: string): Promise<TreeNode[] | null> {\n return fetchDirWith(path, showHidden());\n }\n\n /** same, but with an explicit dotfiles flag (used by the toggle's pre-fetch) */\n async function fetchDirWith(path: string, hidden: boolean): Promise<TreeNode[] | null> {\n try {\n const qs = new URLSearchParams();\n if (path) qs.set(\"path\", path);\n if (hidden) qs.set(\"hidden\", \"1\");\n const r = await api(\n `/api/agents/${props.agentId}/tree?${qs.toString()}`,\n );\n return parseEntries(path, r.entries ?? []);\n } catch (ex) {\n setErr((ex as Error).message);\n return null;\n }\n }\n\n // reset & load the root whenever a DIFFERENT agent is selected. The guard\n // matters: agent snapshots update on every poll/event burst, and without it\n // each update cleared + re-fetched the whole tree (visible flicker and a\n // pointless /tree request per snapshot).\n // Merge fetched rows into the cache WITHOUT replacing row objects that are\n // unchanged (same path+dir+size). Solid's <For> diffs by reference: handing\n // it brand-new TreeNode objects on every refresh tore down and rebuilt the\n // whole visible list — the \"tree flickers on refresh\" bug.\n const mergeKids = (path: string, rows: TreeNode[]) =>\n setKids((prev) => {\n const old = prev.get(path);\n if (!old) return new Map(prev).set(path, rows);\n /**\n * Order comes from the FRESH response, identity from the previous row.\n *\n * This walked `old` and looked each entry up in `rows`, so the cached ORDER was preserved and\n * the server's sort never took effect on a refresh — reloading a directory left it in whatever\n * order it had first been read (reported: \"リロードを重ねた結果…ディレクトリ先、アルファベット順\n * オーダーになってない\"). The reference-preserving trick below is about avoiding remounts, not\n * about ordering: map over `rows` and reuse the previous object when it is equivalent.\n */\n const byPath = new Map(old.map((o) => [o.path, o]));\n const merged = rows.map((fresh) => {\n const o = byPath.get(fresh.path);\n // keep the previous object when nothing changed → no remount\n return o && o.dir === fresh.dir && o.size === fresh.size &&\n o.ignored === fresh.ignored && o.name === fresh.name\n ? o\n : fresh;\n });\n // drop entries that vanished from disk — but never the one being previewed\n const kept = merged.filter((m) => rows.some((r) => r.path === m.path) || ui.preview?.path === m.path);\n const next = new Map(prev);\n next.set(path, kept);\n return next;\n });\n\n let kidsFor = \"\";\n createEffect(() => {\n const id = props.agentId;\n if (id === kidsFor) return; // same agent — keep the loaded tree as-is\n kidsFor = id;\n // a REAL agent switch starts a fresh view; a mere panel remount keeps\n // everything (state lives in `ui`, see fileUiFor above)\n setExpanded(new Set<string>());\n setPreview(null);\n setMedia(null);\n setKids(new Map());\n void fetchDir(\"\").then((rows) => {\n if (rows && kidsFor === id) setKids(new Map([[ \"\", rows ]]));\n });\n });\n\n const toggleDir = async (node: TreeNode) => {\n const next = new Set<string>(expanded());\n if (next.has(node.path)) {\n next.delete(node.path);\n setExpanded(next);\n return;\n }\n next.add(node.path);\n setExpanded(next);\n if (!kids().has(node.path)) {\n const rows = await fetchDir(node.path);\n if (rows) mergeKids(node.path, rows);\n }\n };\n\n const [hlHtml, setHlHtml] = createSignal(\"\");\n const [hlPending, setHlPending] = createSignal(false);\n // editBuf stays local — it is transient typing state tied to one popup\n const [editBuf, setEditBuf] = createSignal(\"\");\n const [saving, setSaving] = createSignal(false);\n const isMd = (path: string) => /\\.(md|markdown|mdx)$/i.test(path);\n let hlRun = 0;\n const startHighlighting = async (p: { path: string; content: string; truncated?: boolean }) => {\n const run = ++hlRun;\n setHlHtml(\"\");\n setHlPending(true);\n try {\n const { highlightChunks } = await import(\"../lib/shiki\");\n for await (const chunk of highlightChunks(p.path, p.content)) {\n if (hlRun !== run) return;\n setHlHtml((prev) => prev + chunk);\n }\n } catch {\n if (hlRun === run) setHlHtml(\"\"); // give up → plain fallback\n } finally {\n if (hlRun === run) setHlPending(false);\n }\n };\n onCleanup(() => { hlRun++; });\n\n const openFileWith = async (\n node: TreeNode,\n mode: \"code\" | \"edit\" | \"md\",\n ) => {\n // media files stream from the raw endpoint instead of text preview\n const mk = mediaKindOf(node.path);\n if (mk) {\n setPreview({ path: node.path, content: \"\", binary: true });\n setMedia({ path: node.path, kind: mk });\n setViewMode(\"media\");\n return;\n }\n try {\n const r = await api(\n `/api/agents/${props.agentId}/file?path=${encodeURIComponent(node.path)}`,\n );\n setMedia(null);\n setPreview({ path: node.path, content: r.content ?? \"\", binary: r.binary, truncated: r.truncated });\n setEditBuf(r.content ?? \"\");\n setViewMode(r.binary ? \"code\" : mode);\n if (!r.binary && mode !== \"md\") {\n startHighlighting({ path: node.path, content: r.content ?? \"\", truncated: r.truncated });\n }\n } catch (ex) {\n flashHint(`open failed: ${(ex as Error).message}`);\n }\n };\n\n /** PUT the edited buffer back; on conflict offer to load the disk version */\n const saveFile = async () => {\n const pv = preview();\n if (!pv || saving()) return;\n setSaving(true);\n try {\n await api(`/api/agents/${props.agentId}/file?path=${encodeURIComponent(pv.path)}`, {\n method: \"PUT\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ content: editBuf(), baseContent: pv.content }),\n });\n setPreview({ ...pv, content: editBuf() }); // new baseline for future conflicts\n flashHint(`saved ${pv.path}`);\n } catch (ex) {\n const raw = (ex as { payload?: unknown }).payload;\n const conflict =\n raw && typeof raw === \"object\" && (raw as any).error === \"file changed on disk\"\n ? (raw as { current?: string })\n : null;\n if (conflict?.current !== undefined) {\n // offer the fresh disk content instead of throwing away the save\n const take = confirm(\n \"This file changed on disk since you opened it.\\n\" +\n \"OK = load the disk version into the editor (your edits are discarded)\\n\" +\n \"Cancel = keep editing your copy\",\n );\n if (take) {\n setEditBuf(conflict.current!);\n setPreview({ ...pv, content: conflict.current! });\n flashHint(\"loaded the current file from disk\");\n } else {\n flashHint(\"kept your edits — use Save As via bash to force-write\");\n }\n } else {\n flashHint(`save failed: ${(ex as Error).message}`);\n }\n } finally {\n setSaving(false);\n }\n };\n\n const isEditable = (pv: { binary?: boolean; truncated?: boolean }) =>\n !pv.binary && !pv.truncated;\n\n const row = (node: TreeNode, depth: number): any => (\n <>\n <div\n class={\n \"filerow\" + (node.dir ? \" isdir\" : \"\") +\n (node.ignored && ignoreMode() === \"dim\" ? \" gitignored\" : \"\")\n }\n style={`padding-left:${depth * 13 + 8}px`}\n onclick={() => (node.dir ? void toggleDir(node) : void openFileWith(node, \"code\"))}\n title={node.dir ? `browse ${node.path}` : `preview ${node.path}`}\n >\n <span class=\"ficon\">{node.dir ? (expanded().has(node.path) ? \"▾\" : \"▸\") : ficon(node.name)}</span>\n <span class=\"fname\">{node.name}</span>\n <Show when={!node.dir && node.size !== undefined}>\n <span class=\"fsize\">{fmtK(node.size!)}</span>\n </Show>\n </div>\n <Show when={node.dir && expanded().has(node.path)}>\n <For each={(kids().get(node.path) ?? []).filter(ignoreFilter)}>{(child) => row(child, depth + 1)}</For>\n </Show>\n </>\n );\n\n const wsName = () => props.workspace.split(\"/\").filter(Boolean).pop() ?? props.workspace;\n\n /** refresh root + every expanded dir IN PLACE — mergeKids keeps unchanged\n * row objects, so the tree updates without flicker and an open file popup\n * is never touched (its state lives outside the row list entirely). */\n const [refreshing, setRefreshing] = createSignal(false);\n const refreshTree = async () => {\n if (refreshing()) return;\n setRefreshing(true);\n try {\n const targets = [\"\", ...expanded()];\n const results = await Promise.all(\n targets.map(async (p) => ({ p, rows: await fetchDirWith(p, showHidden()) })),\n );\n for (const { p, rows } of results) if (rows) mergeKids(p, rows);\n } finally {\n setRefreshing(false);\n }\n };\n\n return (\n <>\n <h3 style=\"display:flex;align-items:center;gap:6px\" title=\"the agent's workspace — lazy-loaded, dotfiles hidden; click a folder to expand, a file to preview\">\n 🗂 files <span class=\"muted\" style=\"text-transform:none;letter-spacing:0\">· {wsName()}</span>\n <IconBtn\n class=\"filetoggle\"\n icon={refreshing() ? \"…\" : \"⟳\"}\n title=\"refresh the tree (root + expanded folders) — open popups are kept\"\n onClick={() => void refreshTree()}\n />\n <IconBtn\n class=\"filetoggle\"\n style=\"margin-left:auto\"\n icon={ignoreMode() === \"hide\" ? \"🙈\" : ignoreMode() === \"dim\" ? \"👁\" : \"✨\"}\n title={`gitignored files: ${ignoreMode()} — click to cycle (dim → hidden → shown)`}\n onClick={cycleIgnoreMode}\n />\n <IconBtn\n class=\"filetoggle\"\n icon={showHidden() ? \"◉.\" : \"○.\"}\n title={showHidden() ? \"dotfiles shown — click to hide\" : \"dotfiles hidden — click to show\"}\n onClick={toggleHidden}\n />\n </h3>\n <div class=\"filebox\">\n <Show\n when={(kids().get(\"\") ?? []).length > 0}\n fallback={<div class=\"muted\" style=\"padding:6px\">{err() || \"empty workspace\"}</div>}\n >\n <For each={(kids().get(\"\") ?? []).filter(ignoreFilter)}>\n {(node) => row(node, 0)}\n </For>\n </Show>\n </div>\n <Show when={preview()}>\n {(pv) => (\n <Modal title={`🗂 ${pv().path}`} onClose={() => { hlRun++; setPreview(null); setMedia(null); }}>\n <Show\n when={media()}\n fallback={\n <>\n <div class=\"filetoolbar\">\n <Show when={isMd(pv().path) && !pv().binary}>\n <button class={viewMode() === \"md\" ? \"on\" : \"\"} onclick={() => setViewMode(\"md\")} title=\"rendered markdown\">👁 preview</button>\n </Show>\n <button class={viewMode() === \"code\" ? \"on\" : \"\"} onclick={() => { setViewMode(\"code\"); if (!hlHtml()) startHighlighting({ path: pv().path, content: pv().content, truncated: pv().truncated }); }} title=\"syntax-highlighted source\">{\"</>\"} code</button>\n <Show when={isEditable(pv())}>\n <button class={viewMode() === \"edit\" ? \"on\" : \"\"} onclick={() => setViewMode(\"edit\")} title=\"edit and save back to the workspace\">✎ edit</button>\n </Show>\n </div>\n <Show\n when={!pv().binary}\n fallback={\n <div class=\"mono\" style=\"margin:0;color:var(--dim)\">\n (binary file — inspect it from the terminal)\n </div>\n }\n >\n <Show when={viewMode() === \"edit\"} fallback={\n <Show when={viewMode() === \"md\" && isMd(pv().path)} fallback={\n <CodePreview\n path={pv().path}\n content={pv().content}\n html={hlHtml()}\n pending={hlPending()}\n truncated={!!pv().truncated}\n />\n }>\n <div class=\"content mdpreview\" innerHTML={renderMarkdown(pv().content)} />\n </Show>\n }>\n <div class=\"fileeditor\">\n <textarea\n class=\"mono\"\n value={editBuf()}\n oninput={(e) => setEditBuf(e.currentTarget.value)}\n spellcheck={false}\n />\n <div class=\"filerow-actions\">\n <span class=\"muted\">{fmtK(editBuf().length)} bytes</span>\n <button class=\"savebtn\" disabled={saving() || editBuf() === pv().content} onclick={() => void saveFile()}>\n {saving() ? \"saving…\" : \"💾 save\"}\n </button>\n </div>\n </div>\n </Show>\n </Show>\n </>\n }\n >\n {/* media preview: stream raw bytes with native controls */}\n <div class=\"mediapreview\">\n <Show when={media()!.kind === \"image\"} fallback={\n <Show when={media()!.kind === \"video\"} fallback={\n <audio controls src={`/api/agents/${props.agentId}/raw?path=${encodeURIComponent(media()!.path)}`} />\n }>\n <video controls src={`/api/agents/${props.agentId}/raw?path=${encodeURIComponent(media()!.path)}`} />\n </Show>\n }>\n <img src={`/api/agents/${props.agentId}/raw?path=${encodeURIComponent(media()!.path)}`} alt={media()!.path.split(\"/\").pop()} />\n </Show>\n <div class=\"meta muted\">{media()!.kind} preview</div>\n </div>\n </Show>\n </Modal>\n )}\n </Show>\n </>\n );\n}\n","import { createSignal, onMount, onCleanup, For, Show, createMemo, createEffect, untrack, Index } from \"solid-js\";\nimport { renderMarkdown } from \"./md\";\nimport { fmtDur } from \"./lib/format\";\nimport {\n applyDelta,\n clearLive,\n clearThinkClockIfDone,\n isTurnBoundary,\n isOwnLiveWork,\n pruneDeadLiveBuffers,\n reconcileLiveBuffer,\n} from \"./lib/live-buffer\";\nimport { buildTimelineWithCount, type TimelineEvent, type PendingEchoLike } from \"./lib/timeline\";\nimport { goalLine, isPlaceholderDetail } from \"./lib/goal-timeline\";\nimport { Card } from \"./components/card\";\nimport { slotForSelection, paintedIdFor } from \"./lib/theme-slots\";\nimport { outputLang } from \"./lib/tool-output-lang\";\nimport { mergeThemes } from \"./lib/theme-merge\";\nimport { previewLayers, veilColour, backgroundImageValue } from \"./lib/theme-preview\";\nimport { BG_WIDTHS, bgSrc, bgSrcSet } from \"./lib/bg-srcset\";\n// descendant-aware counting, so the 🧩 badge matches the real subtree.\nimport { descendantsOf, shouldShowCollapseCaret, subAgentDisplayName } from \"./lib/sidebar-tree\";\n// extracted so the tests drive the code that runs — they used to carry their\n// own copy, and deleting the real execCommand fallback left them green.\nimport { copyText } from \"./lib/clipboard\";\nimport { groupedWith, type RowLike } from \"./lib/row-grouping\";\nimport { answeredQuestionIdsOf, type QuestionEvent } from \"./lib/question-answered\";\nimport { reconcilePending, type PendingEcho } from \"./lib/pending-echo\";\n// pure + exported, so the session switcher is testable rather than re-implemented\nimport { linkableSessionId, resolveTimelineSession } from \"./lib/session-index\";\nimport { rememberTextareaHeight, storedTextareaHeight, trackTextareaHeight } from \"./lib/textarea-size\";\n// the scope predicates are PRODUCTION, so the tests can assert the same code\n// the handler runs — a test-local copy proves nothing\nimport { deltaBelongsToTimeline, eventBelongsOnTimeline, timelineIsLive } from \"./lib/session-scope\";\nimport { retintTerminal, themeColors } from \"./lib/terminal-theme\";\nimport { shellOutcome, shellHint, outcomeMarker } from \"./lib/shell-outcome\";\nimport {\n treeRowsOf,\n sidebarRowsOf,\n workspaceOf as workspaceOfPure,\n chatGroupKeyOf,\n wsChatCountsOf,\n} from \"./lib/sidebar-tree\";\nimport { effectiveProviderOf, mayResyncProvider, modelOnProviderSwitch, modelPlaceholderFor } from \"./lib/model-selection\";\nimport { composerValueChanged, shouldWriteComposerValue } from \"./lib/composer-ime\";\nimport {\n atTail,\n AT_TAIL_PX,\n classifyScroll,\n distanceToTail,\n gapToTail,\n nextFollowing,\n shouldPin,\n shouldShowJumpToPresent,\n type ScrollCause,\n type TailSample,\n} from \"./lib/scroll-policy\";\nimport { composerHeight } from \"./lib/composer-size\";\nimport { agentLabel, agentLabelWithId } from \"./lib/agent-label\";\nimport {\n applyCustomTheme,\n loadCustomThemes,\n loadCustomThemesFromServer,\n newThemeId,\n normalizeColour,\n saveCustomThemes,\n DEFAULT_PALETTE,\n MAX_BACKGROUND_BYTES,\n PALETTE_KEYS,\n PRESET_PALETTES,\n resolveActiveTheme,\n type CustomTheme,\n type ThemePalette,\n} from \"./lib/theme-store\";\n\n/* Rendered-markdown cache: old messages were re-parsing their whole body on\n * EVERY prepend/refresh pass (scrolling back through a long session parsed\n * the same text over and over — visibly heavy). Event content is immutable,\n * so a small LRU keyed by the source string makes repeat renders free. */\nconst mdCache = new Map<string, string>();\nfunction renderMarkdownCached(src: string): string {\n const hit = mdCache.get(src);\n if (hit !== undefined) return hit;\n const html = renderMarkdown(src);\n mdCache.set(src, html);\n if (mdCache.size > 500) mdCache.delete(mdCache.keys().next().value!);\n return html;\n}\nimport \"@xterm/xterm/css/xterm.css\";\nimport { Terminal } from \"@xterm/xterm\";\nimport { FitAddon } from \"@xterm/addon-fit\";\nimport { clampPaneIndex, indexAfterAppend, paneIndexAfterClose, rightPaneSeed } from \"./lib/term-tabs\";\nimport { pickAfterArchive } from \"./lib/archive-target\";\nimport { shouldSendOnKey, shouldRestoreAfterSend } from \"./lib/composer-keys\";\nimport { IconBtn, CopyBtn, Modal } from \"./components/chrome\";\nimport { AnsiText, BashElapsed, HighlightedCode, ThinkingTimer } from \"./components/code\";\nimport { hasAnsi, stripAnsi } from \"./lib/ansi\";\nimport { THEMES, type ThemeMeta } from \"./lib/themes-presets\";\nimport { PROVIDER_PRESETS } from \"./lib/provider-presets\";\nimport { ficon, fileUiFor, mediaKindOf, type FileUiState, type TreeNode } from \"./lib/file-tree\";\nimport { relTime } from \"./lib/format\";\nimport { api } from \"./lib/api\";\nimport { CodePreview, NumberField, ThemePreview, TodoEditor } from \"./components/settings-parts\";\nimport { FreeTextAnswer, MessageRow, SwitchContent, ToolRow } from \"./components/rows\";\nimport { ConfigModal } from \"./components/ConfigModal\";\nimport { FilesPanel } from \"./components/FilesPanel\";\nimport {\n AUTHORS,\n HARNESS_AUTH,\n authorOf,\n fmtK,\n fmtTs,\n oneLine,\n rawOf,\n type Ev,\n} from \"./lib/timeline-row\";\n\ndeclare const __APP_VERSION__: string;\n\n/** Reasoning-effort levels OpenRouter documents for `reasoning_effort` (#47). */\nconst REASONING_EFFORT_OPTIONS = [\"minimal\", \"low\", \"medium\", \"high\"] as const;\n\n/** Width at which the right bar becomes a floating drawer over the content.\n * MUST stay equal to the `@media (max-width: 1100px)` breakpoint in app.css —\n * the JS drives the drawer state, the CSS positions it, and they only agree if\n * both are 1100. */\nconst NARROW_PX = 1100;\n\n/* ---------- types ---------- */\ninterface Agent {\n /**\n * The agent's display slug (`tyb2-9`). NOT an internal identifier.\n *\n * Two things are called \"id\" here and mixing them caused a real bug: the ⏳ badge counted THIS\n * agent's `pendingPrompts` while the feed rendered the VIEWED session's echoes, so a session\n * showed a queue it did not have. When a field could be either, name it (`agentId` /\n * `sessionId`) — `id` alone is ambiguous wherever `session` is also in scope.\n */\n id: string; status: string; statusReason: string; workspace: string;\n /** is work in flight that `stop` would stop? `status` alone cannot say — a\n * parked tool and queued prompts are both live while status reads \"idle\" */\n live?: boolean;\n /** the INTERNAL session id (also its directory name) — never the display slug */\n session: string; branch: string; goal: { status: string; text: string; verify?: string; audit?: { verdict: \"approved\" | \"changes-required\"; feedback: string; at: string } };\n /** #155: a short label derived from the session's first user prompt. Absent\n * when that prompt had no usable line — the sidebar falls back to the id. */\n sessionTitle?: string;\n workspaceMissing?: boolean;\n latestProgress: any; stats: any; model: string; provider?: string;\n /** reasoning effort in force, and whether this model accepts one (#47) */\n reasoningEffort?: string; effortSupported?: boolean; effortOptions?: string[];\n pendingPrompts?: number;\n /** #78: the ids of the still-queued prompts, so the UI can reconcile by IDENTITY */\n pendingPromptIds?: string[];\n /** #87: the queue WITH its text, so echoes survive a reload */\n pendingPromptQueue?: { id: string; text: string; source?: string; at?: number; images?: { url: string; name?: string }[] }[];\n todo?: string;\n parent?: string;\n autoContinue?: boolean;\n autoCompact?: boolean;\n ctx?: { usedTokens: number; compactAt: number; window: number; compactAtIsManual?: boolean; compacting?: string };\n}\n\n\n\n/* ---------- transient toast hint (module scope: also used by SwitchContent) ---------- */\nconst [flash, setFlash] = createSignal(\"\");\nlet flashTimer: ReturnType<typeof setTimeout> | undefined;\nconst flashHint = (msg: string) => {\n setFlash(msg);\n clearTimeout(flashTimer);\n flashTimer = setTimeout(() => setFlash(\"\"), 3200);\n};\n\n/* ---------- IME composition (Safari) ---------- */\n// KeyboardEvent.isComposing is NOT reliable for this: Safari fires\n// compositionend BEFORE the final keydown for Enter, so by the time the\n// keydown handler asks, isComposing is already false and Enter gets SENT\n// instead of confirming the conversion — the half-converted text went to the\n// model and the user's kana/kanji input was swallowed. Track composition\n// ourselves and clear it on the next frame, after that keydown has run.\n// (ported from #12)\nlet imeInProgress = false;\n\n/* ---------- themes ---------- */\n\n/** author for an event — mirrored sub-agent rows act under their own id */\n\n// state/error/fork/goal render as dividers or embeds inside the feed\nconst FEED_TYPES = new Set([\n \"user\", \"message\", \"prompt\", \"tool_call\", \"tool_result\", \"progress\",\n \"state\", \"error\", \"fork\", \"goal\", \"todo\", \"question\", \"decision\", \"compaction\",\n \"audit_step\",\n \"system_note\",\n // NOTE: \"sub\" is deliberately NOT here. A child's activity is no longer\n // mirrored into the parent's log — those rows flooded the parent's\n // timeline, and they were display-only anyway: `rebuildMessagesFrom` never\n // read them, so the model never saw them either. A chat's timeline is its own.\n // The expansion below still handles a `sub` row so an OLD log that already\n // contains one renders as an attributed child row rather than vanishing.\n]);\n// system_note rows never render, but prompt-delivered must refresh the feed so the logged prompt\n// row replaces the pending echo immediately.\nconst NOTE_FEED_TYPES = new Set([\"system_note\"]);\n\n/**\n * Types that actually DRAW a row: `FEED_TYPES` minus the ones that pass the filter but render\n * nothing. A type with no render branch still becomes its neighbours' grouping `prev`, and\n * `groupedWith()` keys on TYPE — so an invisible row splits a run of tool calls in half.\n *\n * Kept explicit so adding a feed type without a render branch is a visible omission.\n */\nconst RENDERED_TYPES = new Set([\n \"user\", \"message\", \"prompt\", \"tool_call\", \"tool_result\", \"progress\",\n \"error\", \"fork\", \"goal\", \"todo\", \"question\", \"decision\", \"compaction\", \"audit_step\",\n]);\n\n/** system_note shapes that DO draw a divider/embed; the rest are log-only. */\nconst RENDERED_NOTE_EVENTS = new Set([\n \"runaway-detected\",\n \"error-retry\",\n \"background-exit\",\n \"context-compacted\",\n \"context-compaction-started\",\n]);\n\n\n// TEAPOT_API_TOKEN flow: open the UI as http://host/#token=<secret> once —\n// it is stored and stripped from the URL, then attached to every request.\nconst hashTok = location.hash.match(/[#&]token=([^&]+)/);\nif (hashTok) {\n localStorage.setItem(\"teapot.token\", decodeURIComponent(hashTok[1]));\n history.replaceState(null, \"\", location.pathname + location.search);\n}\nconst wsTokenQuery = () => {\n const t = localStorage.getItem(\"teapot.token\");\n return t ? `?token=${encodeURIComponent(t)}` : \"\";\n};\n\n/* ---------- app ---------- */\n\n\nexport default function App() {\n const [agents, setAgents] = createSignal<Agent[]>([]);\n const [selected, setSelected] = createSignal<string | null>(null);\n // internal session id backing the currently viewed timeline — the stable\n // handle behind /session/<id> URLs and every events fetch (?session=…)\n const [timelineId, setTimelineId] = createSignal<string>(\"\");\n // internal session id → owning agent id, and agent id → its session ids\n // (newest first) — ONE /api/sessions call serves every agent, refetched\n // only when the agent SET changes (not on every poll: the fan-out of one\n // request per agent per switch hammered the server for identical data)\n const [masterSessionIndex, setMasterSessionIndex] = createSignal<Map<string, string>>(new Map());\n const [sessionsByAgent, setSessionsByAgent] = createSignal<Map<string, string[]>>(new Map());\n /**\n * session id → human title, from `/api/sessions`.\n *\n * The per-agent snapshot also carries a title, but only for a session whose agent\n * has been RESTORED. Boot leaves agents stopped, so the sidebar would show raw ids\n * for every session the operator has not opened — i.e. the ones they most need to\n * tell apart. This index is built from the logs themselves and covers all of them.\n */\n const [sessionTitles, setSessionTitles] = createSignal<Map<string, string>>(new Map());\n let indexFetched = false;\n /** the request in flight, so concurrent callers await the SAME one */\n let indexInFlight: Promise<void> | null = null;\n /**\n * Fetch the session index once, sharing the in-flight request between callers.\n *\n * The latch means \"LANDED\", not \"started\". Setting it before the `await` let a second caller\n * return immediately with the index still empty — MEASURED at boot: `refreshAgents()` fires an\n * un-awaited refresh, `onMount` awaits its own, gets nothing, finds no owner for the deep link,\n * and falls through to `localStorage`, opening ANOTHER agent's session under this URL\n * (want=tyb2-8-0161a4af owner=undefined idx=0).\n *\n * `force` refetches; a failed fetch leaves the latch clear so it can be retried.\n */\n async function refreshSessionIndex(force = false): Promise<void> {\n if (indexInFlight) return indexInFlight;\n if (indexFetched && !force) return;\n const run = (async () => {\n try {\n const r = await api(\"/api/sessions\");\n const byId = new Map<string, string>();\n const byAgent = new Map<string, string[]>();\n const titles = new Map<string, string>();\n for (const s of r.sessions ?? []) {\n byId.set(s.id, s.agentId);\n if (typeof s.title === \"string\" && s.title) titles.set(s.id, s.title);\n const list = byAgent.get(s.agentId) ?? [];\n list.push(s.id); // server returns newest first\n byAgent.set(s.agentId, list);\n }\n setMasterSessionIndex(byId);\n setSessionsByAgent(byAgent);\n setSessionTitles(titles);\n indexFetched = true;\n } catch {\n /* transient — the latch stays clear so the next caller retries */\n }\n })();\n indexInFlight = run;\n try {\n await run;\n } finally {\n // only clear OUR entry: a `force` refetch started while this one ran owns the slot now\n if (indexInFlight === run) indexInFlight = null;\n }\n }\n const [events, setEvents] = createSignal<Ev[]>([]);\n const [eventsTotal, setEventsTotal] = createSignal(0); // server-side count (window is capped)\n const [branches, setBranches] = createSignal<any[]>([]);\n const [metrics, setMetrics] = createSignal<any>(null);\n // per-session unsent prompt drafts — switching agents preserves what each\n // one was typing instead of showing the previous session's text\n const drafts = new Map<string, string>();\n const [draft, setDraft] = createSignal(drafts.get(selected() ?? \"\") ?? \"\");\n const saveDraft = (v: string) => {\n setDraft(v);\n const id = selected();\n if (id) {\n if (v) drafts.set(id, v);\n else drafts.delete(id); // cleared input → nothing to preserve\n }\n };\n const [cfg, setCfg] = createSignal<any>({ providers: {} });\n const [showNew, setShowNew] = createSignal(false);\n /** the ladder lives in `bg-srcset.ts`, shared with the appearance preview */\n\n /**\n * The active custom theme's background image, if any.\n *\n * Resolved with the SAME precedence as the painter (`themeAuto` → per-mode id, else the fixed\n * id), because a srcset pointing at one theme's image while another is painted is exactly the\n * kind of drift that makes a setting look broken.\n */\n const activeBgImage = () => {\n const preview = previewTheme();\n const want =\n preview ??\n (themeAuto()\n ? sysPrefersLight()\n ? sysLightTheme()\n : sysDarkTheme()\n : fixedTheme());\n return customThemes().find((t) => t.id === want)?.backgroundImage ?? \"\";\n };\n /**\n * The theme id ACTUALLY PAINTED — the same resolution the painting effect uses.\n *\n * With \"follow the system\" the document is painted with the per-mode choice, not with\n * `fixedTheme()`. Anything that reads LIVE colours from the document (theme duplication does)\n * must also take its NAME from here, or the two describe different themes.\n */\n const paintedThemeId = () => {\n const want = themeAuto()\n ? sysPrefersLight()\n ? sysLightTheme()\n : sysDarkTheme()\n : fixedTheme();\n return customThemes().some((t) => t.id === want) || THEMES.some((t) => t.key === want)\n ? want\n : \"dark\";\n };\n\n const [showCfg, setShowCfg] = createSignal(false);\n /**\n * FIRST RUN: open settings on `providers`, once, and let it be closed.\n *\n * The setup wizard is gone. It replaced the whole layout and blocked everything until a provider\n * was configured, which is a heavier gate than the situation needs — the operator may well want\n * to look at an existing session, or the config may be fine except for one missing key.\n *\n * `needsSetup` now means \"no provider registered\" (see `/api/config`), and this is a nudge rather\n * than a wall: the panel opens, closed by the ordinary ✕/esc, and nothing re-opens it. The\n * `nudged` flag is what makes it once-only — without it, every `loadCfg()` refresh would reopen\n * the dialog the operator just dismissed.\n *\n * Deferred a frame so it opens AFTER the first paint: opening during mount made the dialog appear\n * before the sidebar behind it, which read as the app failing to load.\n */\n let setupNudged = false;\n createEffect(() => {\n if (setupNudged || !cfg()?.needsSetup) return;\n setupNudged = true;\n requestAnimationFrame(() => {\n loadCfg();\n setShowCfg(true);\n });\n });\n // probed when the settings panel first opens, not at boot: it runs binaries server-side\n createEffect(() => {\n if (!showCfg() || features()) return;\n api(\"/api/features\")\n .then((f) => setFeatures(f as never))\n .catch(() => setFeatures(null));\n });\n /**\n * MCP servers whose missing grant has already pulled the operator to that section.\n *\n * Deliberately module/mount-lifetime, NOT per-dialog: \"this server needs authorization\" is a\n * property of the server, so re-opening settings must not re-announce it and make every save\n * jump to MCP again.\n */\n const announcedOAuth = new Set<string>();\n /* Below NARROW_PX the right bar stops being a grid column and becomes a\n * fixed drawer over the content — which hides the ▤ toggle that opens it.\n * That is why the drawer needs its own close button, and why the breakpoint\n * lives in ONE place shared with the CSS media query. */\n const isNarrow = () => window.innerWidth <= NARROW_PX;\n /* ...but the JSX needs the REACTIVE form. A plain function reads fine inside\n * a keydown handler and is evaluated on every Escape, yet `<Show\n * when={isNarrow() && …}>` evaluates it ONCE at render and never again:\n * window.innerWidth is not a signal, so nothing re-ran the branch. The\n * reported flow is narrowing an already-loaded window, which is exactly when\n * that bites — the backdrop never appeared, and the drawer had no\n * click-outside at all. A signal updated on resize makes it track the same\n * breakpoint the CSS media query does. */\n const [narrow, setNarrow] = createSignal(isNarrow());\n onMount(() => {\n const onResize = () => setNarrow(isNarrow());\n window.addEventListener(\"resize\", onResize);\n onCleanup(() => window.removeEventListener(\"resize\", onResize));\n onResize(); // a late load can land on the other side of the breakpoint\n });\n\n /* a resize must not move the operator's place in the timeline.\n *\n * `scrollTop` is a PIXEL offset into content whose height just changed. Narrow\n * -> wide re-wraps every line, so the same text needs fewer rows and\n * `scrollHeight` SHRINKS; the browser then clamps `scrollTop` to the new\n * maximum. Nothing was added or removed, yet the view lands somewhere else:\n *\n * before: content 2000, scrollTop 1500, at the bottom\n * after : content 1200, max scrollTop 700 -> clamped from 1500 to 700\n * => 800px further from the bottom than before\n *\n * Two guarantees, in order of what the operator asked for:\n *\n * 1. if they were FOLLOWING (at the bottom), keep following. Widening the\n * window while reading new output must not unpin it.\n * 2. otherwise keep the topmost VISIBLE row in place. That is the only\n * stable thing across a re-wrap — a pixel offset is not, since the rows\n * above it changed height.\n */\n /**\n * #103 / #scroll: when the feed's own BOX changes, keep the operator's place.\n *\n * This used to listen to `window.resize` only, which misses every change that matters:\n * the composer growing a line, the terminal drawer opening, the right panel toggling —\n * each resizes `.feed` WITHOUT touching the window. That omission is why \"typing into a\n * 2-line composer nudges the feed\" kept surviving: the viewport shrank, nothing\n * re-anchored, and the `scrollTop` the browser had clamped to the OLD maximum was left\n * pointing at a position that was now one line short of the tail.\n *\n * A ResizeObserver on the feed sees all of them, because they are all one event as far as\n * the scroll container is concerned: its box changed.\n *\n * Two cases, decided from the FOLLOW STATE rather than from geometry sampled here:\n * 1. following → re-pin. The tail is where the reader was and where they should be.\n * 2. not following → keep the topmost VISIBLE row where it is. A pixel offset is not\n * stable across a re-wrap (the rows above it changed height), but the row is.\n */\n let lastContentHeight = 0;\n /**\n * The topmost visible row, kept current by the SCROLL path (throttled to 100ms).\n *\n * `restoreAfterBoxChange` needs it, and it must be a value captured while the reader was looking\n * at the content — measuring at the moment the box changes compares a row against itself\n * (`firstVisibleRow` returns the row AND its `top` in one frame, so the delta is always 0). That\n * is why narrowing the window kept `scrollTop` at 2701 while `scrollHeight` shrank 6753 → 5941 and\n * the reader's place moved two rows (message 15 → 18).\n *\n * Declared here, not beside `resyncAfterUnskip`, so the ResizeObserver path is outside its\n * temporal dead zone.\n */\n let unskipAnchor: { sel: string; top: number } | null = null;\n let unskipAnchorAt = 0;\n let feedRo: ResizeObserver | undefined;\n let feedRoEl: HTMLElement | undefined;\n let feedRoRaf = 0;\n let feedRoLastBox = \"\";\n const restoreAfterBoxChange = () => {\n feedRoRaf = 0;\n const f = feedEl();\n if (!f) return;\n /**\n * Re-pin on EVERY box change while following — including the composer's own measuring.\n *\n * Three previous fixes all circled this one line, so the reasoning is worth keeping:\n *\n * v0.34.7 `if (contentHeight <= offsetHeight) height = \"auto\"` — MEASURED always true, so\n * the collapse stayed unconditional.\n * v0.34.8 compared against a remembered content height read from a box that was still\n * tall, so the guard never fired and deleting never shrank the box.\n * v0.34.9 skipped this observer entirely while measuring. That removed the damage from\n * the collapsed layout AND removed the only pin — when the composer grows,\n * `scrollTop` does not change (only the floor moves down), so NO scroll event\n * fires and this observer is the sole thing that restores the tail.\n *\n * The measurement round-trip is unavoidable: a textarea with an explicit height reports\n * `max(height, content)`, so the content height is unrecoverable while it is tall.\n *\n * But `pinToTail()` is `scrollTop = scrollHeight`, which the browser clamps to whatever the\n * floor is AT THAT MOMENT. Pinning during the collapsed layout lands on the collapsed floor\n * and is corrected by the next box change; pinning twice is idempotent, skipping it is not.\n * So there is nothing to suppress — the flag is gone.\n */\n\n /**\n * Record the geometry on EVERY box change, not only on scroll deliveries.\n *\n * `classifyScroll()` decides \"layout vs reader\" by comparing the delivered viewport height\n * against the previous sample. Those samples used to advance only inside the scroll handler\n * — so when the composer resized and the browser delivered a scroll event in the SAME frame,\n * the handler compared against the PRE-resize height, saw no change, and attributed the\n * movement to the reader. Follow was dropped.\n *\n * That ordering is browser-dependent, which is why this reproduced in Firefox only: Chrome\n * delivered the scroll after the resize had been observed, Firefox before. Taking the\n * sample here removes the dependency on which fires first.\n */\n lastSampleHeight = f.scrollHeight;\n lastSampleViewport = f.clientHeight;\n if (atBottom()) {\n // following: re-pin to the NEW maximum. Assigning scrollHeight lets the browser clamp,\n // so this is correct without knowing the new viewport height.\n pinToTail();\n return;\n }\n /**\n * Use the anchor the SCROLL path maintains (`unskipAnchor`), not one measured here.\n *\n * Measuring here compared a row's position against itself: `firstVisibleRow(f)` returns the row\n * AND its `top` in the same frame, so `delta` was always 0 and this branch did nothing. That is\n * why narrowing the window kept `scrollTop` at 2701 while `scrollHeight` shrank 6753 → 5941 and\n * the reader's place moved two rows (message 15 → 18).\n */\n const anchorRow = unskipAnchor;\n if (!anchorRow) return;\n const el = f.querySelector<HTMLElement>(anchorRow.sel);\n if (!el) return;\n const delta = el.getBoundingClientRect().top - anchorRow.top;\n if (delta) {\n f.scrollTop += delta;\n // this write is ours: record it so the scroll event it produces cannot be read as the\n // reader having moved (see `classifyScroll`)\n ledger = { top: f.scrollTop, height: f.scrollHeight };\n }\n // the box changed, so the gap did too — keep the pill honest\n publishGap(tailSample());\n };\n\n /**\n * Put the reader back where they were after a `content-visibility` unskip.\n *\n * Gecko lays a row out for real the moment it approaches the viewport, replacing its\n * `contain-intrinsic-size` placeholder. When that row is ABOVE the reader, everything below it\n * moves — and unlike Chromium, Gecko does not keep the scroll position stable across the\n * unskip (Bugzilla 1940025 and 1908582 are both still open; WPT\n * `content-visibility-anchor-positioning-00{2,3}.html` fails). MEASURED in this app: scrolling\n * up through a loaded session creeps a few pixels per unskipped row.\n *\n * The unskip does NOT fire a ResizeObserver — the feed's own box is unchanged — so it needs\n * its own trigger. It DOES change `scrollHeight`, which is exactly the signature the scroll\n * handler already sees as `layout`; this runs on that path and re-applies the row anchor.\n *\n * Bounded deliberately: at most a few corrections per animation frame, and never while\n * following (there the tail is the only position that matters and `pinToTail` already handles\n * it).\n */\n function resyncAfterUnskip(f: HTMLElement, anchor: { sel: string; top: number } | null): void {\n if (!anchor) return;\n const el = f.querySelector<HTMLElement>(anchor.sel);\n if (!el) return;\n const delta = el.getBoundingClientRect().top - anchor.top;\n // a sub-pixel diff is rounding, not an unskip: correcting it would ADD jitter\n if (Math.abs(delta) < 1) return;\n /**\n * A LARGE delta is not an unskip — it is a stale anchor, and correcting it is the jump.\n *\n * The anchor is refreshed on scroll deliveries, throttled to 100ms, so during a burst of\n * appends (a streaming reply, or a page of history arriving) it can name a row whose position\n * has since been invalidated. One unskip moves a row by a few pixels — its intrinsic-size guess\n * against its real height — so a delta in the HUNDREDS of pixels cannot be that: it means the\n * anchor no longer describes the content, and scrolling by it would move the reader to an\n * unrelated place. Reported as \"原因不明でスクロール追従が外れて500pxくらい戻る\".\n *\n * Dropping the anchor is the honest response: the next reader gesture records a fresh one, and\n * a stale correction is strictly worse than none.\n */\n if (Math.abs(delta) > RESYNC_MAX_DELTA_PX) return;\n f.scrollTop += delta;\n ledger = { top: f.scrollTop, height: f.scrollHeight };\n }\n const scheduleRestore = () => {\n if (feedRoRaf) return;\n feedRoRaf = requestAnimationFrame(restoreAfterBoxChange);\n };\n /**\n * Attach the box observer to the feed element that is ACTUALLY in the DOM.\n *\n * This is a function rather than a one-shot `onMount` because the timeline is rendered\n * inside `<Show when={sel()?.id} keyed>` — switching session REBUILDS `.channel` and with\n * it `.feed`. A ResizeObserver attached once at mount then keeps watching a DETACHED\n * node and reports nothing, which is why an `onMount` version of this fix looked correct\n * and did nothing in the real app (the smoke harness renders once, so it could not catch\n * that). The `ref` on the feed calls this on every rebuild.\n */\n const attachFeedObserver = (f: HTMLElement | null) => {\n if (!f) return;\n if (f === feedRoEl) return; // same element, already observed\n feedRo ??= new ResizeObserver((entries) => {\n // coalesce: a drag-resize fires continuously, and each measurement forces layout\n const box = entries[0]?.contentRect;\n const key = box ? `${Math.round(box.width)}x${Math.round(box.height)}` : \"\";\n if (key === feedRoLastBox) return; // sub-pixel churn\n feedRoLastBox = key;\n scheduleRestore();\n });\n if (feedRoEl) feedRo.unobserve(feedRoEl);\n feedRoEl = f;\n feedRoLastBox = \"\";\n feedRo.observe(f);\n };\n onMount(() => {\n // a window resize changes the feed's box, so the observer covers it; it is listed too\n // because a resize that leaves the feed's box identical (an outer padding change) still\n // re-wraps the text inside it\n window.addEventListener(\"resize\", scheduleRestore);\n onCleanup(() => {\n window.removeEventListener(\"resize\", scheduleRestore);\n feedRo?.disconnect();\n feedRo = undefined;\n feedRoEl = undefined;\n if (feedRoRaf) cancelAnimationFrame(feedRoRaf);\n });\n });\n\n /** A selector that identifies the topmost visible timeline row, plus its\n * viewport-relative top. Used as the anchor a resize must preserve. */\n function firstVisibleRow(\n f: HTMLElement,\n ): { sel: string; top: number } | null {\n // rows already carry `data-eid` (their log event id), which is stable across\n // a re-wrap — unlike a pixel offset or a row INDEX\n const rows = f.querySelectorAll<HTMLElement>(\"[data-eid]\");\n if (!rows.length) return null;\n const feedTop = f.getBoundingClientRect().top;\n const at = (i: number) => rows[i]!.getBoundingClientRect();\n /**\n * BINARY SEARCH, not a linear scan.\n *\n * visible — and with `content-visibility: auto` on `.feed > .msg`, reading a row's box\n * FORCES IT TO BE LAID OUT. So the scan did not merely read ~1,100 boxes, it laid out\n * every skipped row it passed, which is the \"`content-visibility` との相性\" the operator\n * suspected. It runs on every window resize and every content change.\n *\n * Rows are in DOCUMENT ORDER, so \"is this row above the viewport\" is monotone: a binary\n * search finds the first visible row in ~10 probes instead of ~1,100, and only the rows\n * on that path are ever unskipped.\n */\n let lo = 0;\n let hi = rows.length - 1;\n let found = -1;\n while (lo <= hi) {\n const mid = (lo + hi) >> 1;\n if (at(mid).bottom > feedTop) {\n found = mid;\n hi = mid - 1; // a visible row — look for an EARLIER one\n } else {\n lo = mid + 1; // entirely above the viewport\n }\n }\n if (found < 0) return null;\n const eid = rows[found]!.dataset.eid ?? \"\";\n return eid ? { sel: `[data-eid=\"${CSS.escape(eid)}\"]`, top: at(found).top } : null;\n }\n const [showRight, setShowRight] = createSignal(\n localStorage.getItem(\"teapot.panel\") !== null\n ? localStorage.getItem(\"teapot.panel\") === \"1\"\n : window.innerWidth > NARROW_PX,\n );\n const setRight = (next: boolean) => {\n setShowRight(next);\n localStorage.setItem(\"teapot.panel\", next ? \"1\" : \"0\");\n };\n const toggleRight = () => setRight(!showRight());\n const closeRight = () => {\n // Escape and the drawer's ✕ must not persist \"panel open\" — a drawer\n // remembered as open slides back over the content on the next load, which\n // is exactly the state we are trying to make escapable.\n if (showRight()) setRight(false);\n };\n /**\n * The LEFT panel is a drawer on a phone, and only there.\n *\n * Asked for as \"スマホで見たときに左パネルも邪魔になるので、これはいい感じにしたい / 右パネルと\n * 同じく閉じるだけでいいのか、モバイル版DiscordみたいなUXにするのかはお任せ\".\n *\n * Same shape as the right panel, deliberately: a slide-over with a backdrop and a ✕, opened\n * from a hamburger in the header. On desktop nothing changes — the drawer is off, the sidebar is\n * a grid column, and the hamburger is not rendered. Regression safety on PC is the constraint the\n * operator named, so the narrow-only behaviour lives behind `isNarrow()` and the base grid is\n * untouched.\n *\n * NOT persisted, unlike the right panel: a phone that remembered \"sidebar open\" would greet the\n * operator with a drawer over the conversation every launch.\n */\n const [showLeft, setShowLeft] = createSignal(false);\n const closeLeft = () => setShowLeft(false);\n\n /* ---------- theme picker (per-browser, localStorage-backed) ---------- */\n // fixed theme…\n const [fixedTheme, setFixedTheme] = createSignal(localStorage.getItem(\"teapot.theme\") ?? \"dark\");\n // …or follow the OS, with an explicit choice per system appearance\n const [themeAuto, setThemeAuto] = createSignal(localStorage.getItem(\"teapot.theme.auto\") === \"1\");\n const [sysLightTheme, setSysLightTheme] = createSignal(\n localStorage.getItem(\"teapot.theme.light\") ?? \"light\",\n );\n /**\n * Operator-authored themes, persisted separately from the preset choice.\n *\n * A preset is a `[data-theme]` block in app.css; a custom theme cannot be one (nothing in the\n * browser can write a stylesheet), so it is applied as INLINE custom properties on `<html>`.\n * That is why the two are separate signals: `fixedTheme` names a preset OR a custom id, and\n * `customThemes` is the palette behind that id.\n */\n /**\n * A theme id to PAINT regardless of which slot the OS selects — the settings PREVIEW.\n *\n * Following the system, `want` comes from the slot matching the OS appearance, so clicking a\n * LIGHT card while the OS is dark could not show anything: the painter asked for the dark slot.\n * Reported as \"最後に押したテーマがプレビューされるべきなのに変わってない\".\n *\n * `null` means \"no preview\": the normal slot resolution applies, which is the state the app\n * returns to when the dialog closes.\n */\n const [previewTheme, setPreviewTheme] = createSignal<string | null>(null);\n const [customThemes, setCustomThemes] = createSignal<CustomTheme[]>(loadCustomThemes());\n /**\n * UNION the server's themes with this browser's — never replace one set with the other.\n *\n * The first paint uses `loadCustomThemes()` (localStorage) so the palette is right before any\n * network call, then this reconciles once the app is up.\n *\n * It used to be \"a server with themes wins\" and that is wrong in the direction that loses data:\n * a server holding ONE unrelated theme silently deleted every theme this browser had. MEASURED\n * in a sandbox whose config carried a single stale light theme — the seven local themes became\n * one, and the reported symptom was \"follow the system がオフなのにライトテーマ(システムのテーマ)の\n * 選択肢しかでない\", because the survivor happened to be light.\n *\n * Neither side is authoritative: a theme can be made on a phone and not yet synced, and the file\n * can hold themes from before this browser existed. So the resolved list is the union by id —\n * the server's copy wins for an id both know (it is the durable one), local-only themes are\n * kept, and the union is pushed back so both sides converge.\n *\n * `remote === null` means unreachable: keep what this browser has and push nothing, so a dead\n * server cannot wipe the local list either.\n */\n onMount(() => {\n void loadCustomThemesFromServer().then((remote) => {\n if (remote === null) return;\n const merged = mergeThemes(customThemes(), remote);\n setCustomThemes(merged);\n /**\n * Push the union up unconditionally: it converges both sides for every case at once —\n * first run against an empty server, a theme that exists only locally, and a theme that\n * exists only on the server (already in `merged`, so re-sending it is a no-op).\n */\n saveCustomThemes(merged);\n });\n });\n const [sysDarkTheme, setSysDarkTheme] = createSignal(\n localStorage.getItem(\"teapot.theme.dark\") ?? \"dark\",\n );\n const sysMql =\n typeof window.matchMedia === \"function\"\n ? window.matchMedia(\"(prefers-color-scheme: light)\")\n : null;\n const [sysPrefersLight, setSysPrefersLight] = createSignal(sysMql?.matches ?? false);\n onMount(() => {\n const onChange = (e: MediaQueryListEvent) => setSysPrefersLight(e.matches);\n sysMql?.addEventListener(\"change\", onChange);\n onCleanup(() => sysMql?.removeEventListener(\"change\", onChange));\n });\n // single writer: resolves the active theme and slaps it on <html>\n createEffect(() => {\n /**\n * A preview WINS over slot resolution.\n *\n * Following the system, `want` comes from the slot matching the OS appearance, so clicking a\n * LIGHT card while the OS is dark asked the painter for the dark slot and nothing changed.\n * \"最後に押したテーマがプレビューされるべき\" is what this override is for.\n */\n const previewId = previewTheme();\n const want = previewId ?? (themeAuto()\n ? sysPrefersLight()\n ? sysLightTheme()\n : sysDarkTheme()\n : fixedTheme());\n /**\n * A stored id can name a theme that no longer exists: deleted in another tab, dropped by\n * `saveCustomThemes` when storage was full, or written by an older build. The attribute was\n * set to that dead id, and since it matches neither `:root` nor a `[data-theme]` block the\n * page then had NO palette at all — every surface transparent, unreadable, with no obvious\n * way back except editing localStorage.\n *\n * Falling back to the dark preset keeps the app usable, and the write-back means the next\n * reload agrees with what is on screen instead of retrying the dead id forever.\n */\n const resolved = resolveActiveTheme({\n want,\n customIds: customThemes().map((t) => t.id),\n presetIds: THEMES.map((t) => t.key),\n fallback: \"dark\",\n });\n const active = resolved.active;\n const custom = customThemes().find((t) => t.id === active) ?? null;\n if (resolved.repaired) {\n // rewrite the STORED value, not just the attribute: otherwise every effect run re-reads\n // the dead id and the fallback is permanent rather than a one-time repair\n if (themeAuto()) localStorage.setItem(sysPrefersLight() ? \"teapot.theme.light\" : \"teapot.theme.dark\", active);\n else localStorage.setItem(\"teapot.theme\", active);\n }\n document.documentElement.dataset.theme = active;\n // A CUSTOM theme is applied as inline custom properties, which outrank the stylesheet's\n // `:root`/`[data-theme]` values. `null` clears them, so switching back to a preset cannot\n // leave half a palette behind (a leftover `--bg-dark` would keep overriding the preset).\n applyCustomTheme(document.documentElement, custom);\n // light/dark appearance for components that ship their own palettes\n // (e.g. shiki dual-theme code blocks)\n document.documentElement.dataset.appearance =\n custom?.mode ?? THEMES.find((t) => t.key === active)?.mode ?? \"dark\";\n });\n /**\n * #143 REVERSED: no `content-visibility` on timeline rows.\n *\n * The containment that used to be toggled here is gone. It bought less memory than expected\n * (\"思ったより軽量化効果が少なかった\") and it CAUSED the scroll drift: a skipped row is replaced by\n * a `contain-intrinsic-size` guess, and laying it out for real moves everything below it.\n *\n * Removed rather than tuned, because the drift cannot be corrected from script — a correction\n * runs after paint, so it is itself a visible jump. See the note in app.css.\n */\n // NOTE: there used to be a second effect here that walked every row and wrote an\n // inline `contain-intrinsic-size` from a measured box, with an IntersectionObserver and a\n // ResizeObserver per row, to stop a `content-visibility` unskip from shifting the scroll.\n //\n // It is GONE. MEASURED by the operator: with `teapot.feedCv=0` the UI is light, with it\n // on the tab is unusable — so the cost was the reservation machinery itself, not the\n // containment. An inline style on ~1,100 rows plus 2 observers each meant every scroll\n // and every append invalidated style and layout for the whole feed.\n //\n // The mechanism is also self-defeating: writing `<w>px <h>px` REPLACES the stylesheet's\n // `auto` keyword, so the browser can no longer remember a row's real size itself — which\n // is exactly what `auto` is for. `contain-intrinsic-size: auto 140px` in app.css does\n // this job natively, in the engine, with no script.\n //\n // happy-dom does no layout, so none of this could ever reproduce in the test harness —\n // which is why the previous tests were green while the browser burned a core.\n // model switcher state\n const [modelProvider, setModelProvider] = createSignal(\"\");\n const [modelDraft, setModelDraft] = createSignal(\"\");\n // reasoning effort draft (\"\" = provider default). Seeded from the\n // agent snapshot and re-seeded whenever the selected agent changes, mirroring\n // modelDraft's pattern.\n const [effortDraft, setEffortDraft] = createSignal(\"\");\n createEffect(() => {\n const id = selected();\n setEffortDraft(untrack(() => agents().find((a) => a.id === id)?.reasoningEffort ?? \"\"));\n });\n const [models, setModels] = createSignal<\n { id: string; contextLength?: number; pricing?: { prompt: number; completion: number }; modalities?: { input: string[]; output: string[] } }[]\n >([]);\n const providerList = () => Object.keys(cfg().providers ?? {});\n async function loadModels(prov: string) {\n if (!prov) return;\n try {\n const r = await api(`/api/models?provider=${encodeURIComponent(prov)}`);\n setModels(r.models ?? []);\n } catch { setModels([]); }\n }\n /** \"ctx 1m · $3/M in · $15/M out\" for the draft (or current) model */\n /** 📄🖼️→📄 style badge for a model's input/output modalities */\n const modalityBadge = (m?: { modalities?: { input: string[]; output: string[] } }): string => {\n const icon: Record<string, string> = {\n text: \"📄\", image: \"🖼️\", audio: \"🔊\", video: \"🎬️\", file: \"📎\",\n };\n const side = (list?: string[]) =>\n (list ?? [\"text\"]).map((k) => icon[k] ?? k).join(\"\");\n if (!m?.modalities) return \"\";\n return `${side(m.modalities.input)} → ${side(m.modalities.output)}`;\n };\n const modelSpec = () => {\n const id = modelDraft().trim() || sel()?.model || \"\";\n if (!id) return \"\";\n const m = models().find((x) => x.id === id);\n if (!m) return \"\";\n const parts: string[] = [];\n const badge = modalityBadge(m);\n if (badge && badge !== \"📄 → 📄\") parts.push(badge); // text-only is the default — no noise\n if (m.contextLength) parts.push(`ctx ${fmtK(m.contextLength)} tok`);\n const price = (p?: number) =>\n p === undefined ? \"\" : `${p * 1e6 >= 10 ? Math.round(p * 1e6) : +(p * 1e6).toFixed(1)}/M`;\n if (m.pricing) {\n const pin = price(m.pricing.prompt);\n const pout = price(m.pricing.completion);\n if (pin && pout) parts.push(`${pin} in · ${pout} out`);\n else if (pin || pout) parts.push(price(m.pricing.prompt ?? m.pricing.completion));\n }\n return parts.join(\" · \");\n };\n // Keep the switcher aligned with the selected session. Keyed on STRINGS,\n // not on sel() identity: this used to re-run (and re-fetch /api/models!)\n // on every poll in which the agent's snapshot object changed — visibly\n // rebuilding the whole 🧦 model section = the \"right panel flashes\" bug.\n // FIX: the draft/provider signals are NOT dependencies — reading them\n // reactively cleared the draft on every keystroke and reverted the\n // provider dropdown on manual change (the \"right panel model switching\n // doesn't work\" bug). Clear draft / sync provider only when the selected\n // agent actually changes.\n let _prevModelAgent: string | null = null;\n // set when the operator works the provider dropdown themselves. The\n // re-sync in the branch below exists for an EXTERNAL change (another tab, a\n // restart) and must not undo a deliberate pick: choosing a provider that has\n // no configured default model leaves the draft empty, and without this the\n // next poll reads \"empty draft\" as \"not mid-edit\" and pulls the dropdown back\n // before `apply` can be pressed.\n let providerTouched = false;\n createEffect(() => {\n const id = selected();\n if (!id) return;\n const a = agents().find((x) => x.id === id);\n const prov = a?.provider || cfg().defaultProvider || providerList()[0] || \"\";\n if (!a) return;\n if (id !== _prevModelAgent) {\n _prevModelAgent = id;\n providerTouched = false; // a new session's own provider is the right default\n // sync provider to the newly selected agent's provider\n if (untrack(() => modelProvider()) !== prov) {\n setModelProvider(prov);\n loadModels(prov);\n }\n // clear stale draft only on session switch, not on every poll\n if (untrack(() => modelDraft())) setModelDraft(\"\");\n } else {\n // same agent — keep user's draft/provider edits intact; only\n // re-sync if the server's provider changed externally and the user\n // isn't actively editing (draft empty means not mid-type) or has not\n // touched the dropdown\n const curProv = untrack(() => modelProvider());\n const curDraft = untrack(() => modelDraft());\n if (!curDraft && curProv !== prov && mayResyncProvider(providerTouched)) {\n setModelProvider(prov);\n loadModels(prov);\n }\n }\n });\n // autoscroll: follow the tail only while the reader is already at the bottom\n const MAX_COMPOSER_H = 360; // ~15 lines expanded (was ~8 lines / 160px)\n const [composerMaximized, setComposerMaximized] = createSignal(false);\n const [atBottom, setAtBottom] = createSignal(true);\n const [missed, setMissed] = createSignal(0);\n /**\n * The last measured gap to the tail, as a SIGNAL.\n *\n * The jump pill's visibility must not be recomputed by reading the DOM inside a `<Show>`\n * condition — that runs on every render of the composer and forces layout each time, on\n * the very feed the #179 fixes went into. The scroll handler and the resize observer\n * already have the numbers, so they publish the gap and the pill reads a plain signal.\n *\n * `-1` means \"not measured yet\", which shows no pill.\n */\n const [gapToTailPx, setGapToTailPx] = createSignal(-1);\n /** publish the gap from any place that already measured it */\n const publishGap = (s: TailSample | null) => setGapToTailPx(s ? gapToTail(s) : -1);\n // live compaction progress for the selected session (\"summarizing 2138…\")\n const [compacting, setCompacting] = createSignal<{ phase: string; summarized?: number } | null>(null);\n // the live bubble is carrying a compaction summarizer stream (prefixed by\n // the harness) rather than a normal assistant reply — render it differently\n const liveIsCompact = () => liveText().startsWith(\"[compact] \");\n /**\n * The summarizer's stream is shown as a PREVIEW, not as a growing document.\n *\n * It is a full compaction summary being written — many hundreds of lines — and rendering all of\n * it in a live bubble made the timeline jump to a wall of text at the exact moment the log was\n * also gaining the `🗜 context compacted` row. The operator described it as \"compact完了直後に\n * 一瞬タイムラインにcompact結果が展開された状態で出る\" and \"compact直後のタイムラインの挙動が\n * ちょっと変\".\n *\n * The tail is what shows progress (the head is the part already written); the finished summary is\n * one click away in the compaction card, which is where reading it belongs.\n */\n const liveBody = () => {\n const body = liveIsCompact() ? liveText().slice(\"[compact] \".length) : liveText();\n const CAP = 1200;\n return body.length > CAP ? \"…\" + body.slice(-CAP) : body;\n };\n // a summarizer's streamed output is shown in the live bubble; clear it when\n // the pass ends so a stale \"[compact] …\" bubble can't outlive it\n createEffect(() => {\n if (!compacting()) setLive((l) => (l?.text.startsWith(\"[compact] \") ? null : l));\n });\n /**\n * Re-pin after ANY in-feed content change while the reader is following.\n *\n * The feed is `flex: 1` inside a fixed-height column, so its BOX does not change when content\n * grows — the `ResizeObserver` above only sees viewport and composer changes. Everything that\n * appears inside the feed therefore had to re-pin itself, and only two things did: a `<details>`\n * opened by the operator, and the compaction banner. Reported as \"goal関連のカードがタイムラインに\n * 流れたときにスクロール追従が動かない\" — a goal card renders inside the feed and nothing re-pinned.\n *\n * Keying on the event list plus `scrollHeight` covers every such case without each row having to\n * know about scrolling. Pinning is idempotent, so a spurious firing costs one assignment.\n */\n createEffect(() => {\n void events().length;\n void eventsTotal();\n void compacting();\n /**\n * `chatEvents().length`, not just `events().length`.\n *\n * The feed renders `chatEvents()`, which is `events()` PLUS the pending echoes and minus the\n * rows the pipeline hides. Keying the re-pin on the raw log length therefore missed every change\n * that is not a new LOG row: a message the operator just sent gets an ECHO at the bottom, a\n * delivered prompt loses its echo, and neither touches `events().length`. The row appears (or\n * disappears) under a reader who is following and nothing pins.\n */\n void chatEvents().length;\n /**\n * …and the two rows that live OUTSIDE `<For>`.\n *\n * Every child of the feed that can appear on its own has to be named here, because this effect\n * is the only thing that re-pins for content INSIDE the feed (its box does not change — `flex: 1`\n * in a fixed-height column). Two were missing: the \"beginning of log\" divider and the tail\n * loading row. Auditing the JSX against this list is the check; a new feed child needs a line\n * here or a reader who is following will not be carried to it.\n */\n void olderDone();\n void loadingFeed();\n // a PREPEND is handled by the scroll anchor, but this row is centred content that appears on its\n // own — and when the log is shorter than one page it never prepends at all\n void loadingOlder();\n const f = feedEl();\n if (!f) return;\n const height = f.scrollHeight;\n // a reader who scrolled up is not followed at all — `scrollBottom` re-checks this\n if (height === lastContentHeight) return;\n lastContentHeight = height;\n // two frames: one for the new row to enter the flow, one to paint\n requestAnimationFrame(() =>\n requestAnimationFrame(() => {\n if (atBottom()) pinToTail();\n }),\n );\n });\n // ONE live buffer PER AGENT. The old single slot was clobbered by every\n // session switch (setLive(null) on select) and by the feed refresh's\n // stillStreaming heuristic — a streaming reply visibly blinked out and\n // came back, or vanished entirely after visiting another session.\n const [liveByAgent, setLiveByAgent] = createSignal<Map<string, { text: string; reasoning: string; at: number }>>(new Map());\n const live = () => {\n const id = selected();\n return id ? liveByAgent().get(id) ?? null : null;\n };\n const setLive = (patch: { text: string; reasoning: string } | null | ((cur: { text: string; reasoning: string } | null) => { text: string; reasoning: string } | null)) => {\n const id = selected();\n if (!id) return;\n setLiveByAgent((prev) => {\n const m = new Map(prev);\n const next = typeof patch === \"function\" ? patch(prev.get(id) ?? null) : patch;\n if (next) m.set(id, { ...next, at: Date.now() });\n else m.delete(id);\n return m;\n });\n };\n /**\n * Apply the shared reconcile rule to the CURRENT buffer, keeping whichever halves survive.\n *\n * ONE place calls this, and it is the same rule the feed refresh uses — a second copy of \"which\n * halves are settled\" is how the two paths drifted before.\n */\n const settleLiveBuffer = () => {\n const buf = live();\n if (!buf) return;\n const next = reconcileLiveBuffer(buf, events(), sel()?.status);\n if (!next) setLive(null);\n else if (next.text !== buf.text || next.reasoning !== buf.reasoning) setLive(next);\n };\n // markdown-rendered live body, throttled so per-chunk deltas don't re-parse\n // the whole (growing) text on every single WS message\n const [liveText, setLiveText] = createSignal(\"\");\n // when the CURRENT thinking stretch started (reasoning arriving while text\n // is still empty) — powers the 💭 thinking elapsed-time readout\n const [thinkStartedAt, setThinkStartedAt] = createSignal(0);\n const liveStartedAt = () => thinkStartedAt();\n // reasoning renders from the SAME throttle tick — binding it raw re-painted\n // the (often huge) thinking block on every single chunk\n const [liveReasoning, setLiveReasoning] = createSignal(\"\");\n let liveRenderTimer: ReturnType<typeof setTimeout> | undefined;\n createEffect(() => {\n const l = live();\n if (!l) {\n clearTimeout(liveRenderTimer);\n liveRenderTimer = undefined;\n setLiveText(\"\");\n setLiveReasoning(\"\");\n return;\n }\n if (liveRenderTimer) return; // a render is already scheduled\n liveRenderTimer = setTimeout(() => {\n liveRenderTimer = undefined;\n setLiveText(live()?.text ?? \"\");\n setLiveReasoning(live()?.reasoning ?? \"\");\n // adaptive throttle: the WHOLE text re-parses each tick, so stretch the\n // interval as it grows — long streams were re-rendering every 60ms and\n // bogging Firefox down\n }, (live()?.text.length ?? 0) > 20_000 ? 250 : (live()?.text.length ?? 0) > 6_000 ? 120 : 60);\n });\n onCleanup(() => clearTimeout(liveRenderTimer));\n\n // A finish() turn often streams REASONING-ONLY (empty text) — the live\n // buffer then shows a 💭 thinking bubble that outlives the run: nothing\n // else arrives to overwrite it, and the refresh-path cleanup only runs on\n // unrelated events. The agent's status is the ground truth: the moment it\n // leaves running/waiting, any leftover live buffer is dead and must go.\n // (Reload \"fixes\" it today only because the buffer is memory-only.)\n createEffect(() => {\n // sweep EVERY agent's buffer against its OWN status, not the selected\n // one — nothing replays missed events on reconnect, so a background agent's\n // buffer could depend on a turn-boundary event that never arrived and leave\n // stale text under a writing cursor until a reload.\n //\n // `agents()` must be read HERE, outside the updater. Read inside it, the\n // effect subscribed to no signal at all: `liveByAgent` is an empty Map on the\n // first run, so `pruneDeadLiveBuffers` looped over nothing and never called\n // `statusOf`. That is how this sweep shipped as dead code — measured as\n // \"effect runs: 1, statusOf calls: 0\" — with the (correct, fully unit-tested)\n // helper underneath it.\n const list = agents();\n setLiveByAgent((prev) =>\n pruneDeadLiveBuffers(prev, (id) => list.find((x) => x.id === id)?.status),\n );\n // #131 (again): do NOT zero the clock here. This effect runs on EVERY `agents()`\n // change — a status snapshot arrives constantly — and a status transition is\n // exactly what happens when thinking ENDS. Zeroing here set `startedAt = 0` while\n // the 💭 block was still on screen, and `now() - 0` is elapsed-since-the-EPOCH:\n //\n // reported: \"thinking 497531h 23m\", appearing the moment reasoning finished\n //\n // The clock belongs to the reasoning stream: the delta handler below arms it and\n // clears it when real text arrives. Resetting it from a status sweep makes an\n // unrelated snapshot reach into stream bookkeeping — the same mixing of concerns\n // that produced the original #131.\n setThinkStartedAt((cur) => clearThinkClockIfDone(cur, list, selected(), live()));\n });\n\n // AUTO-SCROLL while live output streams, decided by the POLICY rather than the sticky\n // flag.\n //\n // The old version used `atBottom()` twice (once to gate, once inside the rAF). That flag\n // is only updated by `onscroll`, and streaming grows the bubble with NO scroll event, so\n // between the two reads it was stale — which is the shape of every report about follow\n // mode stopping by itself. Sampling the geometry at BOTH ends and comparing them is what\n // distinguishes \"content grew\" (follow) from \"the reader moved up\" (stop).\n createEffect(() => {\n // reasoning-only streams (💭 thinking, no text yet) must follow too —\n // keying the effect on liveText() alone left the feed parked while the\n // reasoning details block kept growing\n const txt = liveText();\n const rsn = live()?.reasoning ?? \"\";\n if (!txt && !rsn) return;\n // wait for the DOM to paint the new text, then pin — no comparison needed. Whether this\n // tick GREW the content is not a question the follow state cares about: if the reader is\n // following, the tail is where they should be, and if they are not, `atBottom()` keeps\n // us out of their way.\n requestAnimationFrame(() => {\n if (atBottom()) pinToTail();\n });\n });\n // Browsers pause requestAnimationFrame while a tab is hidden, so scroll\n // follow-ups for updates arriving in a background tab are silently dropped\n // — coming back showed a stale bottom line even though \"follow\" mode was\n // on. Re-sync once on return: jump to the tail iff the reader was still\n // following when they left. Re-armed on every session switch.\n\n // Pending echoes must clear at EXACTLY the moment the ⏳ queue badge clears:\n // both mean \"the model has consumed the message\". The badge counts\n // snapshot().pendingPrompts, which drops the instant drainPendingPrompts()\n // moves the queue into this.messages — so reconcile against that count\n // instead of waiting for every prompt-delivered note to arrive over WS (the\n // badge and the echo visibly disagreed during that gap).\n //\n // Reconcile by IDENTITY, not by count. This used to be slice(0, queued)\n // — \"the newest entries were consumed\" — which only holds when the model\n // drains the queue front-to-back. Cancelling a message in the MIDDLE also\n // lowers the count, and that heuristic then dropped a still-queued echo\n // while keeping the withdrawn one: with [A, B] queued, cancelling A leaves\n // the badge at 1 and slice(0,1) keeps A, discards B. Match on promptId and\n // keep the echoes the live queue can still account for.\n createEffect(() => {\n const queued = sel()?.pendingPrompts ?? 0;\n const liveIds = sel()?.pendingPromptIds;\n const key = pendingKey();\n // Reconcile THIS SESSION's echoes, read from the map rather than the signal.\n // Reading the signal here was wrong once the list became per-session: the\n // effect also re-runs on a session switch, and at that moment the signal\n // still holds the OUTGOING session's echoes while `key` is already the\n // incoming one — so it reconciled the old list against the new queue and\n // wrote the result under the new key, dropping the echo. The smoke\n // test caught it: \"undelivered log row leaked through as settled\".\n const mine = pendingFor(key);\n const next = reconcilePending(mine, queued, liveIds);\n if (next !== mine) writePending(key, next);\n });\n\n /**\n * Rebuild echoes the UI does not have for a queue it does.\n *\n * Echo rows are memory-only, so after a reload — or opening a session in a\n * new tab — the server still has a queued prompt while the UI has nothing to\n * render for it. `reconcilePending` cannot help: ids identify a prompt, they do\n * not carry its text, so there is no echo to reconcile and the queued message\n * shows up as its log row alone, i.e. already sent.\n *\n * So the queue now arrives with its text and any prompt we do not already have\n * an echo for is materialised here. Ids the UI already holds are SKIPPED, so\n * this never rewrites a live echo's text, images or position.\n */\n createEffect(() => {\n const queue = sel()?.pendingPromptQueue;\n if (!queue?.length) return;\n /**\n * Filed under the SELECTED AGENT's session, not the one on screen.\n *\n * `sel()` is an AGENT and `pendingKey()` is a TIMELINE — an agent's session and the session\n * being viewed are the same handle for a live agent and different for an older one, which is\n * exactly when this ran wrong: viewing session A while agent B had a queued prompt materialised\n * B's message into A's feed and raised A's ⏳ badge for a queue A did not have. Filing by the\n * queue's owner keeps the two views independent.\n */\n const key = sel()?.session || pendingKey();\n const have = new Set(pendingFor(key).map((p) => p.promptId).filter(Boolean));\n const missing = queue.filter((q) => q.id && !have.has(q.id));\n if (!missing.length) return;\n writePending(key, [\n ...missing.map((q) => ({\n id: `p${q.id}`,\n text: q.text,\n at: Number(q.at) || Date.now(),\n promptId: q.id,\n images: q.images?.map((i) => i.url),\n // the snapshot already carries `source`; dropping it made every\n // harness prompt render as a user one\n ...(q.source ? { source: q.source } : {}),\n })),\n ...pendingFor(key),\n ]);\n });\n\n createEffect(() => {\n const id = selected();\n if (!id) return;\n const onVisible = () => {\n if (document.visibilityState !== \"visible\") return;\n requestAnimationFrame(() => {\n if (nearBottom()) {\n setAtBottom(true);\n setMissed(0);\n scrollBottom(true);\n // returning to the tab and finding the tail is the same act of\n // reading as scrolling to it — it must settle the badge too\n markReadIfFollowing();\n }\n });\n };\n document.addEventListener(\"visibilitychange\", onVisible);\n onCleanup(() => document.removeEventListener(\"visibilitychange\", onVisible));\n });\n const sel = createMemo(() => agents().find((a) => a.id === selected()));\n /**\n * How many messages are queued for the visible session — from EITHER source.\n *\n * The badge was gated on the AGENT SNAPSHOT alone (`pendingPromptIds`). An echo is the same fact\n * from the other side: the UI just sent the prompt and has not seen it delivered yet, and a\n * snapshot that has not caught up — or a delivery note for another session that never cleared the\n * echo — leaves the echo on the timeline while the count says zero. Reported as \"youのはずっと\n * queuedが外れないし、タイムライン上部にはqueuedのカウントが出てない\".\n */\n /**\n * How many of the operator's messages are waiting to be consumed, for the feed being SHOWN.\n *\n * Counted from the LOG, through the same rule that decides whether a queued ROW is drawn\n * (`pendingEchoCount` → `remainingEchoes`). It used to count `pendingMsgs()` — client memory —\n * so the badge could outlive the row it was counting: the feed showed nothing queued and the\n * badge still said \"⏳ 1 message queued\", until a session switch rebuilt the list from the log.\n * Two implementations of \"still pending\" is exactly how those two drift apart.\n *\n * The server count is still needed for the case the client cannot see: a queue entry it has no\n * echo for at all (opened in another tab, or sent before a reload). It describes THIS feed only\n * when the selected agent's session is the one on screen — `sel()` is an agent and\n * `pendingKey()` is a timeline, and those differ for anyone else's session.\n */\n const queuedCount = () => {\n const mine = sel()?.session === pendingKey() || !sel()?.session;\n const fromServer = mine\n ? sel()?.pendingPromptQueue?.length ?? sel()?.pendingPromptIds?.length ?? sel()?.pendingPrompts ?? 0\n : 0;\n return Math.max(fromServer, pendingCount());\n };\n /**\n * Is the selected agent doing work that `stop` would stop?\n *\n * The server is the authority (`Agent.live`), because the client genuinely\n * cannot derive it: a parked tool and queued prompts both leave `status` at\n * \"idle\" while the loop is alive. Falls back to the status check for an older\n * server, where it is at worst the behaviour we had before.\n */\n const isSelLive = (): boolean => {\n const a = sel();\n if (!a) return false;\n return a.live ?? (a.status === \"running\" || a.status === \"waiting\" || a.status === \"needs_operator\");\n };\n /**\n * Is the TIMELINE BEING DISPLAYED the one that is live?\n *\n * `isSelLive()` answers \"is this AGENT working\", but the timeline is\n * per SESSION. With the agent working on session S2 while the user reads S1,\n * `isSelLive()` is true, so every S1 tool row that has lost its `tool_result`\n * reads \"running…\" — because `ToolRow` closes a stranded call via\n * `!agentActive && !res`.\n *\n * So activity must be attributed to the DISPLAYED session. The agent's snapshot\n * carries the session it is currently on; when that equals the timeline we are\n * showing, the agent-wide live flag is the right answer.\n *\n * Falls back to the agent's own live flag when the agent has no recorded\n * session (a brand-new agent), because then there is no second session to\n * confuse it with.\n */\nconst isTimelineLive = (): boolean => {\n // the FALLBACK view (timelineId === the agent id) is handled by the shared\n // rule — it used to be spelled out here, in the event gate and in the delta\n // gate separately, and the three drifted.\n return timelineIsLive(sel() as { id: string; session?: string } | undefined, timelineId(), isSelLive());\n };\n // prompt being edited → edit-prompt fork dialog. SETTLED user prompts only:\n // a pending (queued, not yet delivered) message offers ✕ cancel instead —\n // editing implies the model may have seen it, which is false while queued.\n const [editing, setEditing] = createSignal<{ eventId: string; text: string } | null>(null);\n // ask_user calls that already have their tool_result in the log — used to\n // disable the option buttons (answering twice sent duplicate prompts)\n const _answeredIds = createMemo(() => {\n const set = new Set<string>();\n for (const e of events()) {\n if (e.type === \"tool_result\" && e.data?.name === \"ask_user\") set.add(String(e.data.callId));\n }\n return set;\n });\n // optimistic echoes of prompts we just sent but haven't seen in the log yet\n /**\n * Optimistic echoes, PER SESSION.\n *\n * This was one global list cleared on every switch, while the other per-session\n * stores here (liveByAgent, timelineCache, drafts) all survive one. So leaving\n * a session with a queued message and coming back dropped its echoes: the top\n * bar still counted it (that comes from the server's pendingPromptIds) while\n * the timeline showed the log row as SETTLED — the two disagreed, and the\n * timeline read as \"already sent\".\n *\n * Keyed by the same handle the timeline uses, so a switch saves and restores\n * rather than discards.\n */\n const pendingBySession = new Map<string, PendingEcho[]>();\n const [pendingMsgs, setPendingMsgs] = createSignal<PendingEcho[]>([]);\n const pendingKey = (): string => timelineId() || selected() || \"?\";\n const pendingFor = (key: string): PendingEcho[] => pendingBySession.get(key) ?? [];\n const writePending = (key: string, next: PendingEcho[]): void => {\n // at most ONE echo per promptId, enforced at the single point every\n // writer passes through. Two writers race for the same message (the #87\n // rebuild from the server's queue, and the send path when the POST resolves),\n // and `reconcilePending` cannot catch a duplicate because it trims to the\n // server's COUNT — which is 1, so it never inspects two echoes agreeing on one\n // id. Last occurrence wins, so the fresher text survives.\n const seen = new Set<string>();\n const deduped: PendingEcho[] = [];\n for (let i = next.length - 1; i >= 0; i--) {\n const p = next[i]!;\n const id = p.promptId;\n if (!id) {\n deduped.push(p); // no id: cannot be matched, keep it\n continue;\n }\n if (seen.has(id)) continue;\n seen.add(id);\n deduped.push(p);\n }\n deduped.reverse();\n if (deduped.length === 0) pendingBySession.delete(key);\n else pendingBySession.set(key, deduped);\n if (pendingKey() === key) setPendingMsgs(deduped);\n };\n\n /* ---------- notification center (in-app only; push later) ---------- */\n type Notif = {\n id: string;\n agentId: string;\n kind: \"progress\" | \"finish\" | \"question\" | \"error\";\n title: string;\n body: string;\n at: number;\n read: boolean;\n /** source event id — clicking the notification scrolls to this row */\n eventId?: string;\n };\n const [notifs, setNotifs] = createSignal<Notif[]>([]);\n // hide 👻 ghost sessions (workspace directory missing on disk) — a toggle,\n // because they still hold history the operator may need\n const [hideGhosts, setHideGhosts] = createSignal(\n localStorage.getItem(\"teapot.hideGhosts\") === \"1\",\n );\n const [showNotifs, setShowNotifs] = createSignal(false);\n const unreadCount = () => notifs().filter((n) => !n.read).length;\n /** mark all notifications from ONE session read — fired when the operator\n * is following the timeline tail (they are, by definition, looking at the\n * newest content those notifications point to) */\n const markSessionRead = (agentId: string) => {\n setNotifs((list) => {\n let changed = false;\n const next = list.map((n) => {\n if (n.read || n.agentId !== agentId) return n;\n changed = true;\n return { ...n, read: true };\n });\n return changed ? next : list; // avoid identity churn on no-op runs\n });\n };\n /**\n * Mark the DISPLAYED session read when the reader is at its tail.\n *\n * \"タイムラインを下までスクロールしても通知が既読にならない\" — because the only\n * caller of `markSessionRead` was the feed-refresh path, and that path runs it\n * inside `if (events().at(-1)?.id !== beforeId)`. So a session whose unread\n * notifications were ALREADY in `events()` marked nothing when the operator\n * scrolled to the bottom: no new event arrived, so the branch never ran, and the\n * badge stayed lit until some unrelated event happened to refresh the feed.\n *\n * Reading the tail is the thing that means \"seen\" — whether the operator got\n * there by scrolling, by pressing the jump pill, or by returning to the tab. So\n * the rule lives in one place and every route to the tail calls it.\n *\n * The guard is not an optimisation detail: the feed's scroll handler fires on\n * every frame of a scroll, and `markSessionRead` allocates a mapped list even to\n * discover nothing changed. Checking for an actually-unread notification first\n * keeps a scroll cheap.\n */\n const markReadIfFollowing = () => {\n const id = selected();\n if (!id) return;\n if (!notifs().some((n) => !n.read && n.agentId === id)) return;\n markSessionRead(id);\n };\n /** unread for one agent INCLUDING its whole sub-tree (subs, sub-subs…) */\n const subtreeUnread = (agentId: string): number => {\n let total = notifs().filter((n) => !n.read && n.agentId === agentId).length;\n for (const child of agents()) {\n if (child.parent === agentId)\n total += subtreeUnread(child.id);\n }\n return total;\n };\n let notifSeq = 0;\n const addNotif = (n: Omit<Notif, \"id\" | \"at\" | \"read\">) => {\n setNotifs((list) =>\n [{ ...n, id: `n${++notifSeq}`, at: Date.now(), read: false }, ...list].slice(0, 50),\n );\n };\n /** events worth telling the operator about, even on another session/tab */\n const maybeNotify = (agentId: string, ev: any) => {\n const who = agents().find((a) => a.id === agentId)?.id ?? agentId;\n const eid = typeof ev.id === \"string\" ? ev.id : undefined;\n if (ev.type === \"message\" && ev.data?.final === true) {\n addNotif({\n agentId,\n kind: \"finish\",\n title: `${who} finished`,\n body: String(ev.data.content ?? \"\").slice(0, 300),\n eventId: eid,\n });\n } else if (ev.type === \"question\") {\n addNotif({\n agentId,\n kind: \"question\",\n title: `${who} asks a question`,\n body: String(ev.data.question ?? \"\").slice(0, 300),\n eventId: eid,\n });\n } else if (ev.type === \"error\") {\n addNotif({\n agentId,\n kind: \"error\",\n title: `${who} hit an error`,\n body: String(ev.data.message ?? \"\").slice(0, 300),\n eventId: eid,\n });\n } else if (ev.type === \"progress\") {\n addNotif({\n agentId,\n kind: \"progress\",\n title: `${who}: ${String(ev.data.doing ?? \"progress\")}`.slice(0, 120),\n body: [ev.data.recent && `recent: ${ev.data.recent}`, ev.data.next && `next: ${ev.data.next}`]\n .filter(Boolean)\n .join(\" · \")\n .slice(0, 300),\n eventId: eid,\n });\n }\n };\n /** jump the timeline to a specific event row (used by notification clicks) */\n const jumpToEvent = (eventId: string) => {\n const el = document.querySelector<HTMLElement>(`[data-eid=\"${eventId}\"]`);\n if (el) {\n el.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n el.classList.add(\"flash-target\");\n setTimeout(() => el.classList.remove(\"flash-target\"), 1600);\n }\n };\n\n // pair tool_call events with their (possibly still missing) results:\n // consumed results are hidden from the feed, calls render as one merged row\n // that shows \"running…\" until its result lands\n const pairInfo = createMemo(() => {\n const resFor = new Map<string, Ev>();\n const consumed = new Set<string>();\n const awaiting = new Map<string, Ev[]>();\n const orphanCalls = new Map<string, Ev>();\n for (const e of events()) {\n if (!FEED_TYPES.has(e.type)) continue;\n if (e.type === \"tool_call\") {\n const q = awaiting.get(e.data.callId) ?? [];\n q.push(e);\n awaiting.set(e.data.callId, q);\n } else if (e.type === \"tool_result\") {\n const call = awaiting.get(e.data.callId)?.shift();\n if (call) {\n resFor.set(call.id, e);\n consumed.add(e.id);\n } else {\n // the call scrolled out of the events window while the command\n // was still running. Without this the result rendered as a bare,\n // anonymous row — and when the window ALSO trimmed the call, the bash\n // row simply vanished, reading as \"it never finished\". Synthesise the\n // missing call so the tool still shows, WITH its output and timing.\n orphanCalls.set(e.id, e);\n }\n }\n }\n return { resFor, consumed, orphanCalls };\n }); // A question is ANSWERED only when a real operator reply arrived AFTER it —\n // a user prompt logged later than the question event. The tool_result that\n // pairs with the question is written immediately when the question is SHOWN\n // (it parks the loop), so its mere existence never means \"answered\".\n /**\n * Questions answered in THIS tab whose prompt event has not reached the log\n * yet.\n *\n * The derived set alone is only correct once the reply is LOGGED. Clicking an\n * option POSTs and shows a toast, so between the click and the bus event\n * landing the buttons stayed enabled — and a second click sent a DUPLICATE\n * prompt. Switching sessions and back \"fixed\" it because that re-read the log.\n *\n * Keyed by callId and looked up per row, so an entry whose question is no\n * longer loaded is inert rather than able to disable an unrelated question.\n * The log stays authoritative: anything answered elsewhere (another tab, a\n * reload, before this session was opened) is derived as before.\n */\n const [locallyAnswered, setLocallyAnswered] = createSignal<Set<string>>(new Set());\n const markAnswered = (callId: string) => {\n if (!callId) return;\n setLocallyAnswered((prev: Set<string>): Set<string> => {\n if (prev.has(callId)) return prev;\n const next: Set<string> = new Set<string>(prev);\n next.add(callId);\n return next;\n });\n };\n /** a session switch must not carry one session's answers into another */\n const clearLocallyAnswered = () => setLocallyAnswered(new Set<string>());\n const answeredQuestionIds = createMemo(() =>\n answeredQuestionIdsOf(events() as unknown as QuestionEvent[], locallyAnswered()),\n );\n /**\n * The pipeline's result: the rows, and how many queued echoes are actually among them.\n *\n * One memo, because the ⏳ badge and the feed must not disagree — see `buildTimelineWithCount`.\n */\n const timeline = createMemo(() =>\n // The pipeline lives in ./timeline so its stages cannot be reordered by accident\n // and so it can be driven with a plain array (#timeline-refactor). It used to be a\n // ~240-line memo that MUTATED its own input rows, so a re-run saw the previous\n // run's writes — the structural reason timeline bugs were intermittent.\n buildTimelineWithCount({\n events: events() as TimelineEvent[],\n consumed: pairInfo().consumed,\n pending: pendingMsgs() as PendingEchoLike[],\n echo: echoEv as (p: PendingEchoLike) => TimelineEvent,\n feedTypes: FEED_TYPES,\n renderedTypes: RENDERED_TYPES,\n renderedNoteEvents: RENDERED_NOTE_EVENTS,\n }),\n );\n const chatEvents = () => timeline().rows as Ev[];\n /** queued echoes the feed is DRAWING — the log's answer, not client memory's */\n const pendingCount = () => timeline().pendingCount;\n /**\n * Each row paired with the row ABOVE it, computed once per rebuild.\n *\n * WHY THIS EXISTS: the template used to pass `prev={chatEvents()[i() - 1]}`\n * directly. Inside `<For>`, `i` is a SIGNAL (`mapArray` does `indexes[j] = createSignal(i)`\n * and re-runs `indexes[j](j)` when slots shift), so every one of the ~16,600 rendered rows\n * became a SUBSCRIBER of the whole `chatEvents()` memo through that read. Any change to\n * the timeline therefore re-ran that lookup in every row, and each re-run walked the memo's\n * dependency graph — on a large session the UI was unusable on load.\n *\n * Pairing up front is O(n) once per rebuild and gives each row a plain value: `prev` is\n * then a prop comparison, not a reactive dependency on the entire array. `groupedWith()`\n * only needs the immediately preceding row, so nothing else is lost.\n */\n /**\n * Each row paired with its neighbours, REUSING the wrapper objects.\n *\n * ## Why the wrapper must be reference-stable (#scroll)\n *\n * `<For>` keys on the item's IDENTITY (Solid compares `items[0]`, `items[1]` … against the\n * previous array to decide what to keep). Returning `rows.map(… => ({row, prev, next}))`\n * allocated a FRESH object for every row on every rebuild, so every item looked new and\n * Solid disposed and re-created every row — a full remount of the timeline on each\n * incoming event. That is the reported \"新しいメッセージが来るたびにタイムラインがフラッシュ\n * する\": not a rendering fault, but the keying contract being violated.\n *\n * The cache below keeps one wrapper per row object for as long as that row object is\n * unchanged, and only replaces a wrapper when its `prev`/`next` actually moved. Rows\n * themselves are already reference-stable (`stabilize()`), so in steady state the array\n * contains the SAME objects and `<For>` patches only what really changed.\n */\n /**\n * The row `delta` positions away from `row`, as an ACCESSOR.\n *\n * Neighbours are needed for grouping (`groupedWith`) and for the spacing classes, but they\n * must not become part of the `<For>` item: keying on a `{row, prev, next}` wrapper meant a\n * row whose neighbour changed was DISPOSED and re-created, dropping its DOM state — an\n * expanded `<details>` slammed shut whenever the next event arrived (measured: 1 of 18 rows\n * per append, and 4 before the pipeline's own identity bugs were fixed).\n *\n * Because `<For>` now iterates `chatEvents()` directly, the item identity is the row, which\n * is reference-stable (`stabilize()`). The neighbour is derived on read, so `grouped` still\n * re-evaluates when it changes, without touching the row's identity.\n */\n // index by ROW IDENTITY once per rebuild (a WeakMap keeps it O(1) per lookup and cannot\n // leak). `chatEvents().indexOf(row)` inside every row would be O(n) per row — which is the\n // #178 quadratic pattern this file already had to remove once.\n const rowIndex = createMemo(() => {\n const m = new WeakMap<Ev, number>();\n chatEvents().forEach((r, i) => m.set(r, i));\n return m;\n });\n const neighbourOf = (row: Ev, delta: number): Ev | undefined => {\n const idx = rowIndex().get(row);\n if (idx === undefined) return undefined;\n return chatEvents()[idx + delta];\n };\n // Reference-stable echo rows: chatEvents re-runs on EVERY event burst, and\n // rebuilding the echo objects each time handed Solid's <For> a brand-new\n // reference — remounting the pending row (and, with the tail-anchor race,\n // letting it flash to the top of the viewport). Cache by id; only the\n // pending→sent flip builds a new object.\n const echoCache = new Map<string, Ev>();\n function echoEv(p: PendingEcho): Ev {\n const key = `${p.id}:${p.sent ? \"s\" : \"p\"}`;\n const hit = echoCache.get(key);\n if (hit) return hit;\n if (echoCache.size > 64) echoCache.clear();\n const ev: Ev = {\n id: p.id,\n // seq is assigned per-render in chatEvents (below every settled row,\n // in send order) — the sentinel here is just a stable placeholder\n seq: Number.MAX_SAFE_INTEGER,\n ts: new Date(p.at).toISOString(),\n session: sel()?.session ?? \"\",\n branch: sel()?.branch ?? \"br0\",\n parent: null,\n type: \"prompt\",\n data: {\n // was hardcoded \"user\", so a harness prompt looked like an operator\n // one — no queued marker of its own, and a ✕/✎ that cannot work on it\n source: p.source ?? \"user\",\n text: p.text,\n pending: !p.sent,\n ...(p.images?.length ? { images: p.images } : {}),\n ...(p.promptId ? { promptId: p.promptId } : {}),\n },\n };\n echoCache.set(key, ev);\n return ev;\n }\n const loadCfg = () => api(\"/api/config\").then(setCfg).catch(() => {});\n // password auth: any 401 from /api/* flips this on → login overlay\n const [authLocked, setAuthLocked] = createSignal(false);\n onMount(() => {\n const onUnauthorized = () => setAuthLocked(true);\n window.addEventListener(\"teapot:unauthorized\", onUnauthorized);\n onCleanup(() => window.removeEventListener(\"teapot:unauthorized\", onUnauthorized));\n });\n\n // operator task list draft — seeded per selected agent; while the user\n // hasn't touched it, it follows server updates (the agent edits it too)\n const [todoDraft, setTodoDraft] = createSignal(\"\");\n // false = raw markdown editor, true = rendered checklist (the default).\n // Reading a task list is the common case; the editor is one click away, and\n // a textarea as the landing view made the panel look like a form to fill in.\n const [todoViewMode, setTodoViewMode] = createSignal(true);\n const [todoDirty, setTodoDirty] = createSignal(false);\n let todoSeededFor = \"\";\n createEffect(() => {\n const id = selected();\n const serverTodo = agents().find((a) => a.id === id)?.todo ?? \"\";\n if (id && id !== todoSeededFor) {\n todoSeededFor = id;\n setTodoDirty(false);\n setTodoDraft(serverTodo);\n } else if (id && !todoDirty()) {\n setTodoDraft(serverTodo); // stay current with agent-side set_todo edits\n }\n });\n const saveTodo = async () => {\n const notify = (document.getElementById(\"todo-notify\") as HTMLInputElement)?.checked ?? true;\n if (!selected()) return;\n try {\n await api(`/api/agents/${selected()}/todo`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ text: todoDraft(), notify }),\n });\n setTodoDirty(false);\n // saving now shows the RESULT. The button previously left the editor\n // open with no visible confirmation, so \"save\" looked like it had done\n // nothing — and the obvious next click was to keep typing. Flipping to the\n // rendered checklist shows what was actually stored, which is also the\n // only way to see the agent's formatting of it.\n setTodoViewMode(true);\n flashHint(`tasks saved${notify && todoDraft().trim() ? \" & notification queued\" : \"\"}`);\n refreshAgents();\n } catch (ex) {\n flashHint(`save failed: ${(ex as Error).message}`);\n }\n };\n\n /** count markdown checkboxes (\"- [ ]\" / \"- [x]\") in the draft for the progress pill */\n const todoStats = createMemo(() => {\n let total = 0;\n let done = 0;\n for (const line of todoDraft().split(\"\\n\")) {\n const m = line.match(/^\\s*[-*+] \\[([ xX])\\]/);\n if (!m) continue;\n total++;\n if (m[1]!.toLowerCase() === \"x\") done++;\n }\n return { total, done };\n });\n\n/**\n * Merge a fresh snapshot list, keeping object identity for unchanged agents.\n *\n * the server re-serialises every agent on every poll and WS frame, and a new\n * object identity re-ran EVERY expression bound to `sel()*.x` — the \"right panel\n * flashes\" effect. Three call sites needed this and each had its own copy, so the\n * rule lives here once.\n */\nfunction mergeAgentSnapshots(prev: Agent[], next: Agent[]): Agent[] {\n const prevById = new Map(prev.map((a) => [a.id, a]));\n return next.map((a) => {\n const p = prevById.get(a.id);\n return p && JSON.stringify(p) === JSON.stringify(a) ? p : a;\n });\n}\n\n const refreshAgents = () =>\n api(\"/api/agents\")\n .then((d) => {\n let agentSetChanged = false;\n setAgents((prev) => {\n if (prev.length !== (d.agents ?? []).length) agentSetChanged = true;\n if ((d.agents ?? []).some((a: Agent) => !prev.some((p) => p.id === a.id)))\n agentSetChanged = true;\n return mergeAgentSnapshots(prev, d.agents ?? []);\n });\n // the session index is ONE request for ALL agents — only needed when\n // the agent set actually changes, not on every poll\n if (agentSetChanged) void refreshSessionIndex();\n })\n .catch(() => {});\n const refreshMetrics = () => api(\"/api/metrics\").then(setMetrics).catch(() => {});\n // scheduled (cron) tasks — shown in the right panel so \"what runs when\" is legible\n const [tasks, setTasks] = createSignal<any[]>([]);\n const loadTasks = () => api(\"/api/tasks\").then((d) => setTasks(d.tasks)).catch(() => {});\n const agentTasks = (id: string | null) => tasks().filter((t) => t.agent === id);\n\n /**\n * Sidebar: sub-agent groups are CLOSED by default.\n *\n * They used to default to OPEN, so loading the app expanded every sub-agent tree at once —\n * on a session with nested agents that buried the top-level chats the operator actually\n * scans. Collapsed-by-default keeps the sidebar to one row per top-level agent, and a group\n * opens only when asked.\n *\n * The stored set keeps its old meaning (`keys = collapsed ids`) so existing profiles and\n * `treeRowsOf()` are unchanged; `expandedSubs` below is the small override set that records\n * a deliberate expansion.\n */\n const [expandedSubs, setExpandedSubs] = createSignal<Set<string>>((() => {\n try {\n const keys: string[] = JSON.parse(localStorage.getItem(\"teapot.expandedSubs\") ?? \"[]\");\n return new Set(keys.filter((k) => typeof k === \"string\"));\n } catch { return new Set(); }\n })());\n const [collapsedSubs, setCollapsedSubs] = createSignal<Set<string>>((() => {\n try {\n const keys: string[] = JSON.parse(localStorage.getItem(\"teapot.collapsed\") ?? \"[]\");\n // a TOP-LEVEL chat id in this set is a leftover, not a choice.\n //\n // A chat's caret writes `chat:<id>` into `teapot.wsCollapsed`; nothing in\n // the current UI writes a bare top-level id here. An entry like that can\n // only predate it — and `treeRowsOf` honours this set (`collapsedSubs`),\n // so it silently hid the whole subtree while the caret pointed open and the\n // 🧩 badge kept counting. That is the reported DOM.\n //\n // Sub-agent ids are untouched: a sub-agent's caret DOES write here, and\n // those entries are the operator's own collapse state.\n return new Set(keys.filter((k) => typeof k === \"string\" && !k.startsWith(\"chat:\")));\n } catch { return new Set(); }\n })());\n /**\n * Is this sub-agent group collapsed RIGHT NOW?\n *\n * DEFAULT IS COLLAPSED. The persisted legacy `teapot.collapsed` set is still honoured (so\n * an existing profile keeps whatever it had), but \"not mentioned\" now means CLOSED — that is\n * `!expandedSubs().has(id)`.\n */\n const subsCollapsed = (id: string): boolean =>\n collapsedSubs().has(id) || !expandedSubs().has(id);\n const toggleCollapse = (id: string) => {\n // only an explicit EXPANSION is recorded; collapsing just drops the override\n const next = new Set(expandedSubs());\n if (next.has(id)) next.delete(id);\n else next.add(id);\n setExpandedSubs(next);\n localStorage.setItem(\"teapot.expandedSubs\", JSON.stringify([...next]));\n // and clear any legacy collapse entry, or the group stays shut with the caret open\n if (next.has(id) && collapsedSubs().has(id)) {\n const cleared = new Set(collapsedSubs());\n cleared.delete(id);\n setCollapsedSubs(cleared);\n localStorage.setItem(\"teapot.collapsed\", JSON.stringify([...cleared]));\n }\n };\n // The tree and grouping rules live in ./sidebar-tree so they can be unit\n // tested without a DOM (happy-dom does no layout). These wrappers only feed\n // the pure functions the live signal values.\n\n /**\n * Sidebar rows, annotated with where the WORKSPACE changes.\n *\n * The tree groups by parent/child agent only, so chats belonging to entirely\n * unrelated projects end up interleaved in one undifferentiated list — the\n * \"which chat was that?\" problem. Every agent already carries its workspace,\n * so grouping needs no new concept at all; a header row marks each project.\n * Sub-agents inherit their parent's workspace so a subtree stays together.\n */\n const _workspaceOf = (id: string): string => workspaceOfPure(agents(), id);\n /** the `chat:<id>` group this agent collapses under — its top-level ancestor,\n * so a sub-agent shares its parent's group rather than becoming its own */\n const chatGroupKey = (a: Agent): string => chatGroupKeyOf(agents(), a);\n\n /** collapsed workspace groups in the sidebar — persisted, like the\n * sub-agent collapse state above, so a reload keeps the operator's grouping */\n const [wsCollapsed, setWsCollapsed] = createSignal<Set<string>>((() => {\n try {\n const raw = JSON.parse(localStorage.getItem(\"teapot.wsCollapsed\") ?? \"[]\");\n const keys = Array.isArray(raw) ? raw.filter((x) => typeof x === \"string\") : [];\n\n // migrate keys left by the deleted #18 chat-header row, which wrote\n // `chat:<id>` here when clicked. That row is gone, so the keys are\n // UNREACHABLE — nothing can clear them, and each one collapses a chat the\n // operator never collapsed, hiding sub-agents the sidebar still badges.\n //\n // Narrow and one-shot: only `chat:<id>` entries are dropped, so `ws:` keys\n // and anything the current UI wrote survive; `teapot.wsCollapsed.v`\n // records that the pass ran.\n const VERSION = 2;\n const marker = Number(localStorage.getItem(\"teapot.wsCollapsed.v\") ?? \"0\");\n if (marker < VERSION) {\n const kept = keys.filter((k) => !k.startsWith(\"chat:\"));\n const dropped = keys.length - kept.length;\n if (dropped > 0) {\n localStorage.setItem(\"teapot.wsCollapsed\", JSON.stringify(kept));\n }\n localStorage.setItem(\"teapot.wsCollapsed.v\", String(VERSION));\n return new Set<string>(kept);\n }\n return new Set<string>(keys);\n } catch {\n return new Set<string>();\n }\n })());\n\n // A top-level chat is a collapse GROUP too: its row is the group, and its\n // sub-agents hang beneath it. Collapsing one hides it and its whole subtree\n // without touching its siblings in the same directory — the ability #18\n // wanted, without the extra header row it used to require.\n const chatCollapsed = createMemo<Set<string>>(() => {\n const out = new Set<string>();\n for (const k of wsCollapsed()) if (k.startsWith(\"chat:\")) out.add(k);\n return out;\n });\n\n const treeRows = createMemo(() =>\n // 👻 toggle: drop ghost sessions (workspace missing on disk) from the\n // sidebar tree entirely — they are noise once you know about them\n treeRowsOf(\n agents(),\n // every sub-agent group the operator has NOT explicitly expanded (default: closed)\n new Set(\n agents()\n .filter((a) => subsCollapsed(a.id))\n .map((a) => a.id),\n ),\n hideGhosts(),\n chatCollapsed(),\n ),\n );\n /**\n * Toggle a group header.\n *\n * `isCollapsed` is the state the header is DISPLAYING, not a re-derivation of\n * the stored set — those can disagree after #58, and when they do, keying the\n * decision off the stored set means clicking a header that plainly reads\n * \"collapsed\" takes the expand branch that looks for a key it does not have,\n * and instead COLLAPSES again. `alsoClear` is the key actually holding the\n * group hidden (a legacy `chat:<id>`), which no other control can remove.\n */\n const toggleWsGroup = (\n groupKey: string,\n label: string,\n isCollapsed: boolean,\n alsoClear?: string,\n ) => {\n const next = new Set(wsCollapsed());\n if (isCollapsed) {\n // expanding: drop every key that could be hiding this group\n next.delete(groupKey);\n if (alsoClear) next.delete(alsoClear);\n } else {\n next.add(groupKey);\n if (alsoClear) next.delete(alsoClear);\n // Collapsing hides the chat(s) in the group — including the one the\n // operator is currently reading. That reads as \"my session vanished\", so\n // say what happened and how to get back. The open conversation stays\n // loaded and keeps running either way; only its sidebar row goes away.\n const open = selected();\n if (open && (groupKey === `chat:${open}` || chatGroupKey(agents().find((x) => x.id === open)!) === groupKey))\n flashHint(`hid ${label} — click the header to show it`);\n }\n setWsCollapsed(next);\n try {\n localStorage.setItem(\"teapot.wsCollapsed\", JSON.stringify([...next]));\n } catch {\n /* private mode / quota — the toggle still works for this session */\n }\n };\n /** last path segment, for a compact workspace header */\n const basenameOf = (p: string): string => p.replace(/\\/+$/, \"\").split(/[/\\\\]/).pop() || p;\n /** \"1 chat\" / \"3 chats\" — a header saying \"1 chats hidden\" looks broken */\n const wsCountLabel = (ws: string): string => {\n const n = wsChatCounts().get(ws) ?? 0;\n return `${n} chat${n === 1 ? \"\" : \"s\"}`;\n };\n /**\n * How many TOP-LEVEL chats share each workspace.\n *\n * Several separate top-level chats commonly point at ONE working directory,\n * and grouping by path alone merged them into one anonymous bucket — the\n * exact \"which chat was that?\" question the grouping was meant to answer,\n * answered worst where it mattered most. The header now carries the count so\n * a shared directory reads as \"N chats\" instead of looking like one.\n */\n const wsChatCounts = createMemo(() => wsChatCountsOf(agents()));\n /**\n * Sidebar rows with TWO header levels.\n *\n * Level 1 — WORKSPACE: a header wherever the working directory changes, the\n * grouping #18 introduced so unrelated projects stop interleaving.\n *\n * Level 2 — CHAT: each TOP-LEVEL chat is its own group. Grouping by\n * workspace path alone gave every chat in a directory ONE identity — one\n * header, one collapse toggle, one row to hide — but \"some top-level chat\n * dirs exist in the same working directory and are separate\" means they must\n * be independently addressable. A count badge said \"there are 2\" without\n * giving them separate identities; nesting them under the directory fixes\n * the identity while keeping the project grouping meaningful.\n *\n * Sub-agents inherit their parent's chat group, so a subtree collapses as one.\n */\n // The row/grouping rules — including the #58 \"no chat header for a solo\n // chat\" decision — live in ./sidebar-tree, where they are unit-tested.\n const sidebarRows = createMemo(() =>\n sidebarRowsOf(agents(), treeRows(), wsCollapsed()),\n );\n\n /**\n * Events requested per page.\n *\n * the timeline pairs a tool_call with its tool_result by walking the\n * events it holds, so a window that can contain a result WITHOUT its call\n * strands the bash row at \"running…\" forever. The server default was raised\n * to 2000 for exactly this, but the UI passed an explicit `limit=300` and\n * therefore never benefited — 300 is small enough that a command streaming\n * one event per delta evicts its own call.\n *\n * A page is cheap (a tail read) and the clamp is server-side, so ask for the\n * size the pairing actually needs rather than a round number that undoes the\n * fix.\n */\n // gap between a `tool_call` and its `tool_result`, or the call is evicted while\n // the command runs and the row can only be rescued by the orphan path.\n //\n // Across every session log: the largest observed gap is **1284** events\n // (wait_children; bash tops out at ~302). Headroom at the worst case is ~716\n // events and **zero** gaps reach 2000, so eviction is not currently reachable.\n //\n // Recorded because this looks like a tuning knob worth \"fixing\" and is not:\n // raising it costs a bigger fetch on every refresh. If a future session does\n // produce a gap near 2000, that is the signal to raise it — not this comment.\n const FEED_PAGE = 2000;\n\n // null = show everything; otherwise only the chosen branch's events\n const [branchFilter, setBranchFilter] = createSignal<string | null>(null);\n // Reference-stabilize events across fetches: logged events are immutable,\n // so reuse the previous object when the id already exists. Without this,\n // every refresh produced all-new references and Solid's <For> tore down\n // and rebuilt EVERY timeline row (markdown re-parse included) — heavy on\n // long sessions and it collapsed open <details>.\n const evCache = new Map<string, Ev>();\n // evCache keys are scoped per session: raw ids (e1, e2…) are only unique\n // WITHIN one log, so a cross-session key collision made stabilize() return\n // another session's row — the \"teapot-b3c520e0 shows teapot-3's timeline\" bug.\n function cacheKey(ev: { id: string }): string {\n // scoped by the internal session id (the log), NOT the agent id — agent\n // ids are recycled across incarnations, so two incarnations of one agent\n // must not share cache entries either\n return `${timelineId() || (selected() ?? \"?\")}:${ev.id}`;\n }\n function stabilize(list: Ev[]): Ev[] {\n const out: Ev[] = Array.from({ length: list.length });\n for (let i = 0; i < list.length; i++) {\n const e = list[i]!;\n const k = cacheKey(e);\n const known = evCache.get(k);\n out[i] = known ?? e;\n if (!known) {\n evCache.set(k, e);\n if (evCache.size > 6000) {\n const oldest = evCache.keys().next().value;\n if (oldest !== undefined) evCache.delete(oldest);\n }\n }\n }\n return out;\n }\n\n // upward pagination: prepend the page before the oldest loaded id\n const [loadingOlder, setLoadingOlder] = createSignal(false);\n /**\n * The FIRST page for the current session is in flight.\n *\n * Without it the feed showed its \"no events yet — say something or press ▶ start\" fallback while\n * the fetch was still running, which reads as a session that lost its history rather than one\n * that is loading — reported as \"タイムラインロード中にアイテムが無いって表示されてるの微妙\".\n */\n const [loadingFeed, setLoadingFeed] = createSignal(false);\n const [olderDone, setOlderDone] = createSignal(false);\n // Generation token guarding every async timeline fetch. Switching sessions\n // bumps it; responses that come back after a switch belong to a dead view\n // and must NOT touch events/scroll (they used to overwrite the freshly\n // loaded timeline with the PREVIOUS session's rows).\n let feedGeneration = 0;\n // /branches is fork-only data: skip refetching within one generation\n let lastBranchesGen = -1;\n\n /** merge fetched page into state by id, seq-ascending, refs stabilized */\n function mergeEvents(incoming: Ev[]): void {\n const stable = stabilize(incoming);\n setEvents((prev) => {\n // FAST PATH: the overwhelmingly common case is an APPEND — a new event arrived at the\n // end. Rebuilding a Map and re-sorting the whole array for that hands `<For>` a new\n // array of 1,100 entries every frame, which makes it diff every row: that is the\n // \"スクロール中に変にブレたり、一瞬ブランクになったり\" report. Appending keeps every\n // existing reference equal, so Solid patches only the tail.\n if (stable.length > 0 && prev.length > 0) {\n const newest = prev[prev.length - 1]!;\n const allNewer = stable.every((e) => e.seq > newest.seq);\n const known = new Set(prev.map((e) => e.id));\n if (allNewer && stable.every((e) => !known.has(e.id))) {\n return [...prev, ...stable];\n }\n }\n // general path: dedupe by id, then sort. Used for backfill (prepend) and for a\n // reconnect that fills a gap.\n const map = new Map<string, Ev>();\n for (const e of prev) map.set(e.id, e);\n let added = false;\n for (const e of stable)\n if (!map.has(e.id)) {\n map.set(e.id, e);\n added = true;\n }\n // nothing new → return the SAME array, so no re-render happens at all\n if (!added) return prev;\n return [...map.values()].sort((a, b) => a.seq - b.seq);\n });\n }\n\n // After the initial page lands, the feed may not even fill the viewport\n // (a fresh session shows only the last ~dozen rows). scrollTop can never\n // reach the \"at top\" trigger then, so older pages were unreachable. Keep\n // pulling until the feed overflows or history is exhausted.\n async function backfillUntilScrollable(): Promise<void> {\n const id = selected();\n if (!id || olderDone() || loadingOlder()) return;\n /**\n * A session following the tail has nothing to backfill FOR.\n *\n * Backfilling exists so the reader can scroll up when the first page does not fill the\n * screen. While pinned to the tail of a session that is still producing rows, the feed grows\n * at the bottom, so \"not scrollable yet\" stays true for a moment and this loop pulls up to 20\n * OLDER pages — reported as \"稼働中のエージェントのセッションに移動するときに、とても重くて…\n * その後スクロールが数十分前レベルのアイテムまで遡ることがある\".\n *\n * Both symptoms come from that: 20 sequential round trips on every switch to a running\n * session (the \"とても重い\"), and the extra prepended history leaving the viewport parked far\n * above where the reader expected to be (the \"遡る\").\n *\n * Reading upward is what creates the need for more history, and `loadOlder()` already runs on\n * scroll. So the eager fill is skipped while following.\n */\n if (atBottom()) return;\n // EVERYTHING is already loaded → no older history exists at all. Exit\n // before touching the server (a fresh session with a short log lands\n // here immediately — no probing, no loop).\n if (events().length >= eventsTotal()) {\n setOlderDone(true);\n return;\n }\n // Only trust measurements from a LAID-OUT feed. Hidden/unmounted feeds\n // report scrollHeight 0 and would look \"never full\", causing pointless\n // page pulls; if we cannot measure, we do not guess.\n const measurable = () => {\n const f = feedEl();\n return f && f.clientHeight > 0 ? f : null;\n };\n let guard = 0;\n while (guard++ < 20 && !olderDone() && selected() === id) {\n const f = measurable();\n if (f && f.scrollHeight > f.clientHeight + 40) return; // scrollable now\n if (events().length >= eventsTotal()) {\n setOlderDone(true);\n return;\n }\n const before = events().length;\n await loadOlder();\n // empty page (or fully deduped) means history is exhausted — loadOlder\n // has set olderDone itself in the empty-page case\n if (events().length === before) return;\n // prepending grows the content ABOVE the viewport; keep the reader\n // pinned to the tail while we backfill, or follow mode silently died\n // here and \"new messages appear at the top of my view\" was the result.\n // Sampled, not the sticky flag: prepending is itself a height change.\n if (atTail(tailSample()) && selected() === id) scrollBottom(true);\n }\n }\n\n async function loadOlder(): Promise<void> {\n const id = selected();\n const oldest = events()[0];\n if (!id || !oldest || loadingOlder() || olderDone()) return;\n setLoadingOlder(true);\n try {\n const f = feedEl();\n const prevH = f?.scrollHeight ?? 0;\n const prevTop = f?.scrollTop ?? 0;\n const bf = branchFilter();\n const tid = timelineId();\n /**\n * Ask for the SESSION whenever we know one — even when it equals the agent id.\n *\n * This used to be `tid !== id`, i.e. \"only send ?session= when it is not the agent id\". But\n * `tid` can be an agent id while the URL names a different session (the index had not loaded\n * when the first select ran), and omitting the query then made the server answer with the\n * agent's BOUND session. Reported as \"パスは `/session/teapot-10-16854917` なのに\n * `tyb2-8-0161a4af` のセッションのタイムラインになってた\" — the address bar and the feed\n * disagreeing about which conversation is on screen.\n *\n * The server already validates ownership: `?session=` is ignored unless the agent owns the id\n * (see `/api/agents/:id/events`). So sending it is safe, and it is the only way the feed can\n * agree with the URL.\n */\n const res = await api(eventsUrl(id, { before: oldest.id }, tid, bf));\n const page: Ev[] = res.events ?? [];\n if (page.length === 0) { setOlderDone(true); return; }\n // still the same session AND still anchored on the same oldest row?\n // (a plain selected() check can't be fooled by same-session tail\n // refreshes, which never touch the head of the list)\n if (selected() !== id || events()[0]?.id !== oldest.id) return;\n mergeEvents(page);\n // keep the viewport anchored to the same content after prepending\n requestAnimationFrame(() => {\n if (selected() === id) {\n const el = feedEl();\n if (el) el.scrollTop = prevTop + (el.scrollHeight - prevH);\n }\n });\n } catch { /* transient — user can scroll up again */ }\n finally { setLoadingOlder(false); }\n }\n\n /**\n * `&session=<internalId>` for the events endpoints — the ONE place that decides it.\n *\n * The frontend has four events call sites (older page, first page, catch-up, and the\n * loadOlder prepend). Three of them used to build this expression independently as\n * `tid !== id`, i.e. \"send ?session= only when the handle is not the agent id\" — and each time\n * one was fixed the others silently kept the bug, which is why the symptom returned in the\n * OPPOSITE direction: the feed showed the previous session's timeline under the new URL.\n *\n * `tid !== id` cannot express the question. `tid` falls back to the agent id while the session\n * index loads, and in that state omitting the query makes the server answer with the agent's\n * BOUND session. So: send it whenever the index KNOWS the id. The server re-validates ownership\n * (`?session=` is ignored for a session the agent does not own), so this is safe.\n */\n function sessionQuery(agentId: string, tid: string): string {\n if (!tid) return \"\";\n /**\n * `tid === agentId` does NOT mean \"the bound session, nothing to say\".\n *\n * The timeline handle falls back to the agent id while the index is loading, and in that state\n * the URL may already name a DIFFERENT session. Omitting the query then lets the server answer\n * with the agent's BOUND session, so the feed shows one conversation under another's address —\n * the reported symptom, in both directions.\n *\n * If the index knows the id, it is a real session and must be asked for. If it does not, there\n * is nothing to ask for: the bound log is the only answer available.\n */\n return masterSessionIndex().has(tid) ? `&session=${encodeURIComponent(tid)}` : \"\";\n }\n\n /**\n * The events URL for one page of a session's timeline.\n *\n * Both fragments that every call site needs were built inline at three places each:\n * `&session=` (the bug that kept coming back, because fixing one copy left the others) and\n * `&branch=…&lineage=true`. Duplicated URL assembly is how a field gets dropped from ONE path and\n * not the others, so it lives here.\n *\n * `lineage=true` is not optional: the tail fetch asks for it, so a filtered fork's first page\n * shows the INHERITED history. Omitting it on the older-pages fetch switched to strict filtering\n * and the parent's pre-fork rows vanished from the top, reading as data loss.\n */\n function eventsUrl(\n id: string,\n page: { before?: string; after?: string },\n tid: string,\n bf: string | null,\n ): string {\n const parts = [`/api/agents/${encodeURIComponent(id)}/events?limit=${FEED_PAGE}`];\n if (page.before) parts.push(`&before=${encodeURIComponent(page.before)}`);\n if (page.after) parts.push(`&after=${encodeURIComponent(page.after)}`);\n const sessQ = sessionQuery(id, tid);\n if (sessQ) parts.push(sessQ);\n if (bf) parts.push(`&branch=${encodeURIComponent(bf)}&lineage=true`);\n return parts.join(\"\");\n }\n\n async function loadEvents(id: string, sessionId?: string) {\n // DON'T bump the generation here. Bumping made two racing loads for the\n // SAME session invalidate each other: select() → loadEvents (gen N) and a\n // WS-triggered refresh (gen N+1) could resolve in either order, and the\n // loser was dropped — if the WS one landed first, the select's own fetch\n // was discarded AFTER the session had been cleared, leaving an EMPTY\n // timeline until some later event happened to trigger another refresh.\n // The generation only needs to move on actual session SWITCHES.\n const genAtStart = feedGeneration;\n const tid = sessionId ?? timelineId() ?? \"\";\n try {\n const bf = branchFilter();\n // /branches only changes on fork — fetch it on session switch, not on\n // every tail refresh (each call re-reads the log server-side otherwise)\n const needsBranches = genAtStart !== lastBranchesGen || !branches().length;\n // only when there is nothing to show yet: a tail refresh must not flash a spinner over a\n // perfectly good timeline\n if (!events().length) setLoadingFeed(true);\n /**\n * SKILLS are fetched SEPARATELY, not awaited with the timeline.\n *\n * They were the third leg of this `Promise.all`, which made every session switch wait for\n * a filesystem walk over three skill roots before a single row could paint. Skills are only\n * read by the `/` palette and the settings list, so nothing on screen needs them — part of\n * \"稼働中のエージェントのセッションに移動するときに、とても重い\".\n *\n * Failure is ignored on purpose: an agent whose skill roots are unreadable should still\n * show its timeline.\n */\n void api(`/api/agents/${id}/skills`)\n .then((sk) => {\n if (genAtStart === feedGeneration && selected() === id) setAgentSkills(sk.skills ?? []);\n })\n .catch(() => {});\n const [ev, br] = await Promise.all([\n // `lineage=true` so a filtered fork shows the history it inherited,\n // matching the context the agent actually reasons over. Filtering by\n // strict branch id showed less than the model sees, which read as data\n // loss even though nothing was missing from the log.\n api(eventsUrl(id, {}, tid, bf)),\n needsBranches\n ? api(`/api/agents/${id}/branches`)\n : Promise.resolve({ branches: branches() }),\n ]);\n if (needsBranches) lastBranchesGen = genAtStart;\n // stale iff a DIFFERENT session is now selected or a switch happened\n // while we were in flight — same-session refreshes must not drop us\n if (genAtStart !== feedGeneration || selected() !== id) return; // stale view\n setEvents((prev) => {\n // tail refresh: union-merge so prepended older pages survive, and\n // stabilize() keeps unchanged rows reference-identical (no re-mounts)\n const map = new Map<string, Ev>();\n for (const e of prev) map.set(e.id, e);\n for (const e of stabilize(ev.events)) map.set(e.id, e);\n return [...map.values()].sort((a, b) => a.seq - b.seq);\n });\n setEventsTotal(ev.total ?? ev.events.length);\n setBranches(br.branches);\n } catch { /* agent may be gone */ }\n finally { setLoadingFeed(false); }\n }\n\n function feedEl() { return document.querySelector<HTMLElement>(\".feed\"); }\n /**\n * The feed's geometry, as the follow rule wants it.\n *\n * Sampling at the moment of the decision is the whole point: the old code kept a sticky\n * `atBottom` flag updated by `onscroll`, and content can grow with NO scroll event, so\n * the flag was stale exactly when it mattered.\n */\n function tailSample(): TailSample | null {\n const f = feedEl();\n if (!f) return null;\n return { top: f.scrollTop, height: f.scrollHeight, viewport: f.clientHeight };\n }\n /** is the reader at the tail RIGHT NOW */\n function nearBottom() {\n // `atTail` uses the one constant slack. The old `bottomSlack()` derived the threshold\n // from the composer's overflow, so \"at the bottom\" meant a different pixel distance\n // whenever the composer grew a line — which is what made follow mode tug at the\n // reader. Content growth is handled by the rule, not by widening the threshold.\n const s = tailSample();\n return atTail(s);\n }\n /**\n * PIN the feed to the tail — the ONLY way the view ever moves while following.\n *\n * `scrollTop = scrollHeight` is clamped by the browser to the real maximum, so it is\n * correct without knowing the viewport. That matters: the previous design compared a\n * `viewport` read before and after the change, and every case where it settled outside\n * that window (the composer growing above all) produced a different bug.\n *\n * Repeating it is harmless, which is why every layout-changing path can call it without\n * having to reason about order.\n */\n function pinToTail() {\n const f = feedEl();\n if (!f) return;\n f.scrollTop = f.scrollHeight;\n // record where the write landed, so the scroll event it produces is attributable to US\n // rather than to the reader (see `classifyScroll`)\n ledger = { top: f.scrollTop, height: f.scrollHeight };\n setMissed(0);\n }\n function scrollBottom(force = false) {\n if (force || atBottom()) pinToTail();\n }\n\n // Per-session timeline snapshots: switching back to a recently viewed\n // session restores its last-known rows INSTANTLY, then loadEvents refreshes\n // in the background. Without this, every switch cleared the feed and\n // re-fetched (a visible blank flash + full round trip).\n /**\n * Per-session timeline snapshots, capped by BYTES as well as by count.\n *\n * Returning to a recently viewed session restores its rows instantly instead of blanking the feed\n * and re-fetching. But a snapshot holds every event object of that session, and real logs on this\n * machine run to 72,923 events / 52.8MB of JSON in ONE session — six of those is hundreds of\n * megabytes of live JS objects, which is the frontend growth reported as \"ずっと開いてると900MBとか\n * いく\". A count-only cap cannot see that: six small sessions are cheap and six huge ones are not,\n * and the count says 6 either way.\n *\n * MEASURED sizes on this machine: the eight largest logs total 183MB of JSON, so a byte budget is\n * the number that actually bounds retention.\n */\n const timelineCache = new Map<string, { events: Ev[]; total: number; at: number; bytes: number }>();\n /**\n * Where the reader was in each session, as a ROW and an offset — never a pixel `scrollTop`.\n *\n * A pixel offset is not portable between sessions: `scrollTop` is an offset into content whose\n * height differs, and the browser CLAMPS it to the maximum for the new content. So a stale value\n * from a long session landed hundreds of messages back in a short one, and coming back to the\n * long session could not restore anything at all because `select()` unconditionally scrolled to\n * the tail. Reported as \"セッションを移ってから戻ると数百個前のメッセージまでスクロールが移動する\".\n *\n * `data-eid` is the row's log event id: stable across re-wrap, and it names the ROW rather than a\n * distance, which is the only thing that means the same in a different conversation.\n */\n const scrollMemory = new Map<string, { eid: string; delta: number; atTail: boolean }>();\n const SCROLL_MEMORY_MAX = 24;\n const TIMELINE_CACHE_MAX = 6;\n /** ~24MB of retained event data: several small sessions, or one large one. */\n const TIMELINE_CACHE_MAX_BYTES = 24 * 1024 * 1024;\n /** a cheap upper bound on what one event retains — content plus every field a row renders */\n const approxEventBytes = (e: Ev): number => {\n const d = e.data as Record<string, unknown> | undefined;\n let n = 64; // the envelope (id, seq, ts, type, branch, session…)\n if (d) for (const v of Object.values(d)) if (typeof v === \"string\") n += v.length * 2;\n return n;\n };\n\n /**\n * The session an agent should open: the one the server says it is BOUND to, falling back to the\n * newest on disk. Preferring mtime alone would resurrect an old session whose directory is stale\n * but whose log is newer, putting the view and the agent's actual timeline out of step.\n */\n const latestSessionOf = (agentId: string, requested?: string | null): string | null =>\n resolveTimelineSession(\n sessionsByAgent().get(agentId),\n agents().find((a) => a.id === agentId)?.session,\n requested,\n );\n\n async function select(id: string, push = true, forceSession?: string | null) {\n const prevId = selected();\n const prevTid = timelineId();\n const prevEvents = events();\n const prevTotal = eventsTotal();\n // bump FIRST so any in-flight fetch for the previous session lands on a\n // dead generation and is dropped instead of overwriting this one's rows\n feedGeneration++;\n // resolve the agent's CURRENT internal session id — the timeline handle.\n // Falls back to the agent id for brand-new agents whose first session dir\n // isn't listed yet (the events fetch still works: same log).\n if (!sessionsByAgent().size) void refreshSessionIndex(); // first select before index landed\n /**\n * NEVER let the agent id become the timeline handle once we know better.\n *\n * `?? id` was a fallback for a brand-new agent whose first session directory is not listed\n * yet — but it also fired for any agent when the session INDEX had not landed, and that value\n * is what `navigate()` writes into the URL. The result was `/session/<agentId>`, which is not a\n * session id at all: TWO tabs deep-linking to different sessions then both resolved through\n * `latestSessionOf(agentId)` and opened the SAME one (\"それぞれリロードするとどっちも\n * /session/tyb2-8 になってしまった\").\n *\n * An explicit request is honoured as-is while the index is unknown: the server answers\n * `?session=<id>` regardless, and the index will confirm it a moment later. Falling back to the\n * agent id only happens when there is neither a request nor any owned session.\n */\n /**\n * `resolved` first — and when the index has nothing to say, NEVER the agent id.\n *\n * The two-tabs bug: `latestSessionOf(...) ?? id` put the AGENT id into the URL whenever the\n * index had not landed, and an agent id resolves to that agent's latest session — so two tabs\n * deep-linked to different sessions both opened the same one.\n *\n * `forceSession` only fills the gap when the index is genuinely EMPTY (nothing to resolve\n * against). Once ownership data exists, resolution has an opinion and it wins: honouring a\n * request the agent does not own would let a crafted URL cross into another timeline.\n */\n /**\n * `resolved` decides when the index has an opinion; otherwise the request may name a session\n * the index has not scanned yet.\n *\n * `forceSession` must be a REAL session id, though. Passing an arbitrary path segment through\n * (the boot URL is often a placeholder like `/session/test`) would make it the timeline handle\n * and the events fetch would ask for a session that does not exist.\n */\n const resolved = latestSessionOf(id, forceSession);\n const requested = forceSession && masterSessionIndex().has(forceSession) ? forceSession : null;\n let tid = resolved ?? requested ?? id;\n if (prevId !== id || tid !== prevTid) {\n /**\n * Remember where the reader was in the OUTGOING session, as a ROW rather than a pixel.\n *\n * This MUST be the first thing in the switch, before any signal is written. Solid propagates\n * a write synchronously, so `setSelected(id)` has already re-run the feed's `<For>` by the\n * time the next line executes — capturing after it measured an EMPTY feed (`anchor: null`,\n * `scrollTop: 0`) and remembered nothing. A pixel `scrollTop` is also not portable between\n * sessions: it is an offset into content of a different height and the browser clamps it, so\n * a stale value from a long session landed hundreds of messages back in a short one.\n * `data-eid` names the ROW, which is the only thing that means the same in another conversation.\n */\n {\n const f = feedEl();\n const anchor = f ? firstVisibleRow(f) : null;\n const outKey = prevTid || prevId;\n if (f && outKey && anchor) {\n const row = f.querySelector<HTMLElement>(anchor.sel);\n const eid = row?.dataset.eid ?? \"\";\n const atTail = f.scrollHeight - f.scrollTop - f.clientHeight <= AT_TAIL_PX;\n if (eid) scrollMemory.set(outKey, { eid, delta: f.getBoundingClientRect().top - anchor.top, atTail });\n while (scrollMemory.size > SCROLL_MEMORY_MAX) {\n const oldest = scrollMemory.keys().next().value;\n if (oldest === undefined) break;\n scrollMemory.delete(oldest);\n }\n }\n }\n // remember what the outgoing session looked like so returning is instant\n if (prevTid && prevEvents.length) {\n const bytes = prevEvents.reduce((n, e) => n + approxEventBytes(e), 0);\n // a single snapshot bigger than the whole budget is not worth keeping: restoring it costs a\n // memory spike for one switch, which is exactly what the re-fetch path already handles\n if (bytes <= TIMELINE_CACHE_MAX_BYTES) {\n timelineCache.set(prevTid, { events: prevEvents, total: prevTotal, at: Date.now(), bytes });\n }\n /**\n * Evict oldest-first until BOTH budgets hold. The byte budget is the one that matters: six\n * snapshots of a 72k-event session is hundreds of MB, while six snapshots of a small\n * conversation is a few MB — a count alone cannot tell them apart.\n */\n const totalBytes = () => [...timelineCache.values()].reduce((n, v) => n + v.bytes, 0);\n while (timelineCache.size > TIMELINE_CACHE_MAX || totalBytes() > TIMELINE_CACHE_MAX_BYTES) {\n const oldest = [...timelineCache.entries()].sort((x, y) => x[1].at - y[1].at)[0];\n if (!oldest) break;\n timelineCache.delete(oldest[0]);\n }\n }\n // drop the previous session's timeline immediately — otherwise it stays\n // visible (or bleeds into the merge) until this session's fetch lands,\n // which read as \"the old conversation showing up in the new session\"\n setEvents([]);\n evCache.clear(); // event ids are per-log (e1, e2…) — never share across sessions\n // the optimistic answer set is per-SESSION. Carrying it across would\n // disable a question that merely reuses a callId, or one the operator\n // has not actually answered in this session.\n clearLocallyAnswered();\n // NOTE: live buffers are per-agent — leaving a session must NOT drop its\n // streaming bubble; the map keeps every session's stream independently.\n setCompacting(null);\n setMissed(0);\n // follow mode must NOT leak across sessions: leaving it false showed\n // \"jump to present\" on a brand-new/empty timeline whose feed had never\n // been scrolled (the pill only disappears once a real scroll lands)\n setAtBottom(true);\n // a session switch changes the geometry completely, so the previous sample would\n // read as an enormous scroll in whichever direction\n lastSample = undefined;\n }\n setSelected(id);\n setTimelineId(tid);\n saveDraft(drafts.get(id) ?? \"\"); // restore THIS session's unsent draft\n setBranchFilter(null);\n setOlderDone(false);\n setLoadingOlder(false);\n writePending(prevTid || prevId || \"?\", pendingMsgs());\n setPendingMsgs(pendingFor(tid || id));\n localStorage.setItem(\"teapot.session\", id);\n navigate(tid, push); // URL carries the internal session id, not the agent id\n // HYDRATE from cache first: rows paint immediately (no blank flash), and\n // loadEvents below merges in whatever happened since. Cached events are\n // re-stabilized into evCache so reference identity survives the switch.\n const cached = timelineCache.get(tid);\n if (cached?.events.length) {\n /**\n * ONE `stabilize()` call.\n *\n * It ran twice — once for effect and once for the value — and the first call was pure waste:\n * `stabilize` WRITES to `evCache` on the way through, so the second pass found every key\n * already present and returned the same objects. MEASURED on a 2,000-event session: switching\n * back to a previously-loaded session cost 1,942ms with a 553ms frozen frame, and that is the\n * \"1回でもロードしたことがあるセッションに再度移動すると絶望的にラグい\" report.\n */\n setEvents(stabilize(cached.events));\n setEventsTotal(cached.total);\n /**\n * A cached session still has to REFRESH, and that is not instant.\n *\n * The spinner was gated on `!events().length`, which is true for a first load and false here —\n * so a switch that had to re-fetch showed a perfectly good (but stale) timeline with no sign\n * anything was happening, which reads as \"the UI is frozen\". The rows stay on screen; the\n * spinner says a refresh is in flight.\n */\n setLoadingFeed(true);\n // the rows paint from cache in the same frame; restoring here and again after the fetch would\n // fight over `scrollTop`, so only the post-fetch restore moves it\n if (!scrollMemory.has(tid)) {\n requestAnimationFrame(() => {\n if (selected() === id) scrollBottom(true);\n });\n }\n }\n // lazy sessions sit in \"stopped\" until touched — clicking loads them\n api(`/api/agents/${id}/load`, { method: \"POST\" }).then(refreshAgents).catch(() => {});\n await loadEvents(id, tid);\n if (selected() !== id) return; // another switch won while we were loading\n // RECONCILE this agent's live buffer against the timeline just loaded.\n //\n // The pruning effect depends on `agents()` alone, so it cannot fire for a\n // session switch — and if the agent was already idle at the switch, the\n // snapshot did not change either, so nothing pruned. Returning to the session\n // then re-displayed stale stream text WITH the writing cursor.\n //\n // Runs after the fetch so `events()` is the real timeline, and it keeps a\n // genuine in-flight stream (the log does not have it yet).\n setLiveByAgent((prev) => {\n const cur = prev.get(id) ?? null;\n const next = reconcileLiveBuffer(cur, events(), sel()?.status);\n if (next === cur) return prev;\n const m = new Map(prev);\n if (next) m.set(id, next);\n else m.delete(id);\n return m;\n });\n // the freshly fetched snapshot is authoritative: a compaction may be\n // mid-flight on this session (missed bus events while another tab/agent\n // was selected) — seed the banner from ctx.compacting\n setCompacting(\n sel()?.ctx?.compacting ? { phase: String(sel()!.ctx!.compacting) } : null,\n );\n /**\n * Restore where the reader was, if we know; otherwise go to the tail.\n *\n * This used to be `scrollBottom(true)` unconditionally, so every switch — including coming back\n * to what you were reading — threw the position away. The remembered position is a row id, so\n * it survives rows being re-wrapped or the page being re-fetched; a row that is no longer in the\n * first page simply does not match and we fall back to the tail rather than guessing a pixel.\n */\n const restore = scrollMemory.get(tid);\n requestAnimationFrame(() => {\n if (selected() !== id) return;\n if (restore) {\n const f = feedEl();\n const row = f?.querySelector<HTMLElement>(`[data-eid=\"${CSS.escape(restore.eid)}\"]`);\n if (f && row) {\n f.scrollTop += row.getBoundingClientRect().top - f.getBoundingClientRect().top + restore.delta;\n ledger = { top: f.scrollTop, height: f.scrollHeight };\n setAtBottom(restore.atTail);\n if (restore.atTail) scrollBottom(true);\n return;\n }\n }\n scrollBottom(true);\n });\n // the first page may not fill the viewport — pull older pages until it\n // does (or history runs out), so infinite scroll is always reachable\n void backfillUntilScrollable();\n }\n\n /* ---------- realtime over WebSocket (auto-reconnect) ---------- */\n const [connected, setConnected] = createSignal(false);\n let ws: WebSocket | null = null;\n let timer: ReturnType<typeof setTimeout> | null = null;\n onCleanup(() => ws?.close());\n let pendingRefresh = false;\n /** set when a socket frame reveals a GAP; cleared by the one REST read that closes it */\n let feedNeedsRead = false;\n // the visibilitychange listener is registered ONCE below (outside\n // connectWs) — a reconnect used to add another copy each time, leaking\n // closures and timers with every reconnect cycle\n let onTabVisible: (() => void) | null = null;\n document.addEventListener(\"visibilitychange\", () => onTabVisible?.());\n onCleanup(() => { onTabVisible = null; });\n // the FIRST onopen must not double-load; every later one is a reconnect\n let firstConnect = true;\n /**\n * After a socket reconnect, fetch only the events we missed.\n *\n * Asks `/events?after=<last id we hold>` and merges the result. Three outcomes,\n * and the distinction matters:\n *\n * - events returned → merge them; the gap is closed\n * - `gap: true` → our cursor is not a prefix of the log (rotated,\n * compacted, or a session switch happened while the\n * socket was down). The server already fell back to a\n * full tail, so replace rather than merge.\n * - nothing returned → we were already current; do NOT re-read\n *\n * `refreshAgents` still runs because the AGENT's status can have changed with no\n * event of its own (a stop, a status transition the log does not carry).\n */\n // `runFeedRefresh` is a `const` declared further down. It is initialised before\n // any socket can open, so a lazy reference is safe; this keeps the type checker\n // happy without reordering the file.\n let runFeedRefreshRef: (() => Promise<void>) | null = null;\n\n async function catchUpAfterReconnect(): Promise<void> {\n const id = selected();\n const cursor = events().at(-1)?.id;\n const tid = timelineId();\n const hidden = document.visibilityState === \"hidden\";\n if (!id || !cursor) {\n // nothing to anchor on — a full load is the only option\n pendingRefresh = true;\n if (!hidden) void runFeedRefreshRef?.();\n return;\n }\n try {\n const bf = branchFilter();\n const q = eventsUrl(id, { after: cursor }, tid, bf);\n const r = (await api(q)) as { events?: Ev[]; gap?: boolean };\n const got = r.events ?? [];\n if (r.gap) {\n // our cursor is not in the log: a full tail came back, so REPLACE\n setEvents(stabilize(got));\n setEventsTotal(got.length);\n } else if (got.length) {\n mergeEvents(got);\n setEventsTotal((n) => n + got.length);\n }\n await refreshAgents();\n if (got.length && !hidden) void refreshMetrics();\n } catch {\n // a failed catch-up must not wedge the reconnect loop; the next socket\n // open retries, and the periodic refresh still runs meanwhile\n pendingRefresh = true;\n }\n }\n\n function connectWs() {\n // `firstConnect` belongs to a SOCKET, not to the page. Reset it per\n // connection, or a reconnect that itself dropped would be mistaken for the\n // first connect and the resync skipped again — reintroducing the original\n // bug after a single bounce.\n firstConnect = true;\n const proto = location.protocol === \"https:\" ? \"wss://\" : \"ws://\";\n const sock = new WebSocket(`${proto}${location.host}/api/ws${wsTokenQuery()}`);\n ws = sock;\n // a reconnect RESYNCS. The server delivers events only to live\n // sockets and replays nothing, so anything logged while the socket was down\n // — a bash tool_result above all — simply never arrived. The feed refresh\n // is otherwise 100% dependent on an unbroken stream, which is why the\n // ordinary HTTP path appeared to work and the socket path did not.\n //\n // The first connect is skipped: select() already loads events, and doing it\n // twice would double every fetch on startup.\n //\n // this flag was NEVER SET TO FALSE, so `!firstConnect` was always false\n // and the early return never ran — the code refreshed on the FIRST open,\n // which is precisely what the comment above says it must not do. The test\n // that \"covered\" it asserted the source text, so it passed on broken code\n // (#75's exact failure mode).\n sock.onopen = () => {\n setConnected(true);\n if (firstConnect) {\n // first open of THIS socket: select() already loaded the feed\n firstConnect = false;\n return;\n }\n // a RECONNECT asks only for what it missed.\n //\n // It used to set `pendingRefresh` and re-read the whole tail — 2,000 events\n // by default — to learn about the handful that arrived while the socket was\n // down. That is the cost of REST being the source of truth.\n //\n // Now the cursor makes recovery proportional: ask for everything after the\n // last event we already hold. A reconnect that missed two events transfers\n // two events.\n void catchUpAfterReconnect();\n };\n sock.onclose = () => {\n setConnected(false);\n setTimeout(connectWs, 1500); // reconnect with a fixed short backoff\n };\n sock.onerror = () => sock.close();\n // event types that don't change the feed — refreshing on every one of\n // these would hammer /events several times per turn for nothing\n const FEED_IRRELEVANT = new Set([\"state\", \"usage\", \"session_start\"]);\n // (live buffers are keyed per agent in liveByAgent — see the App body)\n sock.onmessage = (m) => {\n const msg = JSON.parse(m.data);\n // the server's ping doubles as a liveness probe — a client that has\n // stopped answering is reaped, because its send buffer grows without\n // bound while it is not reading. So the reply is now MANDATORY, not\n // optional politeness: silently dropping the ping would get every real\n // client disconnected after two intervals.\n if (msg.kind === \"ping\") {\n try {\n sock.send(JSON.stringify({ kind: \"pong\" }));\n } catch {\n /* socket already closing */\n }\n return;\n }\n if (msg.kind === \"pong\") return;\n // the server sends an AUTHORITATIVE snapshot the moment the socket\n // opens (`kind:\"hello\"` in the WS route), and the frontend discarded it — so a reconnect\n // agent state only from the REST poll that followed, and the WS and REST\n // paths could disagree in the meantime. That is the dual-state problem the\n // whole event architecture is meant to avoid.\n //\n // Apply it through the same merge, so identity handling is identical to the\n // other two snapshot paths.\n if (msg.kind === \"hello\" && Array.isArray(msg.agents)) {\n setAgents((prev) => mergeAgentSnapshots(prev, msg.agents as Agent[]));\n // a fresh authoritative snapshot can settle agents the buffers outlived,\n // so run the same prune the REST path would have triggered\n const list = agents();\n setLiveByAgent((prev) =>\n pruneDeadLiveBuffers(prev, (id) => list.find((x) => x.id === id)?.status),\n );\n return;\n }\n if (msg.kind === \"event\" && isTurnBoundary(msg.event)) {\n // TURN BOUNDARY. The agent's `status` does not change between\n // tool calls inside one round, so a completed reply's live buffer was\n // never cleared: the feed refresh below only drops it once a persisted\n // assistant message matches its text, and its `status !== \"running\"`\n // short-circuit kept it alive meanwhile. The previous turn's text then\n // kept rendering under the streaming…/writing… chrome — reported as\n // \"agent2 shows agent1's message, with a writing prompt attached\".\n //\n // The server logs one \"llm turn start\" state event per turn (with an\n // incrementing `turn`), which is the only reliable boundary signal. The\n // empty llm-delta the server sends before each call is NOT usable: it\n // fires on every RETRY attempt too, so clearing on it would flash the\n // bubble away mid-reply.\n setLiveByAgent((prev) => clearLive(prev, msg.agentId));\n return; // the feed refresh below handles the actual row\n }\n if (msg.kind === \"llm-delta\") {\n // the bubble lives INSIDE a session-scoped timeline, so the delta must\n // belong to the DISPLAYED session, not merely to the same agent — one\n // agent has many sessions and the reader may be on a past one.\n //\n // A missing id is a rejection too, not a pass: it cannot be attributed,\n // and `sessionId` is REQUIRED by the bus type (src/bus.ts).\n if (!deltaBelongsToTimeline(msg, selected(), timelineId())) return;\n // update THIS agent's buffer only — other sessions keep streaming in\n // the background and their bubble must survive session switches\n setLiveByAgent((prev) => applyDelta(prev, msg.agentId, msg));\n // thinking-timer bookkeeping (selected session only): start the clock\n // when reasoning arrives with no text yet; reset once real text flows\n if (msg.agentId === selected()) {\n const r = String(msg.reasoning ?? \"\");\n const t = String(msg.text ?? \"\");\n if (r && !t) {\n // arm on the first reasoning chunk. Guarded so a mid-stream\n // delta that arrives with NEITHER text nor reasoning cannot re-arm it,\n // which would restart the elapsed time mid-thought.\n if (!thinkStartedAt()) setThinkStartedAt(Date.now());\n } else if (t) {\n // reset only when real TEXT arrives. The old second clause was\n // `t || (!r && thinkStartedAt())`, and a delta carrying neither text\n // nor reasoning — which the provider sends between chunks — zeroed the\n // clock, so the readout flickered back to nothing mid-thought.\n setThinkStartedAt(0);\n }\n }\n return;\n }\n if (msg.kind === \"compaction-progress\") {\n if (msg.agentId !== selected()) return;\n if (msg.phase === \"done\") setCompacting(null);\n else setCompacting({ phase: msg.phase, summarized: msg.summarized });\n // the phase banner rides on top of the feed — no refresh needed until\n // the compaction event itself lands\n return;\n }\n // agent-update now carries the fresh snapshot: apply it directly —\n // no GET /api/agents round-trip per event\n if (msg.kind === \"agent-update\" && msg.snapshot) {\n setAgents((prev) => {\n const i = prev.findIndex((a) => a.id === msg.snapshot.id);\n const next = msg.snapshot;\n if (i === -1) return [...prev, next];\n // content-equal → keep the OLD object: a new identity for unchanged\n // data re-ran every expression bound to that agent and was the last\n // source of the rare right-panel flash\n return mergeAgentSnapshots(\n prev,\n prev.map((a, j) => (j === i ? msg.snapshot : a)),\n );\n });\n return; // snapshot IS the update; no feed refresh needed for it alone\n }\n /**\n * Server-wide state, PUSHED.\n *\n * These replace the 30s `/api/metrics` + `/api/tasks` poll. The payload IS the answer, so there\n * is nothing to fetch — assigning it is the whole handler.\n */\n if (msg.kind === \"metrics\" && msg.metrics) {\n setMetrics(msg.metrics);\n return;\n }\n if (msg.kind === \"tasks\" && Array.isArray(msg.tasks)) {\n setTasks(msg.tasks);\n return;\n }\n if (msg.kind === \"event\") {\n const et = msg.event?.type;\n const ed = msg.event?.data ?? {};\n // a prompt-delivered note means the text ENTERED an LLM call payload —\n // flip the matching pending echo to \"sent\"; a prompt-cancelled note\n // drops the echo. BOTH fall through so the feed refresh below picks up\n // the logged prompt row in the same pass (the old early-returns made\n // the \"sent ✓\" echo linger until some unrelated event refreshed).\n /**\n * A delivery/cancel note clears its echo for ANY session, not just the visible one.\n *\n * The two cases were gated on `msg.agentId === selected()`. Echoes are stored PER SESSION\n * (`pendingBySession`), so a prompt delivered while the operator was reading a different\n * session kept its echo forever — \"you\" stayed `queued` with no way to clear it, reported as\n * \"youのはずっとqueuedが外れない\". The note names the session, which is all that is needed to\n * find the right map; the VISIBLE one was never the right filter.\n */\n if (et === \"system_note\" && (ed.event === \"prompt-delivered\" || ed.event === \"prompt-cancelled\")) {\n const pid = String(ed.promptId ?? \"\");\n if (pid) {\n /**\n * Which session's echoes to touch: the note carries the session it belongs to, and the\n * visible one is a safe fallback for an older event that predates the field.\n */\n const holder = String((msg.event as { session?: string })?.session ?? \"\");\n const keys = new Set<string>();\n if (holder) keys.add(holder);\n keys.add(pendingKey());\n for (const [k, list] of pendingBySession) if (list.some((p) => p.promptId === pid)) keys.add(k);\n for (const k of keys) {\n const cur = pendingFor(k);\n if (!cur.some((p) => p.promptId === pid)) continue;\n writePending(k, cur.filter((p) => p.promptId !== pid));\n }\n }\n }\n if (FEED_IRRELEVANT.has(et) && !NOTE_FEED_TYPES.has(et)) return;\n // notify the operator about notable moments from ANY session — that's\n // the point of the notification center (progress / finish / question /\n // error), even when the timeline isn't being watched\n maybeNotify(msg.agentId, msg.event);\n // only the affected session's feed needs updating — other sessions'\n // timelines are fetched on switch, not eagerly\n if (msg.event?.agent !== selected()) return;\n // #146/#54: and the SESSION must match too — via the SHARED rule, so this\n // gate cannot disagree with `isTimelineLive()` and `deltaBelongsToTimeline`\n // about the fallback view. See frontend/session-scope.ts: while no session\n // is resolved, `timelineId()` is the AGENT ID, and comparing it against an\n // event's real session dropped EVERY frame — the socket went silent and\n // only REST moved the feed, which is the #54 report verbatim.\n if (!eventBelongsOnTimeline(msg.event as { agent?: string; session?: string }, selected(), timelineId()))\n return;\n\n // the socket payload IS the data — it is the same object the log\n // wrote, and `mergeEvents` dedupes by id and sorts by seq, so a REST page\n // and a socket event can arrive in either order.\n //\n // It must not be the ONLY path, though: `pairInfo` walks events() in\n // order and can only pair a result with a call it has already seen, and\n // `agentActive` comes from refreshAgents. So merge for immediacy AND\n // refresh for coherence — see the #145 note that follows.\n /**\n * Does the feed need a REST read for coherence?\n *\n * Only when the socket could have missed something: `seq` is monotonic per session, so a\n * delivered seq more than one past the newest held row means a gap (a reconnect, or the\n * 300-event window). Otherwise the socket payload IS the data and the read is redundant —\n * it used to run on every burst, several times a second on a busy session.\n */\n {\n const heldSeq = events().at(-1)?.seq ?? 0;\n const arriving = Number((msg.event as { seq?: number })?.seq ?? 0);\n if (!heldSeq || (arriving > 0 && arriving > heldSeq + 1)) feedNeedsRead = true;\n }\n mergeEvents([msg.event as Ev]);\n // a LOGGED assistant reply covers the live bubble the INSTANT it is\n // merged — `mergeEvents` is synchronous and `isCoveredByLog` compares the\n // whole text. But the buffer used to be revalidated only inside the\n // debounced `runFeedRefresh` below (60 ms, plus the fetch), so for that\n // window the same reply rendered TWICE: once as the settled log row and\n // once as the live bubble with its writing cursor. Reported as \"tool call\n // を発行するタイミングで一瞬2重になる\" — it is most visible there because the\n // tool rows land immediately after, so the duplicate is sandwiched between\n // rows that belong and reads as a glitch rather than a stream.\n //\n // A PARTIAL stream is untouched: `isCoveredByLog` needs the full text, so\n // the bubble survives until the reply it is showing is actually persisted.\n /**\n * ANY logged event settles the live halves it has caught up with — not only an assistant\n * message.\n *\n * MEASURED in tyb2-8-0161a4af: the log holds `e53519` (assistant, with reasoning) and the\n * NEXT event is `tool_call bash`. The timeline drew `e53519` correctly and the 💭 block was\n * ALSO still on screen as the live bubble, carrying the same text — because this hook only\n * ran for an assistant-message frame, and a `tool_call`/`tool_result`/`state` frame is what\n * actually proves the thinking stretch ended.\n *\n * `reconcileLiveBuffer` decides per half: text waits until the log carries it, reasoning is\n * stale once a tool call starts after its last delta.\n *\n * Scoped to `event` frames: those are LOGGED rows, which is the only evidence either half\n * can be settled by. An `agent-update`/snapshot frame carries no log content, and running\n * this there retires a bubble that the very next delta would have kept alive.\n */\n if (msg.event) settleLiveBuffer();\n pendingRefresh = true;\n if (document.visibilityState !== \"visible\") return;\n if (timer) return;\n timer = setTimeout(runFeedRefresh, 60);\n }\n // hidden tab: defer feed work until the tab is visible again — layout\n // is paused anyway, so fetching + re-rendering now is pure waste. The\n // single shared timer collapses the backlog into ONE refresh on return.\n if (document.visibilityState === \"hidden\") {\n pendingRefresh = true;\n return;\n }\n if (timer) return;\n // tool results land here one by one; a 400ms debounce made each bash\n // completion feel lost (\"switch away and back shows it\") — the fetch\n // itself is mtime-cached and cheap, so tighten the cadence instead\n timer = setTimeout(runFeedRefresh, 120);\n };\n pendingRefresh = false;\n const runFeedRefresh = async () => {\n timer = null;\n /**\n * NO agent/metrics refetch here.\n *\n * `refreshAgents()` and `refreshMetrics()` ran on every event burst, so a busy session issued\n * both over HTTP several times a second while the socket was ALREADY delivering the same\n * facts: every `agent-update` frame carries a full `snapshot`, and metrics now arrive as\n * `kind: \"metrics\"`. Two sources for one value is how they disagree, and the HTTP copy is the\n * one that can be stale.\n *\n * The fetches stay where they are the only source — the initial load, a reconnect catch-up,\n * and a waking tab (all of which may have missed pushes).\n */\n if (selected()) {\n // compare last event ID, not array length: the /events window is\n // capped at 300, so long sessions have a CONSTANT length and a\n // length check never noticed new events (leaving the live bubble\n // blinking forever after the agent went idle)\n const beforeId = events().at(-1)?.id;\n const beforeLen = events().length;\n // SAMPLE THE GEOMETRY BEFORE THE FETCH. The old code read the sticky\n // `atBottom` flag AFTER new rows had been painted — state events, tool rows and\n // a grown live bubble all add height with no scroll — so by then the flag had\n // already been corrected by a scroll handler, or was about to be, and the view\n // jumped away right when a round kicked off.\n const _fetchStartedAt = Date.now();\n /**\n * Re-read the feed only when the socket could have MISSED something.\n *\n * The socket already merged the event (`mergeEvents([msg.event])`), so this read is for\n * coherence — pairing a result with its call, and the rows a burst may have skipped. Doing\n * it on EVERY burst meant a busy session issued `/events` several times a second for data\n * the socket had already delivered.\n *\n * A gap is detectable without asking: `seq` is monotonic per session, so a delivered event\n * whose seq is more than one past the newest held row means something was dropped (a\n * reconnect, or the 300-event window). Only then is a full read the answer.\n */\n if (feedNeedsRead) {\n feedNeedsRead = false;\n await loadEvents(selected()!);\n }\n // reconcile the bubble on EVERY pass, NOT inside the\n // \"did the newest id change\" test below — the socket MERGES the event\n // before scheduling this refresh, so that test reads false here and the\n // cleanup would never run. A persisted reply then stayed on screen a\n // second time as a live bubble with a cursor.\n const buf = live();\n if (buf && !reconcileLiveBuffer(buf, events(), sel()?.status)) setLive(null);\n if (events().at(-1)?.id !== beforeId) {\n // FOLLOW IS A STATE, so this asks the state and then acts. There is no\n // before/after geometry comparison any more: the question \"did the reader leave\n // the tail while this fetch was in flight\" cannot be answered reliably from\n // samples (the fetch itself may resize the feed), and it does not need to be —\n // `atBottom()` is only ever cleared by a real scroll up.\n if (atBottom()) {\n pinToTail();\n // following the tail means the operator has seen this session's\n // newest content — its notifications count as read\n markSessionRead(selected()!);\n } else {\n // Count from the EVENTS, not from `eventsTotal()`.\n //\n // `eventsTotal` is the server's count of every logged event — including ones\n // that draw no row at all (state changes, deltas, notes) and ones outside the\n // loaded window. Adding that delta reported \"12 new messages\" when one message\n // had arrived, and it never went down as the operator scrolled, so the pill\n // read as an ever-growing number at the wrong place.\n setMissed((n) => n + Math.max(0, events().length - beforeLen));\n // the content below grew, so the pill's gap changed. Published from the\n // geometry we are about to read anyway, not from a fresh per-render DOM read.\n publishGap(tailSample());\n }\n }\n // NOTE: don't drop pending echoes when the log's prompt event\n // appears — logging happens at ENQUEUE time, long before the text\n // reaches an LLM payload. The echo must survive until the matching\n // prompt-delivered note flips it to \"sent ✓\" (and it is then\n // removed only after the turn actually consumed it).\n }\n };\n runFeedRefreshRef = runFeedRefresh;\n onTabVisible = () => {\n if (document.visibilityState !== \"visible\") return;\n // returning to a VISIBLE tab must verify, not assume.\n //\n // This only refetched when `pendingRefresh` was already set, and that flag\n // is set by the hidden-tab branch of the WS handler. A machine waking from\n // SLEEP is a different case: the tab was never hidden, so no event arrived\n // to set the flag, and the handler did nothing at all.\n //\n // Whether the socket recovers is luck: if the server's 30s liveness reaper\n // closed it, `onclose` reconnects and `catchUpAfterReconnect` fetches the\n // gap. But a sleep often leaves the TCP connection apparently alive, so no\n // close fires, no reconnect happens, and the timeline stays frozen at\n // whatever it held when the lid shut. Reloading fixed it because that\n // reloads the log from scratch.\n //\n // So: on every return to visible, ask for what we are missing. The cursor\n // makes it proportional — a tab that slept for a minute and missed nothing\n // costs one cheap request that returns empty.\n /**\n * The server-wide numbers are HTTP on WAKE, socket the rest of the time.\n *\n * `metrics` and `tasks` used to be polled every 30s, which covered the sleeping-tab case by\n * accident. With the poll gone, the recovery path has to include them — a tab that slept\n * missed no metric PUSH it could apply, because a push it did not receive never happened.\n */\n void refreshMetrics();\n void loadTasks();\n const id = selected();\n if (!id) return;\n if (pendingRefresh) {\n pendingRefresh = false;\n // refresh IMMEDIATELY on return — the old 150ms delay made every\n // homecoming show a stale tail until the next beat\n void runFeedRefresh();\n return;\n }\n const cursor = events().at(-1)?.id;\n if (!cursor) {\n // nothing to anchor on (a session switch while away) — a full load is the\n // only correct answer\n pendingRefresh = true;\n void runFeedRefresh();\n return;\n }\n // Same call whether or not the socket is alive, and that is deliberate: a\n // socket that LOOKS connected after a sleep is the failure case, so it does\n // not get to decide that nothing is needed.\n void catchUpAfterReconnect();\n };\n }\n\n /* ---------- /session/<internalId> routing ---------- */\n // The URL carries the INTERNAL session id (the chat.jsonl's directory\n // name), not the agent id: agent ids are recycled across incarnations,\n // internal session ids never are — deep links stay valid forever.\n const pathId = () => decodeURIComponent(location.pathname.split(\"/\")[2] ?? \"\");\n function navigate(sessionId: string, push = true) {\n /**\n * The URL carries a SESSION id, so refuse to write anything the index does not know.\n *\n * This is the structural half of the two-tabs bug: an agent id reaching here produced\n * `/session/<agentId>`, which every tab then resolves to that agent's LATEST session — so two\n * tabs pointed at different sessions collapsed onto one after a reload.\n *\n * A session that is genuinely new (its directory not scanned yet) is the one case where the\n * index cannot confirm; there the caller passes a real id and this passes it through. What is\n * refused is a handle the index positively maps to a DIFFERENT agent, and the bare agent id.\n */\n const linkable = linkableSessionId(\n sessionId,\n masterSessionIndex(),\n agents().map((a) => a.id),\n );\n if (!linkable) return; // see linkableSessionId — an agent id here merges every tab\n const url = `/session/${encodeURIComponent(linkable)}`;\n if (push) history.pushState(null, \"\", url);\n else history.replaceState(null, \"\", url);\n }\n window.addEventListener(\"popstate\", () => {\n const sid = pathId();\n // resolve the internal id to its owning agent and open THAT agent's tab;\n // the timeline itself is fetched by ?session=<internalId> in loadEvents\n const owner = masterSessionIndex().get(sid);\n // this used to require `owner !== selected()`, which made Back and\n // Forward between two sessions of the SAME agent a no-op — the very case\n // the history entry exists for. Compare the SESSION, not the agent, and let\n // select() ignore a repeat of what is already showing.\n if (owner && (owner !== selected() || sid !== timelineId())) select(owner, false, sid || null);\n });\n\n /* ---------- small UX niceties ---------- */\n createEffect(() => {\n const a = sel();\n const base = a\n ? `${isSelLive() ? \"▶ \" : a.status === \"error\" ? \"⚠ \" : \"\"}${agentLabel(a)} · teapot`\n : \"teapot\";\n // unread notification count in the tab title — \"(2) linux · teapot\"\n document.title = unreadCount() > 0 ? `(${unreadCount()}) ${base}` : base;\n });\n /**\n * Is any overlay open? Single source of truth for the keydown handler.\n *\n * The Escape branch and the shortcut guard used to name overlays separately,\n * and they drifted: Escape handled four plus the narrow drawer, while the\n * shortcut guard knew only two — so `t` and `/` fired with the themes panel\n * open, mutating the app behind a visible overlay.\n */\n const anyOverlayOpen = (): boolean =>\n showNew() || showCfg() || editing() !== null || (isNarrow() && showRight());\n\n window.addEventListener(\"keydown\", (e) => {\n const t = e.target as HTMLElement | null;\n const typing = !!t && (t.tagName === \"INPUT\" || t.tagName === \"TEXTAREA\" || t.isContentEditable);\n if (typing) {\n if (e.key === \"Escape\") (t as HTMLElement).blur();\n return;\n }\n if (e.key === \"Escape\") {\n // Escape closes overlays; the shortcut guard below reuses the same\n // predicate so the two cannot disagree about what counts as an overlay.\n if (showNew()) { setShowNew(false); return; }\n if (showCfg()) { setShowCfg(false); return; }\n if (editing()) { setEditing(null); return; }\n // BEFORE the running-agent interrupt: narrow, the drawer is a modal\n // sheet over the content and Escape must close THAT first. It used to\n // fall through to the /stop branch, so with an agent working, Escape\n // stopped the agent and left the panel stuck open.\n if (isNarrow() && showRight()) { closeRight(); return; }\n const s = sel();\n // `live`, not `status` — an agent parked in wait_children reads\n // \"idle\", and Escape then did nothing at all on a working agent.\n if (s && isSelLive()) {\n // Claude-Code-style: Esc interrupts the running agent\n api(`/api/agents/${s.id}/stop`, { method: \"POST\" }).then(refreshAgents);\n return;\n }\n return;\n }\n // a single-key shortcut must not fire while ANY overlay is up.\n //\n // This guard named only `showNew() || showCfg()`, but the Escape branch just\n // above handles four overlays plus the narrow drawer — so the two lists could\n // drift, and they had: with the themes panel open, `t` opened the terminal and\n // `/` stole focus into the composer behind it. The app mutated state under a\n // visible overlay.\n //\n // So both read from ONE list. Adding a modal now means adding it once, and\n // forgetting cannot silently reintroduce the bug.\n if (anyOverlayOpen()) return;\n if (e.key === \"/\") {\n e.preventDefault();\n document.querySelector<HTMLTextAreaElement>(\".composer textarea\")?.focus();\n } else if (e.key === \"d\") {\n toggleRight();\n } else if (e.key === \"t\") {\n toggleTerm();\n } else if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n // follow the visible sidebar tree order (parents, then expanded subs)\n const list = treeRows().map((r) => r.a);\n if (list.length === 0) return;\n e.preventDefault();\n const idx = list.findIndex((a) => a.id === selected());\n const next = e.key === \"ArrowDown\" ? Math.min(idx + 1, list.length - 1) : Math.max(idx - 1, 0);\n if (next !== idx) select(list[next].id);\n }\n });\n\n /* ---------- human terminal (bottom drawer: resizable, tabs, split) ---------- */\n const [termOpen, setTermOpen] = createSignal(localStorage.getItem(\"teapot.term\") === \"1\");\n const toggleTerm = () => {\n const next = !termOpen();\n setTermOpen(next);\n localStorage.setItem(\"teapot.term\", next ? \"1\" : \"0\");\n };\n\n /**\n * A terminal tab. `key` IS the server's terminal id (#term-shared).\n *\n * It used to be a client-local `agent#N` counter because the tab was the only thing that knew\n * a shell existed. The server owns them now, so the id comes from `/api/terminals` and a\n * reload re-attaches to the same shells instead of losing them.\n */\n type TermTab = { key: string; agentId: string; title: string };\n type TermSession = {\n el: HTMLDivElement;\n term: any;\n fit: any;\n ws: WebSocket;\n ro: ResizeObserver | null;\n };\n const [termTabs, setTermTabs] = createSignal<TermTab[]>([]);\n // each pane holds an index into termTabs (-1 = empty slot)\n const [paneL, setPaneL] = createSignal(0);\n const [paneR, setPaneR] = createSignal(-1);\n const [splitView, setSplitView] = createSignal(false);\n const [focusedPane, setFocusedPane] = createSignal(0);\n const [termHeight, setTermHeight] = createSignal(\n Number(localStorage.getItem(\"teapot.termH\")) ||\n Math.max(220, Math.round(window.innerHeight * 0.35)),\n );\n const liveTerms = new Map<string, TermSession>();\n // monotonic tab-id source — see addTab() for why keys must never be reused\n let termSeq = 0;\n const paneHosts: (HTMLDivElement | null)[] = [null, null];\n\n /** the tab currently shown in the focused pane */\n const activeTab = () =>\n termTabs()[focusedPane() === 0 ? paneL() : paneR()] ?? null;\n\n function focusTab(i: number) {\n const tab = termTabs()[i];\n if (!tab) return;\n const focused = focusedPane();\n // snapshot BEFORE any setter runs — the setters below are plain signals,\n // so reading through the accessor after a partial update gave the swap\n // logic stale values and the click landed on the wrong pane (v0.19.6\n // \"tab switching doesn't work\" regression)\n const mineIdx = focused === 0 ? paneL() : paneR();\n const otherIdx = focused === 0 ? paneR() : paneL();\n const setMine = (v: number) => (focused === 0 ? setPaneL(v) : setPaneR(v));\n const setOther = (v: number) => (focused === 0 ? setPaneR(v) : setPaneL(v));\n if (otherIdx === i) {\n // it's in the other pane — swap so both stay visible\n setOther(mineIdx);\n setMine(i);\n return;\n }\n if (mineIdx !== i) setMine(i);\n }\n\n const addFromSelected = () => addTab();\n\n /**\n * Create a terminal ON THE SERVER, then show it.\n *\n * The shell is created by a POST, not by opening the WebSocket, because the tab list has to\n * be server state: a reload asks for the list and re-attaches, and a second window sees the\n * same shells. Opening a socket would give the reload a NEW shell every time, which is the\n * bug this replaces (\"タブをリロードしたらターミナル消失\").\n */\n async function addTab(agentId?: string) {\n const who = agentId ?? selected();\n if (!who) return;\n if (termTabs().filter((t) => t.agentId === who).length >= 10) {\n flashHint(`max 10 shells per agent (${who}) — that's already a lot`);\n return;\n }\n try {\n const r = (await api(\"/api/terminals\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ agentId: who }),\n })) as { terminal?: { id: string; agentId: string; title: string } };\n const t = r.terminal;\n if (!t) {\n flashHint(\"could not open a shell\");\n return;\n }\n // the index comes from the list BEFORE the append: a Solid setter applies synchronously,\n // so `termTabs().length` read afterwards is one past the end\n const at = indexAfterAppend(termTabs());\n setTermTabs((list) => [...list, { key: t.id, agentId: t.agentId, title: t.title }]);\n if (focusedPane() === 0) setPaneL(at);\n else setPaneR(at);\n } catch (ex) {\n flashHint(`could not open a shell: ${(ex as Error).message}`);\n }\n }\n\n function closeTab(i: number) {\n const tab = termTabs()[i];\n if (!tab) return;\n // closing is explicit and must END the shell, not just detach it: the whole point of\n // detaching on disconnect is that a reload keeps it, so ✕ is the only thing that stops it\n void api(`/api/terminals/${encodeURIComponent(tab.key)}`, { method: \"DELETE\" }).catch(() => {});\n const s = liveTerms.get(tab.key);\n if (s) {\n s.ro?.disconnect();\n try { s.ws.close(); } catch { /* gone */ }\n s.term.dispose();\n liveTerms.delete(tab.key);\n }\n const rest = termTabs().filter((_, j) => j !== i);\n setTermTabs(rest);\n // closing the tab a pane SHOWS must land on a real neighbour; the old\n // `Math.min(shift(p), rest.length - 1)` produced -1 for the shown tab (its own\n // shifted index), leaving the pane on \"no shell here\" until a tab was clicked\n setPaneL((p) => paneIndexAfterClose(p, i, rest.length));\n // the same rule for the split pane — the old expression left it invalid (and\n // referenced a `shift` that no longer existed) whenever it showed the closed tab\n setPaneR((p) => (p === -1 ? -1 : paneIndexAfterClose(p, i, rest.length)));\n }\n\n // (retintTerminal lives in ./terminal-theme — #137: it now compares the\n // cursor fields too, so a light-theme caret cannot stay dark-theme-stale)\n\n // re-theme terminals ALREADY OPEN when the theme changes. The reuse path\n // only helps once a terminal is remounted, and an open one never is — so without\n // this the user changes theme and sees nothing happen at all.\n createEffect(() => {\n // read the signals that resolve the active theme; the sibling effect writes\n // `data-theme` on <html>, which repaints every CSS-driven surface\n void themeAuto();\n void fixedTheme();\n void sysPrefersLight();\n void sysLightTheme();\n void sysDarkTheme();\n for (const [, s] of liveTerms) retintTerminal(s.term);\n });\n\n function disposeAllTerms() {\n for (const [, s] of liveTerms) {\n s.ro?.disconnect();\n try { s.ws.close(); } catch { /* gone */ }\n s.term.dispose();\n }\n liveTerms.clear();\n }\n\n /** create (and mount) a session lazily; moving panes just re-appends its el */\n function ensureSession(tab: TermTab, host: HTMLElement): TermSession {\n let s = liveTerms.get(tab.key);\n // a terminal created under a DARK theme kept its palette after the\n // operator switched to a light one, so `--term-fg` became near-black while the\n // shell prompt stayed the dark theme's light grey — invisible on white.\n //\n // xterm CACHES the palette passed to its constructor, so the CSS variables\n // updating is not enough. Re-apply it on every reuse: this is the path taken\n // when the panel is closed and reopened, and on any re-render landing here.\n if (s) retintTerminal(s.term);\n if (!s) {\n const el = document.createElement(\"div\");\n el.className = \"termsession\";\n host.appendChild(el);\n const t = new Terminal({\n cursorBlink: true,\n fontSize: 12.5,\n fontFamily: 'ui-monospace, Menlo, Consolas, monospace',\n theme: themeColors(),\n });\n const f = new FitAddon();\n t.loadAddon(f);\n t.open(el);\n const proto = location.protocol === \"https:\" ? \"wss://\" : \"ws://\";\n // ATTACH to the server-side terminal this tab represents, by its id. Without\n // `?terminal=`, the server would create a fresh shell and this tab would be looking at a\n // different process than the one the list says it is (#term-shared).\n const w = new WebSocket(\n `${proto}${location.host}/api/agents/${encodeURIComponent(tab.agentId)}/term?terminal=${encodeURIComponent(tab.key)}${wsTokenQuery()}`,\n );\n w.onmessage = (m) => {\n const msg = JSON.parse(m.data);\n if (msg.kind === \"data\") t.write(msg.data);\n else if (msg.kind === \"exit\") {\n t.write(`\\r\\n\\x1b[2m[terminal exited ${msg.code ?? \"\"}]\\x1b[0m\\r\\n`);\n // the shell is gone on the server too, so drop the tab rather than leaving a dead\n // one that re-attaches forever\n setTermTabs((list) => list.filter((x) => x.key !== tab.key));\n liveTerms.get(tab.key)?.term.dispose();\n liveTerms.delete(tab.key);\n } else if (msg.kind === \"attach\" && msg.error) {\n t.write(`\\r\\n\\x1b[2m[${msg.error}]\\x1b[0m\\r\\n`);\n }\n };\n t.onData((d: string) => {\n if (w.readyState === WebSocket.OPEN) w.send(JSON.stringify({ kind: \"input\", data: d }));\n });\n let last = { cols: 0, rows: 0 };\n let pendingRetry: ReturnType<typeof setInterval> | undefined;\n const resizeTimer: ReturnType<typeof setTimeout>[] = [];\n const pushResize = () => {\n try { f.fit(); } catch { /* hidden */ }\n if (w.readyState !== WebSocket.OPEN) {\n /**\n * Do NOT record `last` here, and do NOT give up.\n *\n * The initial `setTimeout(pushResize, 60)` routinely fires while the socket is still\n * CONNECTING. The old code simply returned — so the FIRST size was never sent, the pty\n * stayed at `script`'s 0x0 default, and a shell reported \"0 0\" until the operator\n * happened to drag the window. That is the reported \"リサイズしても中身に伝わらない\".\n *\n * Leaving `last` alone means the next call still sees a difference and retries; `open`\n * below also calls it, so the size lands as soon as the socket can carry it.\n */\n scheduleRetry();\n return;\n }\n if (t.cols !== last.cols || t.rows !== last.rows) {\n last = { cols: t.cols, rows: t.rows };\n w.send(JSON.stringify({ kind: \"resize\", cols: t.cols, rows: t.rows }));\n }\n };\n /**\n * A resize that could not be sent must be retried, not forgotten.\n *\n * socket is not OPEN) made `pushResize` return early — correct, since `w.send` would throw\n * — but the only things that call it again are the ResizeObserver and `open`. If the box\n * does not change again, the size the operator dragged to is simply lost, and the pty keeps\n * whatever geometry reached it last. That is the \"half worked\" shape: one resize landed,\n * the next did not.\n *\n * A short interval retries while a send is outstanding, and stops as soon as it lands.\n */\n function scheduleRetry() {\n if (pendingRetry) return;\n pendingRetry = setInterval(() => {\n if (!liveTerms.has(tab.key)) {\n clearInterval(pendingRetry);\n pendingRetry = undefined;\n return;\n }\n if (w.readyState === WebSocket.OPEN) {\n clearInterval(pendingRetry);\n pendingRetry = undefined;\n pushResize();\n }\n }, 400);\n };\n // the socket may not have been open for the initial pushResize — send the size now\n w.addEventListener(\"open\", () => pushResize());\n /**\n * Observe the element `fit()` MEASURES, not the one we created.\n *\n * `FitAddon.proposeDimensions()` reads `window.getComputedStyle(this._terminal.element\n * .parentElement)` — so the height and width that decide cols/rows come from the PARENT,\n * which here is `.termhost`. This used to observe `el` (`.termsession`), a child. While\n * those two resize together that is harmless, but they can diverge: `el` is\n * `position: absolute; inset: 0`, so it tracks its own containing block, and a full-screen\n * program (nano) repainting through xterm can leave `el` unchanged while the box that\n * `fit()` measures changed. The observer then never fires, no `resize` is sent, and the\n * pty keeps the old geometry — reported as \"nano のリサイズが効かない\" with an occasional\n * \"中途半端に効く\" when some other change happened to trigger a fit.\n */\n const measureEl = el.parentElement ?? el;\n const ro = new ResizeObserver(() => {\n if (resizeTimer[0]) clearTimeout(resizeTimer[0]);\n resizeTimer[0] = setTimeout(pushResize, 250);\n });\n ro.observe(measureEl);\n if (measureEl !== el) ro.observe(el); // both, since either can move first\n setTimeout(pushResize, 60);\n s = { el, term: t, fit: f, ws: w, ro };\n liveTerms.set(tab.key, s);\n } else if (s.el.parentElement !== host) {\n host.appendChild(s.el); // moved between panes — xterm DOM survives the move\n setTimeout(() => { try { s!.fit(); } catch { /* */ } }, 30);\n }\n return s;\n }\n\n function mountPane(idx: number) {\n const host = paneHosts[idx];\n if (!host) return;\n const tab = termTabs()[idx === 0 ? paneL() : paneR()];\n if (!tab) {\n // only clear when this pane actually owns a session — replaceChildren()\n // on every mount pass used to detach a session element the OTHER pass\n // had just re-attached, which is how tabs went blank\n const owned = [...liveTerms.values()].some((t) => t.el.parentElement === host);\n if (owned) host.replaceChildren();\n return;\n }\n const s = ensureSession(tab, host);\n // Each session element must live in EXACTLY one pane. Session elements\n // are absolutely positioned, so a previous tab's terminal stayed stacked\n // underneath and showed through a freshly opened (empty) shell — the\n // \"switching tabs kept showing the old tab's content\" bug.\n for (const [key, other] of liveTerms) {\n if (key !== tab.key && other.el.parentElement === host) other.el.remove();\n }\n // make sure the terminal element really lives in THIS pane right now —\n // switching tabs moved DOM nodes behind Solid's back, so verify instead\n // of assuming; then refit so xterm re-measures into the (new) box\n requestAnimationFrame(() => {\n if (s.el.parentElement !== host) host.appendChild(s.el);\n try { s.fit(); } catch { /* hidden */ }\n if (focusedPane() === (idx === 0 ? 0 : 1)) {\n try { s.term.focus(); } catch { /* hidden */ }\n }\n });\n }\n\n // (re)mount both panes whenever any layout input changes — tabs, pane\n // assignment, split mode, drawer height. This effect was accidentally lost\n // in an earlier refactor, so after reopening the drawer (or switching\n // tabs) nothing re-attached live sessions and the pane stayed \"no shell\".\n createEffect(() => {\n void termTabs();\n void splitView();\n void paneL();\n void paneR();\n void termHeight();\n requestAnimationFrame(() => {\n mountPane(0);\n if (splitView()) mountPane(1);\n });\n });\n\n // opening the drawer ensures a shell for the selected agent.\n //\n // This tracks the SELECTED AGENT only. It used to read termTabs() as well,\n // so every tab change re-ran the body and focusTab() yanked the pane off\n // whatever the operator was looking at — opening a shell for agent A while\n // watching agent B swapped B's terminal away.\n let _termFollowAgent: string | null = null;\n createEffect(() => {\n if (!termOpen()) return;\n const id = selected();\n if (!id) return;\n if (id === _termFollowAgent) return;\n _termFollowAgent = id;\n /**\n * Do NOT spawn a shell on an agent switch.\n *\n * This used to call `addTab(id)` whenever the newly selected agent had no tab, which meant\n * every click through the sidebar started a shell on the server: \"勝手に新しいタブを作る\".\n * With the terminals now server-owned the tab list is shared and survives a reload, so\n * merely looking at another agent was accumulating shells nobody asked for — and each one\n * held a pty.\n *\n * A shell is created when the operator asks for one (+, or a keybinding), never as a side\n * effect of selecting an agent. If the selected agent HAS a tab, focus it — that part is\n * what makes the panel feel attached to the selection.\n */\n const mine = termTabs()\n .map((t, i) => ({ t, i }))\n .filter((x) => x.t.agentId === id);\n if (mine.length) {\n // its tab exists — focus the LAST one for it, so returning to an agent lands on the shell\n // you most recently opened rather than its first\n focusTab(mine[mine.length - 1]!.i);\n }\n });\n\n /**\n * Keep both pane indices pointing at a real tab.\n *\n * The panes render \"no shell here\" when their index is out of range, so ANY change that\n * shortens the list behind their back leaves a visible tab with an empty pane beneath it —\n *\n * - another client closes a terminal (the list is server-owned now, so a remote ✕ removes a\n * row here with no local `closeTab`)\n * - the reload restore replaces the whole list with the server's\n * - the server drops a terminal whose shell exited (`kind: \"exit\"` filters the list)\n *\n * This runs as an effect rather than at each site, because every one of those paths lands in\n * the same signal — and the next such path will too.\n */\n createEffect(() => {\n const n = termTabs().length;\n // one rule, shared with the close path: `clampPaneIndex` in term-tabs.ts\n const l = clampPaneIndex(paneL(), n);\n if (l !== paneL()) setPaneL(l);\n if (splitView()) {\n const r = clampPaneIndex(paneR(), n);\n if (r !== paneR()) setPaneR(r);\n }\n });\n\n const startGrip = (e: PointerEvent) => {\n e.preventDefault();\n const startY = e.clientY;\n const startH = termHeight();\n const move = (ev: PointerEvent) => {\n const h = Math.min(Math.max(startH - (ev.clientY - startY), 140), Math.round(window.innerHeight * 0.85));\n setTermHeight(h);\n };\n const up = () => {\n window.removeEventListener(\"pointermove\", move);\n window.removeEventListener(\"pointerup\", up);\n localStorage.setItem(\"teapot.termH\", String(termHeight()));\n requestAnimationFrame(() => { mountPane(0); if (splitView()) mountPane(1); });\n };\n window.addEventListener(\"pointermove\", move);\n window.addEventListener(\"pointerup\", up);\n };\n\n const toggleSplit = () => {\n const next = !splitView();\n setSplitView(next);\n if (next) {\n // seed the second pane with a DIFFERENT tab than the left pane shows —\n // the old findIndex picked index 0 whenever paneL() wasn't 0 (or -1\n // when it was), so split often opened with BOTH panes on one shell or\n // an empty right side despite other tabs existing\n if (paneR() < 0 || paneR() === paneL() || paneR() >= termTabs().length) {\n setPaneR(rightPaneSeed(paneL(), termTabs().length));\n }\n }\n requestAnimationFrame(() => { mountPane(0); if (splitView()) mountPane(1); });\n };\n\n onCleanup(disposeAllTerms);\n\n // legacy single-host refs kept for pane mounting\n const setPaneHost = (idx: number) => (el: HTMLDivElement) => {\n paneHosts[idx] = el;\n // The drawer is conditionally mounted (<Show when={termOpen()}>). On\n // reopen the refs arrive fresh, but nothing re-ran mountPane — so live\n // sessions stayed detached and the pane showed \"no shell here\". Mount\n // right here; also refit after the drawer finishes animating in.\n if (el) requestAnimationFrame(() => {\n mountPane(idx);\n if (splitView()) mountPane(1);\n setTimeout(() => mountPane(idx), 200);\n });\n };\n\n onMount(() => {\n loadCfg();\n refreshAgents().then(async () => {\n // deep link: /session/<internalId> routes to its owning agent —\n // fall back to a raw agent id (old bookmarks) → last session → first\n await refreshSessionIndex();\n const want = pathId();\n const owner = want ? masterSessionIndex().get(want) : undefined;\n const initial =\n (owner ? agents().find((a) => a.id === owner) : undefined) ??\n agents().find((a) => a.id === want && !masterSessionIndex().has(want)) ??\n agents().find((a) => a.id === localStorage.getItem(\"teapot.session\")) ??\n agents()[0];\n // pass the deep-linked session through. `select(initial.id)` alone\n // discarded it, so /session/<old-id> opened the bound session and then\n // rewrote the URL to match — the bookmark quietly pointed somewhere else.\n if (initial) select(initial.id, false, want || null);\n });\n refreshMetrics();\n loadTasks();\n loadPersonas();\n connectWs();\n /**\n * Restore the terminal tabs from the SERVER.\n *\n * A reload used to lose them, because the list only existed in this tab. The shells kept\n * running on the server (a detach, not a kill), so this re-attaches to exactly the ones\n * that are still alive — including ones another window opened, which is the point of\n * sharing the list.\n */\n void api(\"/api/terminals\")\n .then((r: { terminals?: { id: string; agentId: string; title: string }[] }) => {\n const list = r.terminals ?? [];\n if (!list.length) return;\n setTermTabs(list.map((t) => ({ key: t.id, agentId: t.agentId, title: t.title })));\n // show the first one rather than an empty pane with tabs above it\n if (termOpen()) {\n setPaneL(0);\n setPaneR(-1);\n }\n })\n .catch(() => {\n /* an older server without /api/terminals: keep working with local tabs */\n });\n /**\n * No polling timer here any more.\n *\n * `metrics` and `tasks` arrive on the socket (`kind: \"metrics\"` / `kind: \"tasks\"`), because the\n * server already ticks every 15s and a GET whose answer the server holds is exactly what a push\n * socket replaces. A 30s interval per tab meant every open window asked the same two questions\n * forever, and it could not tell that the answer had not changed.\n *\n * HTTP stays as the RECOVERY path — a tab waking after a long sleep re-reads on visibilitychange\n * (see the refresh below), which is when a REST read is genuinely needed.\n */\n onCleanup(() => {});\n });\n\n const SLASH_COMMANDS = [\n { cmd: \"/start\", desc: \"start working toward the goal\" },\n { cmd: \"/stop\", desc: \"interrupt the running agent\" },\n { cmd: \"/fork\", desc: \"branch the conversation here\" },\n { cmd: \"/goal\", desc: \"/goal <text> — set goal & notify the agent\" },\n { cmd: \"/compact\", desc: \"force a context compaction now\" },\n { cmd: \"/skill\", desc: \"/skill <name> — force-load a skill and follow it\" },\n ];\n\n // @mentions: personas spawn sub-agents, agent ids target existing ones\n const [personas, setPersonas] = createSignal<{ key: string; label: string }[]>([]);\n const loadPersonas = () => api(\"/api/personas\").then((d) => setPersonas(d.personas)).catch(() => {});\n const [mentionFork, setMentionFork] = createSignal(false);\n const mentionQuery = () => {\n const m = draft().match(/^@([A-Za-z0-9._-]*)$/);\n return m ? m[1]!.toLowerCase() : null;\n };\n const mentionMatches = () => {\n const q = mentionQuery();\n if (q === null) return [];\n const list = [\n ...personas().map((p) => ({ key: p.key, label: `${p.label} — spawns a sub-agent`, kind: \"persona\" as const })),\n ...agents()\n .filter((a) => a.id !== selected())\n .map((a) => ({ key: a.id, label: `${a.status} — send directly`, kind: \"agent\" as const })),\n ];\n return list.filter((x) => x.key.toLowerCase().startsWith(q));\n };\n // popup shows while typing the first token of a command\n // oxlint-disable-next-line no-unused-vars\n const filteredCmds = () => {\n const d = draft();\n if (!d.startsWith(\"/\") || d.includes(\" \") || d.includes(\"\\n\")) return [];\n return SLASH_COMMANDS.filter((c) => c.cmd.slice(1).startsWith(d.slice(1).toLowerCase()));\n };\n\n // unified suggestions: slash commands, then /skill argument completion\n // (skill names come from the selected agent's roots via /api/agents/:id/skills)\n type Suggest = { insert: string; title: string };\n const NO_ARG_COMMANDS = new Set([\"start\", \"stop\", \"fork\", \"compact\"]);\n const [agentSkills, setAgentSkills] = createSignal<{ name: string; description: string }[]>([]);\n /**\n * Optional native tools this host has (image resize, pty).\n *\n * Fetched on demand rather than at boot: it is only read in the settings panel, and it runs\n * binaries on the server to answer.\n */\n const [features, setFeatures] = createSignal<{\n imageResize: { available: boolean; tool: string | null; maxEdge: number; found: { name: string; present: boolean }[] };\n pty: { available: boolean; provider: string | null };\n } | null>(null);\n const [cmdIdx, setCmdIdx] = createSignal(-1);\n const suggestions = (): Suggest[] => {\n const d = draft();\n if (!d.startsWith(\"/\") || d.includes(\"\\n\")) return [];\n const m = d.match(/^\\/([a-z]*)(?:\\s+(.*))?$/i);\n if (!m) return [];\n const cmdName = m[1]!.toLowerCase();\n // NOTE: the arg is capture group TWO — group numbering was misread as [3]\n // before, so argPart was ALWAYS empty. Every \"/goal <text>\" then looked\n // like a bare command: the completion popup stayed open and Enter (with\n // cmdIdx set) replaced the draft with \"/goal \", silently eating the text.\n const argPart = (m[2] ?? \"\").trim();\n if (!argPart && cmdName !== \"skill\") {\n const rows = SLASH_COMMANDS.filter((c) => c.cmd.slice(1).startsWith(cmdName));\n // an exact, argument-less command must EXECUTE on Enter — don't keep a\n // popup open that would swallow the keystroke as another selection\n const exact = rows.find((c) => c.cmd.slice(1) === cmdName);\n if (exact && NO_ARG_COMMANDS.has(cmdName)) return [];\n return rows.map((c) => ({ insert: c.cmd + \" \", title: c.desc }));\n }\n if (cmdName === \"skill\") {\n let rows = agentSkills().filter((s) => s.name.toLowerCase().startsWith(argPart.toLowerCase()));\n // a single exact match means the name is complete — stop suggesting so\n // the following Enter dispatches /skill instead of re-selecting\n if (rows.length === 1 && rows[0]!.name.toLowerCase() === argPart.toLowerCase()) return [];\n return rows.map((s) => ({ insert: `/skill ${s.name} `, title: s.description || \"(bundled skill)\" }));\n }\n return [];\n };\n // oxlint-disable-next-line no-unassigned-vars\n let composerEl: HTMLTextAreaElement | undefined;\n /** the off-layout mirror `measureComposerContent` reuses, and its inert host */\n let composerMirror: HTMLDivElement | undefined;\n let composerMirrorHost: HTMLDivElement | undefined;\n /** the one `<style>` that makes the mirror render its attribute text */\n let composerMirrorStyleAdded = false;\n /**\n * The height this textarea's CONTENT needs, without touching the textarea.\n *\n * A fixed-height textarea reports `max(height, content)`, so its content height cannot be read in\n * place; the usual workaround (set `height: auto`, read, restore) lays the box out at ONE LINE for\n * an instant. The composer is a flex sibling of the feed, so that instant changes the feed's\n * viewport and the follow policy re-pins against the one-line floor — the reported scroll-back,\n * which fired on every keystroke whose height did not change.\n *\n * A mirror div is laid out with the same font, padding and width, so its `scrollHeight` is what\n * the content would take while the real box keeps its height. MEASURED against the textarea's own\n * `scrollHeight` at 1/2/3 lines and with a long single line: 37/54/70/54 — identical.\n *\n * It lives in its OWN `aria-hidden` container on `<body>`: a detached element reports 0, but\n * putting it beside the composer made the typed text visible to queries over the chat tree.\n */\n function measureComposerContent(el: HTMLTextAreaElement): number {\n if (!composerMirror) {\n composerMirror = document.createElement(\"div\");\n composerMirror.setAttribute(\"aria-hidden\", \"true\");\n const s = composerMirror.style;\n s.position = \"absolute\";\n s.visibility = \"hidden\";\n s.pointerEvents = \"none\";\n s.top = \"0\";\n s.left = \"-9999px\";\n s.whiteSpace = \"pre-wrap\";\n s.overflowWrap = \"anywhere\";\n s.wordBreak = \"break-word\";\n composerMirror.dataset.mirror = \"\";\n }\n const cs = getComputedStyle(el);\n for (const prop of [\n \"font-family\", \"font-size\", \"font-weight\", \"line-height\", \"letter-spacing\",\n \"padding-top\", \"padding-bottom\", \"padding-left\", \"padding-right\",\n \"border-top-width\", \"border-bottom-width\", \"box-sizing\",\n ]) {\n composerMirror.style.setProperty(prop, cs.getPropertyValue(prop));\n }\n composerMirror.style.width = `${el.clientWidth}px`;\n /**\n * The text goes in an ATTRIBUTE, rendered by `::after { content: attr(…) }`.\n *\n * Two constraints meet here. The mirror must be in the document (MEASURED: detached reports\n * `scrollHeight: 0`), and it must carry the typed text so the wrap height is right — but a text\n * NODE anywhere in `<body>` is part of `body.textContent`, so a harness (and any \"how many times\n * does this string appear\" check) saw the operator's draft twice. MEASURED: putting the text in\n * `textContent` dropped the smoke suite from 55 passing checks to 10 with \"PENDING ECHO\n * DUPLICATED\".\n *\n * `attr()` rendering keeps the glyphs in the layout while leaving them out of `textContent` —\n * verified: same 70px height for a 3-line value, with `textContent` not containing it.\n */\n composerMirror.setAttribute(\"data-mirror-text\", el.value.endsWith(\"\\n\") ? `${el.value} ` : el.value);\n if (!composerMirrorHost) {\n composerMirrorHost = document.createElement(\"div\");\n composerMirrorHost.setAttribute(\"aria-hidden\", \"true\");\n composerMirrorHost.style.cssText =\n \"position:absolute;left:-9999px;top:0;pointer-events:none\";\n document.body.appendChild(composerMirrorHost);\n }\n if (composerMirror.parentElement !== composerMirrorHost) composerMirrorHost.appendChild(composerMirror);\n if (!composerMirrorStyleAdded) {\n const style = document.createElement(\"style\");\n style.textContent = '[data-mirror]::after{content:attr(data-mirror-text);white-space:pre-wrap;display:block}';\n document.head.appendChild(style);\n composerMirrorStyleAdded = true;\n }\n return composerMirror.scrollHeight;\n }\n /**\n * Size the composer to its content, and keep the reader pinned to the tail when THAT\n * resize is what moved the bottom of the feed.\n *\n * ## Why this is not allowed to touch layout on every keystroke\n *\n * Reported: the tab used a full CPU core and 2 GB. `tailSample()` reads\n * `feed.scrollHeight`, and with ~1,100 rows (many carrying `content-visibility: auto`)\n * that is a FORCED LAYOUT of the entire feed. This function runs from the draft effect —\n * i.e. on EVERY keystroke — and v0.29.38 made it sample TWICE (before and after) and\n * added `void composerEl.clientHeight` to force the reflow in between. So one character\n * cost three synchronous layouts of a 1,100-row document, indefinitely.\n *\n * The reflow is only needed when the composer's height actually CHANGES, which happens\n * on far fewer keystrokes than there are characters (only when a line wraps or unwraps).\n * So: measure the textarea, and bail out early — with no `tailSample()` at all — when the\n * height is unchanged. That keeps the scroll-follow behaviour exactly as it was, because\n * an unchanged composer height cannot have moved the feed's viewport.\n */\n /**\n * The content height this function last applied.\n *\n * `scrollHeight` cannot tell us whether the box needs re-measuring: once the box is sized to\n * its content they are equal, so any comparison of the two is always \"fits\" (MEASURED: the\n * first attempt at this guard used `contentHeight <= current + 1`, which is true at 1, 2 and\n * 3 lines alike, so the collapse stayed unconditional and the 3-line bug came back at 2\n * lines). What actually matters is whether the CONTENT SHRANK since the last measurement —\n * only then can the box be taller than its content.\n */\n let lastAppliedContentH = 0;\n const autosizeComposer = () => {\n if (!composerEl) return;\n const maximized = composerMaximized();\n /**\n * An EMPTY box is always exactly one line — never `scrollHeight`.\n *\n * Reported: shrink the window (the placeholder now wraps), type something, delete it, and\n * the placeholder is left WRAPPED because the box grew to fit it. `scrollHeight` of an empty\n * textarea includes the wrapped placeholder in Chromium, so the measurement the box height\n * comes from would depend on how the PLACEHOLDER happens to wrap — which changes with the\n * window width and has nothing to do with the message being written.\n *\n * A textarea's own `height: auto` is `rows` × line-height, independent of both content and\n * placeholder, so clearing the height is the exact, stable answer for an empty box. This is\n * also the state the composer starts in, so before-typing and after-deleting now match.\n */\n if (!composerEl.value && !maximized) {\n composerEl.style.height = \"\";\n lastAppliedContentH = 0;\n return;\n }\n /**\n * Measure through the MIRROR, so the real box is never collapsed.\n *\n * The old code wrote `height: auto` here to learn the content height, which laid the composer\n * out at ONE LINE for an instant. The composer is a flex sibling of the feed, so the feed's\n * viewport changed with it and the follow policy re-pinned against the one-line floor: the\n * reported \"入力欄が1行のときの上端まで戻る\". It fired on every keystroke whose height did not\n * change, which is why a newline — a case where the final height really does change, so the pin\n * lands correctly — was the one that looked fine.\n */\n const contentH = measureComposerContent(composerEl);\n const wanted = maximized ? -1 : composerHeight(contentH, MAX_COMPOSER_H);\n // apply it unconditionally: an early return must NOT leave the box at a stale height.\n composerEl.style.height = wanted === -1 ? \"\" : `${wanted}px`;\n lastAppliedContentH = contentH;\n // NOTE (#scroll): this function does NOT touch the feed's scroll position.\n //\n // The feed is a flex sibling, so growing this box shrinks the feed's viewport. That is a\n // change to `.feed`'s own BORDER BOX, and the ResizeObserver on the feed sees it — before\n // paint, with the final layout, and for every other cause too (the terminal drawer, the\n // right panel, a window resize). Pinning from HERE was the bug: this runs in the same task\n // as the `height` write, so `pinToTail()` resolved `scrollHeight` against a layout that did\n // not yet include the new composer height, and the reader was pinned to the tail as it was\n // when the box still had its OLD height.\n };\n /** the previous scroll sample, for telling a deliberate scroll from a reflow/clamp */\n let lastSample: TailSample | undefined;\n /**\n * The observed-top LEDGER: where our last programmatic write put `scrollTop`, and the content\n * height at that moment. `classifyScroll()` uses it to recognise its own writes and browser\n * clamps, which is the difference between \"the reader scrolled up\" and \"the layout moved\".\n * Cleared after one delivery — a programmatic write yields exactly one scroll event.\n */\n let ledger: { top: number; height: number } | null = null;\n /** content height at the previous delivery, so a height change can be attributed to layout */\n let lastSampleHeight: number | undefined;\n /**\n * The row the reader is looking at, refreshed whenever they settle.\n *\n * Gecko unskips a `content-visibility` row as it approaches the viewport and does not hold\n * the scroll position across it, so the anchor must be captured BEFORE the unskip and\n * re-applied after. Captured on every scroll delivery while not following: cheap (one row,\n * found by the same binary search a resize already uses) and always current.\n */\n /**\n * How many unskip corrections may run before the next reader gesture.\n *\n * A correction writes `scrollTop`, and a large unskip can produce a burst of deliveries —\n * each of which looks like another `layout` cause. Without a budget the two can chase each\n * other and the feed never settles. It refills on any delivery the READER caused, which is the\n * only signal that they are driving again.\n */\n /**\n * Starts NON-ZERO: a pinned tail has no reader gesture to refill it.\n *\n * It used to start at 0 and refill only on a `reader` delivery. That is the right loop for a\n * parked reader, but while FOLLOWING there is no gesture by definition — so the content-\n * visibility correction could never run there, which is exactly the \"スクロールのブレが直って\n * ない\" that survived v0.35.10. The budget is a loop-breaker, not a permission slip: it only\n * has to stop runaway chased corrections, and 4 is enough for a burst either way.\n */\n const RESYNC_BUDGET_PER_GESTURE = 4;\n /**\n * The largest shift a `content-visibility` unskip can plausibly need correcting for, in pixels.\n *\n * An unskip swaps one row's intrinsic-size GUESS for its real height, so the correction is on the\n * scale of a single row — a few hundred pixels at the very worst for a large tool result. A larger\n * delta means the anchor no longer describes the content (it was captured before a burst of\n * appends, and the throttle let it go stale), and applying it would fling the reader somewhere\n * unrelated: \"原因不明でスクロール追従が外れて500pxくらい戻る\".\n *\n * 240 is deliberately generous — it is above any single row in a normal session, so a real\n * unskip is never skipped, while the reported 500px class of error is refused.\n */\n const RESYNC_MAX_DELTA_PX = 240;\n let resyncBudget = RESYNC_BUDGET_PER_GESTURE;\n /** the viewport height at the previous delivery, so a composer resize is attributable */\n let lastSampleViewport: number | undefined;\n createEffect(() => {\n const v = draft(); // re-run on typing AND after send() clears the draft\n // #the RESIZE must happen AFTER the DOM text is synced, not before. This\n // effect used to run first and call autosizeComposer() straight away, which\n // box at its full multi-line height with nothing in it. `send()` clears the\n // signal, so the order is: write the value, then measure.\n if (!composerEl) return;\n if (!shouldWriteComposerValue(imeInProgress)) return;\n if (composerValueChanged(composerEl.value, v)) composerEl.value = v;\n autosizeComposer();\n });\n /**\n * A WINDOW resize re-wraps the text, so the composer must re-measure.\n *\n * The effect above only re-runs when the DRAFT changes, so widening the window left the box at\n * the height the NARROW layout needed: the text re-wrapped to fewer lines but nothing measured\n * again, and the extra rows stayed as empty space. Reported as \"ウィンドウをせまくしてから元に戻した\n * 時に、横幅がせまくなったことで行数が増えたプロンプト欄が戻らない\".\n *\n * The draft is untouched here, so this is the only thing that can notice. Coalesced into one\n * frame because a drag fires `resize` continuously and each pass reads `getComputedStyle` plus\n * forces a layout on the mirror.\n */\n onMount(() => {\n let pending = 0;\n const onResize = () => {\n if (pending) return;\n pending = requestAnimationFrame(() => {\n pending = 0;\n autosizeComposer();\n });\n };\n window.addEventListener(\"resize\", onResize);\n onCleanup(() => {\n window.removeEventListener(\"resize\", onResize);\n if (pending) cancelAnimationFrame(pending);\n });\n });\n\n /** post a raw prompt (used by composer AND question-option taps) */\n // image attachments staged for the next prompt (data URLs; capped count)\n const [pendingImages, setPendingImages] = createSignal<{ url: string; name: string }[]>([]);\n const addImages = (files: FileList | File[]) => {\n const list = Array.from(files).filter((f) => f.type.startsWith(\"image/\"));\n for (const f of list) {\n if (f.size > 8_000_000) {\n flashHint(`\"${f.name}\" is over 8 MB — skipped`);\n continue;\n }\n const reader = new FileReader();\n reader.onload = () => {\n setPendingImages((prev) =>\n [...prev, { url: String(reader.result), name: f.name }].slice(0, 4),\n );\n };\n reader.readAsDataURL(f);\n }\n };\n /**\n * `source` says WHO is speaking.\n *\n * A slash command that injects harness text (`/skill` sends `[harness] Force-load and follow …`)\n * arrived on the timeline as a message \"from you\", because the route hardcoded \"user\". The client\n * is the only side that knows an instruction came from the harness rather than the operator.\n */\n const sendText = async (text: string, targetId?: string, source?: \"harness\") => {\n const id = targetId ?? selected();\n if (!id) return;\n const images = pendingImages();\n // the echo is filed under the SESSION OF THE AGENT BEING PROMPTED, which is the same handle\n // `pendingKey()` uses (an internal session id, not an agent id). Sending does not require\n // looking at that session — a harness prompt targets an agent that is not selected — and\n // keying by the visible timeline put the echo under whatever was on screen, so an unrelated\n // session showed \"⏳ 1 message queued\" and drew someone else's message in its feed.\n const echoKey = agents().find((a) => a.id === id)?.session || id;\n try {\n const r = await api(`/api/agents/${id}/prompt`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ text, start: true, ...(source ? { source } : {}), ...(images.length ? { images } : {}) }),\n });\n // optimistic echo — replaced by the logged event once the feed catches up.\n // promptId links it to the later prompt-delivered note (real LLM payload).\n //\n // Keyed by the AGENT WE SENT TO, not by the timeline on screen. Sending does not require\n // looking at the session — a harness prompt is fired at an agent that is not selected — and\n // the old key put that echo under the VISIBLE session, so an unrelated session showed\n // \"⏳ 1 message queued\" with someone else's message drawn in its timeline.\n writePending(echoKey, [\n ...pendingFor(echoKey),\n {\n id: `@p${Date.now()}${Math.random().toString(36).slice(2, 6)}`,\n text,\n at: Date.now(),\n promptId: (r as any).promptId,\n ...(images.length ? { images: images.map((i) => i.url) } : {}),\n },\n ]);\n setPendingImages([]);\n // a send exits the maximized composer. It is `position:absolute;\n // inset:0` over the whole column, so leaving it maximized leaves the timeline\n // hidden — and since #134 stopped Enter sending, this is the only way out.\n // Autosize on the next frame: the tall height comes from `.maximized`, so\n // dropping the class alone would leave the textarea expanded.\n if (shouldRestoreAfterSend(composerMaximized())) setComposerMaximized(false);\n // NO explicit scroll here (#scroll).\n //\n // This used to be `requestAnimationFrame(() => requestAnimationFrame(() =>\n // scrollBottom(true)))` — a FORCED jump two frames later, which is the reported\n // \"メッセージ送信直後に謎にスクロールする\". Two things were wrong with it:\n //\n // - `force = true` ignored whether the reader was following, so sending while\n // reading back through history yanked them to the bottom;\n // - it was a guess at when layout had settled. Sending clears the draft, the\n // composer SHRINKS, the feed GROWS, and the optimistic echo adds a row — the\n // scroll target was computed against whichever of those had landed by then.\n //\n // None of it is needed now: every one of those changes resizes `.feed`, and the\n // ResizeObserver on it re-pins iff the reader is following. `autosizeComposer` below\n // is still required to re-measure the (now empty) box.\n /**\n * Shrink the composer BEFORE the frame, not in one.\n *\n * draft effect had already written the empty value, so the box sat one frame at its\n * OLD multi-line height while the feed's ResizeObserver ran. The observer re-pinned\n * the tail against THAT layout, and only then did the composer collapse — which grew\n * the feed by however many lines the composer had been using, leaving the timeline\n * scrolled as if the box were still tall. That is the reported \"入力欄が複数行に拡大して\n * いるときに送ると、拡大していない高さをベースにスクロールが戻る\".\n *\n * Doing it synchronously makes the composer's final height part of the SAME layout the\n * observer then measures, so there is no stale intermediate state to pin against.\n */\n autosizeComposer();\n /**\n * …and PIN, right here, if the reader was following.\n *\n * NEW ROW, which grows content AFTER this turn. That does not resize `.feed` — the feed's\n * border box is unchanged when content inside it grows — so the ResizeObserver never\n * fires, and follow was one interaction behind: the view caught up only when something\n * else happened to change the box. Reported as \"送信したときに追従が維持されることを\n * 期待するけど、追従されてなさそう / ちょっと遅れて追従してる\".\n *\n * `atBottom()` is a STATE here, not a measurement: only a real reader scroll clears it,\n * so a follower reads true and a reader parked in history reads false.\n */\n if (atBottom()) {\n requestAnimationFrame(() => {\n // after the echo has been painted, so the pin target includes its height\n if (atBottom()) pinToTail();\n });\n }\n } catch (ex) {\n saveDraft(text); // never eat the user's message on a failed send\n console.error(\"send failed:\", ex);\n }\n };\n\n const send = async (e: Event) => {\n e.preventDefault();\n const id = selected();\n const text = draft().trim();\n if (!id || !text) return;\n\n // @mentions: persona → spawn sub-agent; agent id → direct message\n if (text.startsWith(\"@\")) {\n const sp = text.indexOf(\" \");\n const name = (sp === -1 ? text.slice(1) : text.slice(1, sp)).toLowerCase();\n const arg = sp === -1 ? \"\" : text.slice(sp + 1).trim();\n const isPersona = personas().some((p) => p.key.toLowerCase() === name);\n const knownAgent = agents().some((a) => a.id.toLowerCase() === name);\n try {\n if (isPersona) {\n if (!arg) { flashHint(`usage: @${name} <task>`); return; }\n const r = await api(`/api/agents/${selected()}/spawn`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ persona: name, task: arg, context: mentionFork() ? \"fork\" : \"none\" }),\n });\n flashHint(`🧩 spawned ${(r as any).id}${mentionFork() ? \" (forked context)\" : \"\"}`);\n refreshAgents(); saveDraft(\"\");\n } else if (knownAgent) {\n if (!arg) { flashHint(`usage: @${name} <message>`); return; }\n await api(`/api/agents/${encodeURIComponent(name)}/prompt`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ text: arg, start: true }),\n });\n flashHint(`→ delivered to @${name}`);\n saveDraft(\"\");\n } else {\n flashHint(`unknown @${name} — personas: ${personas().map((p) => p.key).join(\", \") || \"(none)\"}`);\n return;\n }\n } catch (ex) {\n flashHint(`@${name} failed: ${(ex as Error).message}`);\n }\n return;\n }\n\n // slash commands are client-side operations\n if (text.startsWith(\"/\")) {\n const sp = text.indexOf(\" \");\n const name = (sp === -1 ? text.slice(1) : text.slice(1, sp)).toLowerCase();\n const arg = sp === -1 ? \"\" : text.slice(sp + 1).trim();\n if (name === \"goal\" && !arg) { saveDraft(\"/goal \"); return; } // keep typing\n if (name === \"skill\" && !arg) { saveDraft(\"/skill \"); return; }\n saveDraft(\"\");\n try {\n await executeSlash(name, arg);\n } catch (ex) {\n // a failed command must not eat the operator's input — sendText\n // already restores its draft on failure; commands now do too\n saveDraft(draft() ? `${text}\\n${draft()}` : text);\n throw ex;\n }\n return;\n }\n\n saveDraft(\"\");\n await sendText(text);\n // this USED to restore the normal view on send. The rationale was that\n // \"staying maximized hid the timeline for no reason\" — but that reason only\n // applies if you cannot see the reply. With Enter no longer sending (above),\n // a maximized composer is a deliberate writing mode you use for a whole\n // message, and collapsing it mid-message discarded the mode you asked for.\n //\n // The button beside the toggle is still there to restore it.\n };\n\n const executeSlash = async (name: string, arg: string): Promise<void> => {\n const id = selected();\n if (!id) return;\n const post = (p: string, body?: unknown) =>\n api(`/api/agents/${id}${p}`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n }).then(refreshAgents);\n try {\n if (name === \"start\") await post(\"/start\");\n else if (name === \"stop\") await post(\"/stop\");\n else if (name === \"fork\") { await post(\"/fork\", {}); await select(id); }\n else if (name === \"compact\") {\n const r: any = await post(\"/compact\");\n flashHint(r?.ran ? \"context compacted\" : \"nothing to compact yet\");\n }\n else if (name === \"goal\") {\n if (!arg) { flashHint(\"usage: /goal <text>\"); return; }\n await post(\"/goal\", { text: arg, notify: true });\n flashHint(\"goal saved & notification queued\");\n }\n else if (name === \"skill\") {\n if (!arg) { flashHint(\"usage: /skill <name>\"); return; }\n await sendText(\n `[harness] Force-load and follow the skill \"${arg}\" now: call load_skill(\"${arg}\") and execute its playbook for the current task.`,\n undefined,\n \"harness\",\n );\n flashHint(`skill \"${arg}\" dispatched`);\n }\n else {\n flashHint(`unknown command \"${name}\" — /start /stop /fork /goal /skill /compact`);\n }\n } catch (ex) {\n flashHint(`/${name} failed: ${(ex as Error).message}`);\n }\n };\n\n // The right panel's scroll position used to reset whenever a control button\n // (▶ start / ■ stop / goal save…) refreshed the agents: content inside was\n // rebuilt and the browser clamped scrollTop. Keep the offset and restore it\n // on every repaint triggered by an agents update.\n let rightbarEl: HTMLDivElement | undefined;\n let rightbarTop = 0;\n createEffect(() => {\n agents(); // re-arm on every agents update (incl. start/stop refreshes)\n // double rAF: the first frame applies Solid's DOM writes, the second\n // measures/restores AFTER layout settles — restoring too early let the\n // browser clamp scrollTop to the OLD height and the panel visibly jumped\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (!rightbarEl) return;\n const target = Math.min(rightbarTop, rightbarEl.scrollHeight);\n if (Math.abs(rightbarEl.scrollTop - target) > 1) rightbarEl.scrollTop = target;\n });\n });\n });\n const act = (path: string) =>\n () => selected() && api(`/api/agents/${selected()}${path}`, { method: \"POST\" }).then(refreshAgents);\n\n /**\n * Archive this agent and its subtree.\n *\n * Lifted out of the right panel's `⏯ controls` block so the HEADER can own it (#panel):\n * those controls were only reachable with the details panel open, so pausing or archiving\n * the agent you were reading required opening a second surface first.\n */\n const archiveSelected = async () => {\n const id = selected();\n if (!id) return;\n // The whole SUBTREE goes too: a sub-agent cannot run once its parent is archived (the\n // parent is what spawns and messages it), so leaving the descendants in the list produced\n // entries that looked usable and were not.\n const doomed = new Set([id, ...descendantsOf(agents(), id).map((a) => a.id)]);\n const subs = doomed.size - 1;\n if (\n !confirm(\n `archive agent ${id}?\\n\\n` +\n (subs > 0 ? `Its ${subs} sub-agent${subs === 1 ? \"\" : \"s\"} will be archived too.\\n\\n` : \"\") +\n \"They stop running and leave the list, but the config and full session history are \" +\n \"KEPT — restore any of them from ⚙️ settings → archive.\",\n )\n )\n return;\n await api(`/api/agents/${id}/archive`, { method: \"POST\" }).catch(() => {});\n setAgents(agents().filter((a) => !doomed.has(a.id)));\n // the agent is gone, so its session is too — drop the cached index or the UI keeps\n // routing to a session that no longer exists\n void refreshSessionIndex(true);\n // Switch to a USABLE neighbour. `rest[0]` was picked blindly, and the first remaining row\n // can be a 👻 ghost (workspace gone) — landing the operator on a dead session right after\n // they tidied up is the opposite of what archiving is for.\n const next = pickAfterArchive(agents(), doomed);\n if (next) select(next.id);\n else {\n setSelected(null);\n setEvents([]);\n }\n };\n\n /** stop every sub-agent this agent spawned (descendants included) */\n const stopChildren = async () => {\n if (!selected()) return;\n const r = await api(`/api/agents/${selected()}/stop-children`, { method: \"POST\" });\n flashHint(`stopped: ${((r as any).stopped ?? []).join(\", \") || \"(none)\"}`);\n refreshAgents();\n };\n\n /** fork: branch off the conversation here without disturbing the main line */\n const forkSelected = () =>\n api(`/api/agents/${sel()!.id}/fork`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: \"{}\",\n }).then(async () => {\n await refreshSessionIndex(true);\n await select(sel()!.id);\n });\n\n // Goal input as SIGNALS (not uncontrolled DOM): the right panel re-renders\n // on every agent snapshot, and status flips / <Show> boundary crossings\n // rebuilt the form subtree — silently wiping half-typed goals mid-input.\n const [goalDraft, setGoalDraft] = createSignal(\"\");\n /**\n * The goal box is draggable and remembered — same treatment as the todo editor.\n *\n * に高い\": it was a fixed `rows={3}`, so a long goal permanently owned three lines of a narrow\n * panel. `resize: vertical` was already on it, but the drag did not survive a reload.\n */\n const [goalHeight, setGoalHeight] = createSignal(storedTextareaHeight(\"goal\"));\n // the PREVIEW is a separate box with its own remembered height\n const [goalPreviewHeight, setGoalPreviewHeight] = createSignal(storedTextareaHeight(\"goalPreview\"));\n const goalPreviewStyle = (): Record<string, string> => {\n const base: Record<string, string> = {\n \"max-height\": \"none\",\n \"overflow-y\": \"auto\",\n resize: \"vertical\",\n };\n if (goalPreviewHeight() > 0) base.height = `${goalPreviewHeight()}px`;\n return base;\n };\n const trackGoalPreviewHeight = (el: HTMLElement) => {\n const stop = trackTextareaHeight(el, (h) => {\n setGoalPreviewHeight((cur) => {\n if (Math.abs(cur - h) < 1) return cur;\n rememberTextareaHeight(\"goalPreview\", h);\n return h;\n });\n });\n onCleanup(stop);\n };\n const goalHeightStyle = () => (goalHeight() > 0 ? { height: `${goalHeight()}px` } : undefined);\n const trackGoalHeight = (el: HTMLTextAreaElement) => {\n const stop = trackTextareaHeight(el, (h) => {\n setGoalHeight((cur) => {\n if (Math.abs(cur - h) < 1) return cur;\n rememberTextareaHeight(\"goal\", h);\n return h;\n });\n });\n onCleanup(stop);\n };\n const [goalVerifyDraft, setGoalVerifyDraft] = createSignal(\"\");\n const [_goalDirty, setGoalDirty] = createSignal(false);\n const [goalNotify, setGoalNotify] = createSignal(true);\n let goalSeededFor = \"\";\n createEffect(() => {\n const id = selected();\n if (!id) return;\n const g = sel()?.goal;\n if (id !== goalSeededFor) {\n goalSeededFor = id; // session switch → seed from the server copy\n setGoalDirty(false);\n setGoalDraft(\"\");\n setGoalVerifyDraft(\"\");\n void g; // goal text itself stays in the read-only card above the form\n }\n });\n const setGoal = async (e: Event) => {\n e.preventDefault();\n if (!selected() || !goalDraft().trim()) return;\n try {\n await api(`/api/agents/${selected()}/goal`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n text: goalDraft(),\n notify: goalNotify(),\n // only send when non-empty — an empty box must not wipe a contract\n ...(goalVerifyDraft().trim() ? { verify: goalVerifyDraft() } : {}),\n }),\n });\n setGoalDraft(\"\");\n setGoalVerifyDraft(\"\");\n setGoalDirty(false);\n refreshAgents();\n } catch (ex) {\n // keep the draft on failure — a wiped form AND an error hint was the\n // worst possible outcome for a long goal text\n flashHint(`goal save failed: ${(ex as Error).message}`);\n }\n };\n\n return (\n <>\n <Show when={authLocked()}>\n <div class=\"overlay\">\n <div class=\"modal\" style=\"max-width:360px\">\n <div class=\"modal-head\"><b>🔒️ sign in</b><span /></div>\n <form\n onsubmit={(e) => {\n e.preventDefault();\n const el = document.getElementById(\"pw-input\") as HTMLInputElement;\n localStorage.setItem(\"teapot.token\", el.value);\n location.reload();\n }}\n style=\"display:flex;flex-direction:column;gap:10px\"\n >\n <input id=\"pw-input\" type=\"password\" placeholder=\"password\" autofocus />\n <button type=\"submit\" class=\"primarybtn\">unlock</button>\n <span class=\"muted\" style=\"font-size:11px\">the token is stored locally and sent as Bearer to this server only</span>\n </form>\n </div>\n </div>\n </Show>\n {/**\n * The wallpaper layer lives OUTSIDE `.layout`, as its own sibling.\n *\n * This is the whole fix for \"背景色があるときにUIのほぼすべてが透明になってほぼ何も見えない\":\n * the image was INSIDE `.layout`, which is `position: relative; z-index: 1` and therefore a\n * stacking context. Within that context `.bgphoto` had `z-index: 0`, while the sidebar, the\n * feed and the panels are ordinary STATIC elements — so the positioned image painted ON TOP of\n * all of them. What looked like transparency was the photo covering the UI with the text\n * faintly showing through.\n *\n * A backdrop cannot be a child of the thing it sits behind. As a sibling with `z-index: -1` it\n * is behind `.layout`'s own stacking context, and no z-index inside the app can accidentally\n * interact with it.\n */}\n <Show when={activeBgImage()}>\n {(src) => (\n /**\n * TWO elements, because the dim must be painted ABOVE the image.\n *\n * The image cannot dim itself: `filter: brightness()` with a factor below 1 darkens, and\n * above 1 it does NOT brighten — MEASURED, a white pixel at 0.45 renders 115/255 and a\n * black pixel at 1.55 stays 0. So one filter cannot do \"dark veil on dark themes, pale\n * veil on light ones\", which is what the operator asked for.\n *\n * A `background` on the `<img>` cannot either — a background paints BEHIND an image's own\n * pixels, and an `::after` never renders because an `<img>` is a replaced element. Hence a\n * sibling veil element stacked on top, both inside the fixed wrapper.\n */\n <div class=\"bgphoto\" aria-hidden=\"true\">\n <img\n src={bgSrc(src(), BG_WIDTHS[BG_WIDTHS.length - 1])}\n srcset={bgSrcSet(src())}\n sizes=\"100vw\"\n alt=\"\"\n decoding=\"async\"\n />\n <span class=\"bgphoto-veil\" />\n </div>\n )}\n </Show>\n <div class={\"layout\" + (showRight() ? \"\" : \" right-hidden\") + (showLeft() ? \" left-open\" : \"\")}>\n {/* A narrow screen gets a drawer for the SIDEBAR too, with the same gestures as the right\n panel: a hamburger to open, a backdrop or ✕ to close. Wide screens never see any of it —\n `narrow()` gates every piece, so the desktop grid is exactly what it was. */}\n <Show when={narrow() && showLeft()}>\n <div class=\"leftbarbackdrop\" onclick={closeLeft} />\n </Show>\n {/* ---------- sidebar ---------- */}\n <nav class={\"sidebar\" + (showLeft() ? \" open\" : \"\")}>\n {/* the ✕ only exists in the drawer form; on desktop the sidebar is always visible */}\n <Show when={narrow()}>\n <div class=\"sidehead\">\n <b>agents</b>\n <button class=\"iconbtn\" title=\"close the agent list\" onclick={closeLeft}>✕</button>\n </div>\n </Show>\n <div class=\"agent-list\">\n <For each={sidebarRows()}>\n {(row) => (\n <>\n {/* workspace header: which project this chat belongs to */}\n <Show when={row.wsHeader !== undefined && row.wsHeader !== \"\"}>\n <div\n class=\"wsheader\"\n title={\n row.wsCollapsedGroup\n ? `${row.wsHeader} — collapsed (${wsCountLabel(row.wsHeader!)} hidden). Click to show.`\n : (wsChatCounts().get(row.wsHeader!) ?? 0) > 1\n ? `${row.wsHeader} — ${wsCountLabel(row.wsHeader!)} in this directory`\n : row.wsHeader || \"\"\n }\n onclick={() => toggleWsGroup(`ws:${row.wsHeader}`, basenameOf(row.wsHeader!), row.wsCollapsedGroup === true, row.collapsedVia)}\n ><span class=\"wscaret\">{row.wsCollapsedGroup ? \"▸\" : \"▾\"}</span>{basenameOf(row.wsHeader!)}\n {/* several separate chats often share one directory — say so,\n so the group reads as N chats rather than one.\n A COLLAPSED group must always show the count: that is\n the only thing telling the operator how much is hidden. */}\n <Show when={(wsChatCounts().get(row.wsHeader!) ?? 0) > 1 || row.wsCollapsedGroup}>\n <span class=\"wscount\">{wsChatCounts().get(row.wsHeader!) ?? 0}</span>\n </Show>\n </div>\n </Show>\n {/* A collapsed group shows its header and nothing else; a header row\n never renders its own agent, which would double the chat.\n The `chat:<id>` header is GONE (#18 follow-up): a directory\n holding six chats rendered thirteen rows, each chat repeated\n under a header bearing its own name. The chat row is the\n group — it carries the caret below — so nothing is lost but\n the duplication. */}\n {/* A collapsed CHAT still renders its row (dimmed, ▸) — with the\n chat header gone that row is the only control that can bring\n it back, so hiding it would strand the chat for good.\n Collapsing the DIRECTORY still hides every row under it,\n because the directory header is what reopens that. */}\n <Show when={!row.headerOnly && !row.wsCollapsedGroup}>\n <div\n class={\"agent-item\" + (row.a.id === selected() ? \" sel\" : \"\") + (row.depth > 0 ? \" sub-row\" : \"\") + (row.chatCollapsedGroup ? \" collapsed\" : \"\")}\n style={row.depth > 0 ? `padding-left:${10 + row.depth * 14}px` : \"\"}\n // a COLLAPSED chat must be selectable. What made it read as\n // unselectable was its APPEARANCE — `opacity: .5` plus\n // `cursor: default`, so a collapsed parent looked greyed out and\n // disabled. That was a styling bug, and it is fixed in the CSS:\n // the name is full-contrast and the row keeps `cursor: pointer`.\n //\n // an earlier version of this ALSO expanded the chat on\n // select. That was my over-correction — the operator's collapse\n // state is theirs, and forcing it open on every visit made the\n // sub-agent list impossible to keep out of the way. Clicking the\n // row now only selects; the CARET is the control that expands,\n // and both directions remain reversible.\n onclick={() => select(row.a.id)}\n title={\n row.a.parent\n ? // #121: the name is what the operator needs; the parent is\n // already visible in the row above. Fall back to the old\n // wording when the id carries no recoverable name.\n (() => {\n const named = subAgentDisplayName(row.a.id, personas().map((p) => p.key));\n return named\n ? `sub-agent of @${row.a.parent} — \"${named}\"`\n : `sub-agent of @${row.a.parent}`;\n })()\n : undefined\n }\n >\n {/* A TOP-LEVEL CHAT is always collapsible, whether or not it has\n sub-agents. It is its own group — that is what #18 needed\n when two chats shared a directory — and with the chat\n header gone, this caret is the ONLY control for it, so\n gating it on \"has children\" would make a childless chat\n impossible to collapse and, once collapsed (by a stored\n `chat:<id>` key), impossible to reopen. Only a SUB-agent\n with no children of its own has nothing to collapse. */}\n {/* #106: a caret that collapses nothing is noise — but NEVER at\n * the cost of stranding a chat.\n *\n * The report is right about the common case: a chat with no\n * sub-agents, not collapsed, has a caret that does nothing.\n *\n * The obvious implementation — gate a top-level chat's caret on\n * \"has children\" — is WRONG, and #18 documented why. Collapsing\n * is what WRITES the `chat:<id>` key, so a childless chat can\n * never have one from a click... but it can have a STALE one, and\n * there are two ordinary paths to that:\n *\n * 1. upgrade: every chat was collapsed under the old header, so\n * every existing install starts with `chat:<id>` keys set;\n * 2. a chat that HAD sub-agents, collapsed, then the subs\n * finished or were disposed.\n *\n * In both, `sidebarRowsOf` still renders the row (marked\n * `chatCollapsedGroup`), so it is visible — but with no caret\n * there is NO on-screen control to clear the key. The chat is\n * stuck showing its ▸ forever. That is the strand-a-chat bug, and\n * I reproduced it before writing this.\n *\n * So the gate is \"has children OR is currently collapsed\", which\n * makes the caret exactly as visible as it needs to be: absent\n * only when it would do nothing, present whenever it is the way\n * out.\n */}\n <Show\n when={shouldShowCollapseCaret({\n isSub: !!row.a.parent,\n collapsed: row.chatCollapsedGroup === true,\n hasChildren: agents().some((x) => x.parent === row.a.id),\n })}\n fallback={<span class=\"caret-spacer\" />}\n >\n {(() => {\n const isChat = !row.a.parent;\n // a top-level chat's subtree is hidden by TWO different\n // sets, and the caret must agree with both.\n //\n // - `chat:<id>` in wsCollapsed (what this caret writes)\n // - the bare id in `teapot.collapsed` (what treeRowsOf\n // checks `collapsedSubs` to hide the children)\n //\n // Reading only chatCollapsed() is what produced the reported\n // DOM: an expanded caret (▾), a 🧩N badge, and no child rows at\n // all — because a stale `teapot.collapsed` entry hid the\n // subtree while the caret claimed it was open. The badge uses\n // descendantsOf() and never consults either set, so it kept\n // counting children that were hidden.\n //\n // So `off` is true if EITHER set says collapsed, and clicking\n // clears both — otherwise the caret could point open at a\n // hidden subtree, or clear one key and leave the other.\n // a top-level chat's caret hides its CHILD rows too, so it is\n // collapsed if either the chat group or its own sub-group says so;\n // both default to closed now\n const off = isChat\n ? chatCollapsed().has(`chat:${row.a.id}`) || subsCollapsed(row.a.id)\n : subsCollapsed(row.a.id);\n return (\n <span\n class=\"caret\"\n title={\n isChat\n ? off\n ? `show ${row.a.id}`\n : `hide ${row.a.id} and its sub-agents`\n : off\n ? \"expand sub-agents\"\n : \"collapse sub-agents\"\n }\n onclick={(e: MouseEvent) => {\n e.stopPropagation();\n // top-level chats share the persisted group set, so a\n // reload keeps them collapsed; sub-agent collapse is\n // its own set, as before\n if (isChat) {\n // SUB-GROUPS ARE COLLAPSED BY DEFAULT, so `off` is true for a chat\n // purely because its sub-group was never expanded. Toggling only the\n // ws-group then EXPANDED the group while the caret still read\n // closed — the click looked like it did nothing. Clear BOTH sources\n // of \"off\" when opening, and set both when closing.\n if (off) {\n if (!expandedSubs().has(row.a.id)) {\n const next = new Set(expandedSubs());\n next.add(row.a.id);\n setExpandedSubs(next);\n localStorage.setItem(\"teapot.expandedSubs\", JSON.stringify([...next]));\n }\n if (collapsedSubs().has(row.a.id)) {\n const next = new Set(collapsedSubs());\n next.delete(row.a.id);\n setCollapsedSubs(next);\n localStorage.setItem(\"teapot.collapsed\", JSON.stringify([...next]));\n }\n } else if (expandedSubs().has(row.a.id)) {\n const next = new Set(expandedSubs());\n next.delete(row.a.id);\n setExpandedSubs(next);\n localStorage.setItem(\"teapot.expandedSubs\", JSON.stringify([...next]));\n }\n toggleWsGroup(`chat:${row.a.id}`, row.a.id, off);\n } else toggleCollapse(row.a.id);\n }}\n >{off ? \"▸\" : \"▾\"}</span>\n );\n })()}\n </Show>\n {/* Two different waits, two different marks. `waiting` covers both a parked tool\n (resumes by itself) and an ask_user question (needs the operator), and one\n pulsing accent dot for both said \"something is happening\" without saying\n whether it is waiting on YOU. */}\n <span\n class={`dot ${row.a.status}`}\n title={\n row.a.status === \"needs_operator\"\n ? \"waiting for your answer\"\n : row.a.status === \"waiting\"\n ? \"waiting on its own work — resumes by itself\"\n : row.a.status\n }\n />\n <span\n class={row.a.workspaceMissing ? \" ghost\" : \"\"}\n /* show the session's own title when it has one, so several\n sessions of one agent are distinguishable at a glance. The id\n stays visible in the tooltip AND remains the fallback text —\n a session whose first prompt had no usable line must still\n render something clickable. */\n title={\n row.a.workspaceMissing\n ? `workspace not found on disk (${row.a.workspace}) — it will be created when this session runs`\n : agentLabelWithId({ id: row.a.id, sessionTitle: row.a.sessionTitle ?? sessionTitles().get(row.a.session ?? \"\") })\n }\n >{agentLabel({ id: row.a.id, sessionTitle: row.a.sessionTitle ?? sessionTitles().get(row.a.session ?? \"\") })}</span>\n {row.a.workspaceMissing ? <span class=\"ghosttag\" title=\"workspace missing\">👻</span> : null}\n <Show when={subtreeUnread(row.a.id) > 0}>\n <span class=\"notifbadge\" title={`${subtreeUnread(row.a.id)} unread notification${subtreeUnread(row.a.id) > 1 ? \"s\" : \"\"} (including sub-agents)`}>\n 🔔️{subtreeUnread(row.a.id)}\n </span>\n </Show>\n {/* Collapsed tree: surface how many subs are hidden so a busy\n parent doesn't look idle with its subtree away.\n #81: the gate was `collapsedSubs().has(id)` alone, but there\n are TWO ways a subtree gets hidden — collapsing the subs, or\n collapsing the CHAT — and the second is tracked by\n `chatCollapsed()`. So collapsing the chat hid every sub-agent\n with no count and no indicator, which is exactly the reported\n \"a session that has sub-agents shows none of them\".\n Either way, hide the badge only when nothing is hidden. */}\n <Show\n when={\n // #panel: this read the RAW persisted set, but sub-agent groups are now\n // COLLAPSED BY DEFAULT — \"not in the set\" means CLOSED, not open. So the\n // badge was hidden on every default-collapsed row, which is nearly all of\n // them: a caret appeared (there ARE children) but the count that explains\n // it did not. `subsCollapsed()` is the same predicate the caret uses.\n subsCollapsed(row.a.id) ||\n (row.chatCollapsedGroup === true && chatCollapsed().has(`chat:${row.a.id}`))\n }\n >\n {(() => {\n // DESCENDANTS, not just direct children. A sub-agent\n // that spawned its own was not counted at all, so the badge\n // understated the subtree and — because the `· ▶N` active\n // count had the same shape — a busy nested sub read as idle.\n // This is the same recursion `subtreeUnread` uses, so the\n // badge and the unread badge can no longer disagree.\n const kids = descendantsOf(agents(), row.a.id);\n const running = kids.filter(\n (k) => k.live ?? (k.status === \"running\" || k.status === \"waiting\" || k.status === \"needs_operator\"),\n ).length;\n return kids.length > 0 ? (\n <span\n class={\"subcount\" + (running > 0 ? \" live\" : \"\")}\n title={`${kids.length} sub-agent${kids.length > 1 ? \"s\" : \"\"} (${running} active)`}\n >\n 🧩 {kids.length}{running > 0 ? ` · ▶${running}` : \"\"}\n </span>\n ) : null;\n })()}\n </Show>\n <Show when={row.a.parent}><span class=\"subtag\">🧩</span></Show>\n <Show when={agentTasks(row.a.id).length > 0}>\n <span class=\"mini-cron\" title={agentTasks(row.a.id).map((t) => `${t.id}: ${t.schedule}`).join(\"\\n\")}>⏰</span>\n </Show>\n <Show when={row.a.goal.status === \"done\"}><span class=\"goaldone\" title=\"goal done\">✓</span></Show>\n </div>\n </Show>\n </>\n )}\n </For>\n </div>\n <div class=\"sidebar-footer\">\n {/* row 1: buttons (incl. notification bell) — row 2: branding + live dot */}\n <div class=\"footer-row\" style=\"justify-content:flex-end\">\n <button\n class={\"iconbtn notifbtn\" + (unreadCount() > 0 ? \" has-unread\" : \"\")}\n title={unreadCount() > 0 ? `${unreadCount()} unread notifications` : \"notifications\"}\n onclick={(e: MouseEvent) => {\n e.stopPropagation();\n setShowNotifs(!showNotifs());\n if (!showNotifs()) setNotifs((l) => l.map((n) => ({ ...n, read: true })));\n }}\n >\n 🔔️<Show when={unreadCount() > 0}><i class=\"notifdot\">{unreadCount()}</i></Show>\n </button>\n <IconBtn\n icon=\"👻\"\n active={hideGhosts()}\n title={hideGhosts() ? \"show ghost sessions again (👻 workspace missing on disk)\" : \"hide ghost sessions (👻 — their workspace directory no longer exists)\"}\n onClick={(e) => {\n e.stopPropagation();\n const next = !hideGhosts();\n setHideGhosts(next);\n localStorage.setItem(\"teapot.hideGhosts\", next ? \"1\" : \"0\");\n // keep the selection valid when the current session gets hidden\n if (next && selected() && sel()?.workspaceMissing) {\n const firstVisible = agents().find((a) => !a.workspaceMissing);\n if (firstVisible) select(firstVisible.id);\n }\n }}\n />\n <IconBtn icon=\"+\" title=\"new agent\" onClick={() => { loadCfg(); setShowNew(true); }} />\n {/* 🎨 themes moved into ⚙️ settings → appearance: a theme is a PREFERENCE, not a\n per-session action, and the editor (palette rows + a background picker) needs\n room a popover cannot give. */}\n <IconBtn icon=\"⚙️\" title=\"settings\" onClick={() => { loadCfg(); setShowCfg(true); }} />\n </div>\n <div class=\"brand-row\">\n <div class=\"brand\">\n 🫖 teapot <span class=\"version\">v{__APP_VERSION__}</span>\n <span class={\"conn\" + (connected() ? \" ok\" : \"\")} title={connected() ? \"live (websocket)\" : \"reconnecting…\"} />\n </div>\n </div>\n <div class=\"metrics\">\n <Show when={metrics()}>\n {/**\n * `rss` leads but does not answer \"is it leaking\".\n *\n * V8 keeps freed pages in its arenas, so RSS sits far above the live set and only\n * drops on a major GC — an operator watching it saw \"501.4MB · heap 220.3MB\" and\n * reasonably asked whether memory was out of control. The committed heap and the\n * non-heap (`ext`) are shown alongside so the gap is readable at a glance instead\n * of needing a measurement session to interpret.\n */}\n master rss {metrics().rssMb}MB · heap {metrics().heapUsedMb}MB\n <Show when={metrics().heapTotalMb !== undefined}> · total {metrics().heapTotalMb}MB</Show>\n <Show when={metrics().externalMb !== undefined}> · ext {metrics().externalMb}MB</Show>\n <br />\n load1 {metrics().loadavg1} · up {Math.floor(metrics().uptimeSec / 60)}m\n </Show>\n </div>\n </div>\n </nav>\n\n {/* ---------- channel ---------- */}\n <section class=\"channel\" style={{ \"--termh\": `${termHeight()}px` } as any}>\n {/* keyed on the agent id: an agent-update snapshot replaces the agent OBJECT, and an\n object-gated Show would rebuild the whole layout (and every focused\n control in it) on every poll. */}\n <Show when={sel()?.id} keyed fallback={<div style=\"display:grid;place-items:center;height:100%\" class=\"muted\">select an agent</div>}>\n <header class=\"chan-head\">\n {/* the only way to reach the agent list on a phone; absent on a wide screen, where\n the sidebar is a permanent column and a hamburger would be a dead control */}\n <Show when={narrow()}>\n <button\n class=\"iconbtn ham\"\n title=\"agent list\"\n aria-expanded={showLeft()}\n onclick={() => setShowLeft(!showLeft())}\n >☰</button>\n </Show>\n <span class=\"hash\">#</span>\n <span class=\"title\" title={agentLabelWithId(sel(), sel()!.session)}>{agentLabel(sel())}</span>\n {/**\n * The badge carries the status; its tooltip carries the REASON, and only when the\n * reason adds something.\n *\n * The server writes a reason on every status change, so it is usually mechanical\n * (\"round complete\", \"prompt\", \"goal set\") — repeating it was what made a bare ℹ\n * glyph appear on almost every session. But one case IS worth reading: a tool that\n * parked the agent (`wait_children`) sets idle with an explanation of how to take\n * over. Saying so on the badge keeps that available without a glyph that stands for\n * nothing on its own.\n */}\n <span\n class={`badge ${sel()!.status}`}\n title={\n sel()!.statusReason && !/^(round complete|prompt|api start|goal set|created via web|start)$/.test(sel()!.statusReason)\n ? `${sel()!.status} — ${sel()!.statusReason}`\n : undefined\n }\n >\n {sel()!.status}\n </span>\n <Show when={queuedCount() > 0}>\n <span\n class=\"badge queued\"\n title={(() => {\n /**\n * Count and describe the queue by WHO queued each message.\n *\n * The badge counted every queued prompt but called them all \"from you\", and\n * harness prompts (an audit retry, a \"keep going\" nudge) are in the same queue —\n * so the count grew for messages the operator never wrote (#122). A harness\n * message also cannot be withdrawn, so promising \"each can be withdrawn with ✕\n * cancel\" was false for exactly those.\n */\n const q = sel()!.pendingPromptQueue ?? [];\n const n = q.length || sel()!.pendingPromptIds?.length || sel()!.pendingPrompts || 0;\n const mine = q.length ? q.filter((x) => (x.source ?? \"user\") === \"user\").length : n;\n const harness = n - mine;\n const label = `${n} message${n > 1 ? \"s\" : \"\"} queued${harness ? ` — ${mine} from you, ${harness} from the harness` : \" from you\"}`;\n const stopped = sel()!.status === \"stopped\";\n return (\n `${label}. ${stopped ? \"This agent is STOPPED, so nothing will run until you press start (or it is resumed).\" : \"They are handed to the model at its next turn boundary — the timeline shows them as queued… until then.\"}` +\n (mine ? \" Yours can be withdrawn with ✕ cancel while still queued.\" : \"\")\n );\n })()}\n >\n {/**\n * The LABEL must come from the same count as the visibility test.\n *\n * `<Show>` was gated on `queuedCount()` (snapshot OR echoes) while the text read\n * the snapshot alone, so an echo-only queue rendered \"⏳ 0 of yours queued\" —\n * a badge that says there is nothing while announcing itself.\n */}\n ⏳ {queuedCount()} {queuedCount() === 1 ? \"message\" : \"messages\"} queued\n {sel()!.status === \"stopped\" ? \" (stopped)\" : \"\"}\n </span>\n </Show>\n <Show when={agentTasks(sel()!.id).length > 0}>\n <span class=\"badge cron\" title={`scheduled tasks:\\n${agentTasks(sel()!.id).map((t) => `${t.schedule} · ${t.id}${t.forked ? \" (forked)\" : \"\"}`).join(\"\\n\")}`}>\n ⏰ {agentTasks(sel()!.id).length}\n </span>\n </Show>\n {/* Metadata recedes: it is REFERENCE, not something read while\n working. It used to be the same weight as the controls beside it,\n so the header read as one undifferentiated row of text. */}\n <span class=\"sub\" title={`${sel()!.model} · ${sel()!.session}/${sel()!.branch} · turns ${sel()!.stats.turns} · tools ${sel()!.stats.toolCalls}`}>\n {sel()!.model} · {sel()!.session}/{sel()!.branch} · {sel()!.stats.turns}↻ {sel()!.stats.toolCalls}⚙️\n </span>\n <span class=\"head-actions\">\n {/* No ℹ glyph here.\n It appeared whenever `statusReason` was set, which the server fills on EVERY\n status write — \"round complete\" after each idle, \"prompt\", \"goal set\". So it\n was almost always on screen, and it said nothing the `badge` beside it had not\n already said: the one fact it carried was hidden behind a hover, and that fact\n was mechanical. A glyph you cannot read without hovering, repeating a word\n already on screen, is noise. */}\n {/* THE primary action, moved out of the details panel.\n Starting and stopping is what an operator does most, and it was\n only reachable by opening a side panel — every other control was\n closer to hand than the one that matters. It keeps the same\n persistent-element trick as its old home (a `() =>` wrapper, not a\n bare expression, or the handler freezes to the label it was born\n with — see the #59 note on the original). */}\n {/* The PRIMARY action carries its WORD, not just a glyph.\n \"▶\" alone was indistinguishable from the four other square buttons beside it,\n so the one control an operator uses constantly looked like decoration. A\n labelled button also says what pressing it does before you press it. */}\n <button\n class={\"runbtn\" + (isSelLive() ? \" danger\" : \"\")}\n title={\n isSelLive()\n ? \"interrupt: aborts the current LLM call; the running tool finishes first\"\n : \"run toward the goal (starts the loop)\"\n }\n onclick={() => (isSelLive() ? act(\"/stop\") : act(\"/start\"))()}\n >\n {isSelLive() ? \"■ stop\" : \"▶ start\"}\n </button>\n {/* SECONDARY actions, visually separated so they read as a group rather than as\n five more things of equal weight. Stop-subs is the one exception that stays\n close to ▶/■: it is the same \"interrupt\" family, and it is only present when\n there are sub-agents to stop. */}\n <Show when={agents().some((a) => a.parent === selected())}>\n <IconBtn icon=\"⏹\" title=\"stop every sub-agent this agent spawned (descendants included)\" onClick={stopChildren} />\n </Show>\n <span class=\"head-sep\" aria-hidden=\"true\" />\n {/**\n * ORDER: archive · fork · terminal · panel.\n *\n * The panel toggle used to sit next to fork, and the operator kept hitting ARCHIVE\n * on the way to it: \"右パネル開閉しようとしてアーカイブしかけたことが何回かある\".\n * Archive is the destructive one, so it goes FURTHEST from the toggle rather than\n * beside it — the toggle is the most-used control, and its neighbour should not be\n * the only irreversible action in the row (it is reversible, but not obviously so).\n */}\n <IconBtn icon=\"🗄\" title=\"archive this agent — reversible: it leaves the list but keeps its config and history (restore in ⚙️ settings → archive)\" onClick={archiveSelected} />\n <IconBtn icon=\"⑂\" title=\"fork: branch off the conversation here — try things without disturbing the main line\" onClick={forkSelected} />\n <IconBtn icon=\"⌨\" title=\"terminal (t)\" onClick={toggleTerm} />\n {/* the panel toggle advertises its STATE, not just its action: `active` fills\n it when the panel is open, so the button answers \"is it showing?\" without a\n click. `aria-expanded` says the same thing to a screen reader. */}\n <IconBtn icon=\"▤\" title=\"toggle details panel (d)\" active={showRight()} onClick={toggleRight} />\n </span>\n </header>\n\n <div class=\"feed\" ref={(el) => attachFeedObserver(el)} onscroll={(e) => {\n const el = e.currentTarget;\n const now: TailSample = { top: el.scrollTop, height: el.scrollHeight, viewport: el.clientHeight };\n /**\n * WHO moved the viewport — the only question that may change the follow state.\n *\n * Asked by `classifyScroll()` (frontend/scroll-policy.ts), which answers it from two\n * facts that layout cannot fake:\n *\n * - the content HEIGHT changed since the last delivery ⇒ layout. The reader cannot\n * change `scrollHeight`, so this delivery carries no evidence about intent.\n * - the position equals `min(ledger, floor)` ⇒ our own write delivered late, or the\n * browser clamping after a shrink. Both look exactly like \"scrolled up\" to a\n * direction test, which is why the old `movedAway()` kept needing a slack\n * constant.\n *\n * `ledger` is cleared after ONE delivery: a programmatic write produces exactly one\n * scroll event, and keeping it longer would swallow the reader's next real move.\n */\n const cause = classifyScroll(now, ledger, lastSampleHeight, lastSampleViewport);\n /**\n * A `layout` cause MAY be a `content-visibility` unskip, which moves the viewport.\n *\n * Both engines do this now. It was Firefox-only while `.feed` kept native scroll\n * anchoring on: Blink special-cases `anchor_is_cv_auto_without_layout_` (see\n * `docs/firefox-scroll-defects.md`) and absorbed the shift for us. Disabling native\n * anchoring for the Firefox composer fix (`ca15d77`) removed that absorption, so\n * Chrome started showing the same drift — which is why this is no longer gated on\n * \"not the tail\".\n *\n * `!atBottom()` was here because a reader-scrolled viewport was assumed to be the\n * only one that could shift. While FOLLOWING, a row above unskipping moves the\n * floor too, and the visible result is the timeline jittering under a pinned tail.\n * Both cases need the same correction, so the condition is now purely \"did layout\n * move us\", with the anchor telling us where to put it back.\n *\n * Still gated on a `layout` cause, and the reason is measured: an earlier version\n * ran on any large height delta and caught the reader's OWN wheel step —\n * `firstVisibleRow()` forces rows to lay out, so the delivery arrives with a\n * changed height and was mistaken for an unskip, undoing the wheel. A delivery the\n * reader did NOT cause is the only safe trigger.\n */\n if (\n cause === \"layout\" &&\n /**\n * NEVER while following — a pinned tail has no anchor worth restoring.\n *\n * This ran on any layout delivery, including while pinned, and the anchor it aimed\n * at was captured BEFORE new content was inserted above (a reasoning block appearing\n * at the start of an assistant turn is the usual case). Restoring to that row scrolls\n * the viewport back by the height of the new content — reported as \"プロンプトを送って\n * からreasoningが出たくらいのタイミングでスクロールが何百pxか古い方に飛んだ\".\n *\n * It also ran BEFORE the pin further down, so by the time `shouldPin` looked at the\n * distance to the tail the resync had created one, and the pin was skipped. While\n * following the only correct position is the tail, and `restoreAfterBoxChange`\n * already re-pins on the box change.\n */\n !atBottom() &&\n resyncBudget > 0 &&\n Math.abs(now.height - (lastSampleHeight ?? now.height)) > 1\n ) {\n resyncBudget--;\n resyncAfterUnskip(el, unskipAnchor);\n }\n /**\n * The ledger is consumed AFTER use, but a write whose delivery never arrived would\n * otherwise authorise the reader's NEXT move too. Any intervening layout (`layout`\n * cause) invalidates it, because the position it recorded no longer means anything.\n */\n ledger = null;\n lastSampleHeight = now.height;\n lastSampleViewport = now.viewport;\n lastSample = now;\n // the pill reads this instead of measuring the DOM itself\n publishGap(now);\n const wasFollowing = atBottom();\n /**\n * Keep the unskip anchor current — WHETHER OR NOT we are following.\n *\n * It used to be captured only for a parked reader, and cleared while following,\n * because the tail was assumed to be the only position that mattered there. Once\n * native scroll anchoring was disabled (`ca15d77`) that stopped being true: a row\n * above unskipping moves the floor under a pinned tail too, and with no anchor\n * recorded there is nothing to restore against — the correction had nothing to aim\n * at and the timeline jittered.\n *\n * Throttled: finding the row costs a binary search over row boxes, and a drag fires\n * scroll continuously. 100ms is well under the time it takes to read one row.\n */\n const t = performance.now();\n if (t - unskipAnchorAt > 100) {\n unskipAnchorAt = t;\n unskipAnchor = firstVisibleRow(el);\n }\n const follow = nextFollowing(wasFollowing, cause, now);\n if (follow !== wasFollowing) setAtBottom(follow);\n // a delivery the READER caused means they are driving: refill the unskip budget\n if (cause === \"reader\") resyncBudget = RESYNC_BUDGET_PER_GESTURE;\n /**\n * NEVER re-pin a delivery the READER caused.\n *\n * `shouldPin()` allows pinning while within `STICKY_PX` of the tail, which is right\n * for layout-driven deliveries — a streaming bubble that overshoots for one frame\n * must not drop follow. Applied to a reader's own scroll it is a trap: they wheel up\n * 40px, the delivery is classified `reader`, `nextFollowing` keeps follow because\n * they are still inside the sticky range, and this line immediately drags them back\n * to the tail. Reported as \"スクロール追従時にユーザーからのスクロールが無効化される\".\n *\n * A reader who moved away from the tail has expressed intent, whether or not they\n * are still inside the sticky band. Sticky exists to survive LAYOUT, not to\n * overrule a person.\n */\n if (follow && cause !== \"reader\") {\n if (missed()) setMissed(0);\n // reaching the tail marks this session read — the scroll itself, not a\n // new event arriving while we happen to be here\n markReadIfFollowing();\n // a delivery we caused can land a few pixels short of the floor (fractional\n // heights, content still being laid out). While following, keep it exact.\n if (shouldPin(follow, now) && distanceToTail(now) > 0) pinToTail();\n } else if (follow && atTail(now)) {\n // the reader arrived AT the tail: nothing to correct, but the read marker and the\n // missed counter still apply\n if (missed()) setMissed(0);\n markReadIfFollowing();\n }\n // reached the top → pull the next older page (infinite scroll up). Runs BEFORE\n // any follow logic: a reader at the very top is by definition not at the bottom,\n // and returning early here silently swallowed every loadOlder trigger.\n if (now.top <= 4 && selected() && !loadingOlder() && !olderDone() && events().length > 0) {\n void loadOlder();\n }\n }}>\n <Show when={compacting()}>\n {(c) => (\n <div class=\"divider-msg compacting\" title=\"the harness is compressing old turns into notes so work can continue within the context window\">\n 🗜 {c().phase === \"harvesting\" ? \"saving durable lessons…\" : `summarizing ${c().summarized ? fmtK(c().summarized!) + \" \" : \"\"}older messages…`}\n </div>\n )}\n </Show>\n <Show when={olderDone() && chatEvents().length > 0}>\n <div class=\"divider-msg\">── beginning of log ──</div>\n </Show>\n <Show when={loadingOlder()}>\n <div class=\"divider-msg\">loading older events…</div>\n </Show>\n <Show when={chatEvents().length > 0} fallback={\n /**\n * While the FIRST page is in flight, say so.\n *\n * This fallback used to appear immediately, so switching into a slow or still-running\n * session showed \"no events yet\" for the length of the fetch — indistinguishable from\n * a session that had lost its history. Reported as \"タイムラインロード中にアイテムが\n * 無いって表示されてるの微妙なので、loadingの状態がちゃんと分かるように\".\n */\n loadingFeed()\n ? <div style=\"display:grid;place-items:center;height:100%\" class=\"muted\">\n <span><span class=\"spinner\" aria-hidden=\"true\" /> loading timeline…</span>\n </div>\n : <div style=\"display:grid;place-items:center;height:100%\" class=\"muted\">no events yet — say something or press ▶ start</div>\n }>\n {/* `<For>` iterates the ROWS THEMSELVES, not a wrapper object.\n The wrapper existed to avoid `chatEvents()[i() - 1]` (which made every\n row a subscriber of the whole memo — #178), but keying `<For>` on a\n WRAPPER reintroduces the remount problem: a row whose neighbour changed\n gets a new wrapper, so `<For>` disposes the row and its DOM state with it\n (an expanded <details> slams shut). Neighbours are therefore passed as\n ACCESSORS derived from the row's own position — the row object stays the\n <For> item forever, while `grouped` still re-evaluates when the neighbour\n changes. */}\n <For each={chatEvents()}>\n {(row) => (\n <MessageRow\n e={row}\n prev={() => neighbourOf(row, -1)}\n next={() => neighbourOf(row, 1)}\n // only worth labelling when the session HAS more than one\n // branch (a fork). With a single branch every row repeated the\n // same constant.\n showBranch={branches().length > 1}\n res={() => pairInfo().resFor.get(row.id)}\n // an unpaired tool_result is rendered as a COMPLETED\n // tool row of its own — its call fell out of the events\n // window while the command ran. Without this the result was\n // a bare anonymous row and the run read as unfinished.\n orphan={pairInfo().orphanCalls.has(row.id)}\n onOption={(t) => void sendText(t)}\n // pass the ACCESSOR, not the Set. A <For> child is a\n // non-reactive closure, so `answeredQuestionIds()` was\n // evaluated once when the row was built and never re-read.\n // The old derivation only ever changed when `events()`\n // changed, which re-created the rows and hid the bug; an\n // optimistic answer changes nothing about `events()`, so\n // the row kept a snapshot from before the click.\n answeredIds={answeredQuestionIds}\n onAnswered={markAnswered}\n // a row showing MIRRORED SUB-AGENT activity is the\n // child's work, not this agent's, so it must not wear the\n // parent's live chrome (\"writing…\", the running blink)\n // just because the parent happens to be running.\n agentActive={\n // the DISPLAYED session must be the live one, not\n // merely the same agent\n isTimelineLive() && isOwnLiveWork(row)\n }\n // A row that EXPANDS when its result arrives (a `<details>` opening,\n // a tool body growing) is one of the growth paths — decided by the\n // policy, from geometry sampled at the moment the row resized.\n onResize={() => {\n // A row that EXPANDS (a `<details>` opening, a tool body growing) moves\n // the content under the reader. While following, re-pin; otherwise leave\n // them alone. Testing `atTail(after)` HERE was wrong: the row has\n // already grown by the time this fires, so a follower is already \"not\n // at the tail\" and the re-pin never ran — the feed drifted by the growth.\n if (atBottom()) pinToTail();\n }}\n onCancel={\n // only an OPERATOR prompt can be withdrawn. A harness\n // prompt has no composer draft to return to — cancelling it\n // would discard a system message the operator never wrote.\n row.data?.source === \"user\" &&\n row.data?.pending && row.data?.promptId && row.data?.sent !== true\n ? () => {\n const pid = String(row.data.promptId);\n api(`/api/agents/${selected()}/prompt/cancel`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ promptId: pid }),\n })\n .then((r: any) => {\n // put the text back WITHOUT clobbering what\n // the user has typed since sending it\n const back = String(r.text ?? \"\");\n saveDraft(draft() ? `${back}\\n\\n${draft()}` : back);\n writePending(pendingKey(), pendingMsgs().filter((p) => p.promptId !== pid));\n flashHint(\"message withdrawn — draft restored\");\n })\n .catch(() => flashHint(\"withdraw failed — it may have already been sent\"));\n }\n : undefined\n }\n onEdit={\n // settled user prompts only: a pending message has not reached the model\n row.type === \"prompt\" &&\n row.data?.source === \"user\" &&\n !(row.data?.pending && row.data?.sent !== true) &&\n !row.data?.cancelled\n ? async () => {\n // The server refuses to edit history under a running loop, because an\n // unconsumed prompt is what the loop resumes into. Hiding the button\n // instead made it disappear for anyone whose agent is usually running,\n // so the click performs the two steps the operator already understands.\n if (isSelLive()) {\n await api(`/api/agents/${selected()}/stop`, { method: \"POST\" }).catch(() => {});\n await refreshAgents();\n }\n setEditing({ eventId: row.id, text: String(row.data?.text ?? \"\") });\n }\n : undefined\n }\n />\n )}\n </For>\n {/**\n * A TAIL indicator while a refresh is in flight.\n *\n * Switching to a session that was already loaded paints its cached rows immediately,\n * then re-fetches — and that second step had NO visible sign, because the full-screen\n * spinner is gated on an EMPTY feed. The operator saw a complete-looking (but stale)\n * timeline that did not update for a while, reported as \"最新アイテムをロードしている\n * 間に loading timeline... が出てなくてUXも悪い\".\n *\n * At the BOTTOM of the feed rather than as a full-screen overlay: the rows on screen\n * are still valid, so covering them would throw away the reason they are cached. The\n * browser keeps the tail pinned because this row is part of the feed — the same\n * mechanism that follows new messages.\n */}\n {/**\n * `loadingFeed()` is the ONLY condition.\n *\n * Requiring rows as well made this dead: a switch clears the feed and hydrates from\n * cache within the same task, so there is no frame where both \"loading\" and \"has\n * rows\" hold — MEASURED as `feedloading` never appearing at all. The full-screen\n * spinner above already covers the empty case; this row is for the case where the\n * fetch is in flight, whatever is on screen.\n */}\n <Show when={loadingFeed()}>\n <div class=\"feedloading\">\n <span class=\"spinner\" aria-hidden=\"true\" /> loading newer events…\n </div>\n </Show>\n {/* #146: `live()` is keyed by AGENT, so a buffer saved while another\n session of the same agent was on screen would still render here.\n Show the bubble only for the session actually being displayed. */}\n <Show when={isTimelineLive() && live()}>\n <div class=\"msg live\">\n <div class=\"avatar\" style=\"background:#5865f233;border:1px solid #5865f266\">🫖</div>\n <div class=\"msg-body\">\n <div class=\"msg-head\">\n <span class=\"author\" style=\"color:var(--acc)\">agent</span>\n <span class=\"ts\">streaming…</span>\n </div>\n {/* `.trim()` guard: a provider streams reasoning as DELTAS, and a\n chunk can be pure whitespace (\"\\n\\n\"). `Show when={str}` is\n truthy for that, so an empty 💭 block rendered for a frame —\n the reported \"agent が一瞬空のreasoning を表示する\". The\n reasoning is not empty, it just has nothing in it yet. */}\n <Show when={liveReasoning().trim() !== \"\"}>\n <details class=\"reasoning\" open>\n <summary>\n 💭 thinking <ThinkingTimer startedAt={liveStartedAt()} />\n </summary>\n {/* ref + scroll-follow: the thinking block grows from the\n bottom; keep its tail visible while it streams. The\n effect only scrolls THIS div — never the feed itself —\n so the two follow loops can't fight each other. */}\n <div\n class=\"mono thinkscroll\"\n ref={(el) => {\n // follow the thinking tail ONLY while the reader\n // is at the block's own bottom — scrolling up\n // inside it must pause follow (and returning to\n // the tail resumes), independent of feed position\n let stick = true;\n el.addEventListener(\"scroll\", () => {\n stick = el.scrollHeight - el.scrollTop - el.clientHeight < 24;\n });\n createEffect(() => {\n liveReasoning(); // re-run on every throttled tick\n if (stick) el.scrollTop = el.scrollHeight;\n });\n }}\n >\n {liveReasoning()}\n </div>\n </details>\n </Show>\n <Show\n when={liveText()}\n fallback={<div class=\"content muted\">thinking…</div>}\n >\n <Show when={liveIsCompact()} fallback={<div class=\"content\" innerHTML={renderMarkdown(liveText() + \"▍\")} />}>\n <div class=\"muted\" style=\"font-size:11.5px;margin-bottom:4px\">🗜 summarizing older context…</div>\n <div class=\"content\" innerHTML={renderMarkdown(liveBody() + \"▍\")} />\n </Show>\n </Show>\n </div>\n </div>\n </Show>\n </Show>\n </div>\n\n <Show when={termOpen()}>\n <div class=\"termdrawer\" style={{ height: `${termHeight()}px` } as any}>\n <div class=\"termgrip\" onpointerdown={startGrip} ondblclick={() => { setTermHeight(Math.max(220, Math.round(window.innerHeight * 0.35))); localStorage.setItem(\"teapot.termH\", String(termHeight())); }} title=\"drag to resize · double-click to reset\" />\n <div class=\"termbar\">\n <div class=\"termtabs\">\n <For each={termTabs()}>\n {(t, i) => (\n <span\n class={\"termtab\" + (focusedPane() === 0 && paneL() === i() ? \" active\" : \"\") + (splitView() && focusedPane() === 1 && paneR() === i() ? \" active\" : \"\")}\n onclick={() => focusTab(i())}\n title={`${t.title} — click to show in focused pane`}\n >\n ⌨ {t.title}\n <button class=\"tabx\" onclick={(e) => { e.stopPropagation(); closeTab(i()); }} title=\"close this shell\">✕</button>\n </span>\n )}\n </For>\n <IconBtn icon=\"+\" title=\"new shell in this workspace\" onClick={addFromSelected} />\n </div>\n <div style=\"display:flex;gap:4px;align-items:center\">\n <span class=\"muted mono\" style=\"flex:1;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap\">\n {activeTab() ? agents().find((a) => a.id === activeTab()!.agentId)?.workspace.split(\"/\").filter(Boolean).pop() : sel()?.workspace}\n </span>\n <IconBtn icon=\"◫\" title={splitView() ? \"single pane\" : \"split panes (50/50)\"} onClick={toggleSplit} />\n <IconBtn icon=\"▾\" title=\"hide the terminal (shells keep running; reopen with t) — close individual shells with their ✕ tab buttons\" onClick={toggleTerm} />\n </div>\n </div>\n <div class=\"termbody\" classList={{ split: splitView() }}>\n <div class=\"termpane\" classList={{ focused: focusedPane() === 0 }} onpointerdown={() => setFocusedPane(0)} ref={setPaneHost(0)}>\n <Show when={paneL() < 0 || paneL() >= termTabs().length}>\n <div class=\"termempty muted\">no shell here — + opens one, tabs fill the focused pane</div>\n </Show>\n </div>\n <Show when={splitView()}>\n <div class=\"termsplit\" />\n <div class=\"termpane\" classList={{ focused: focusedPane() === 1 }} onpointerdown={() => setFocusedPane(1)} ref={setPaneHost(1)}>\n <Show when={paneR() < 0 || paneR() >= termTabs().length}>\n <div class=\"termempty muted\">no shell here — click a tab or + to add</div>\n </Show>\n </div>\n </Show>\n </div>\n </div>\n </Show>\n\n <div class={\"composer\" + (composerMaximized() ? \" maximized\" : \"\")}>\n <Show when={gapToTailPx() > 32 && !atBottom()}>\n <button\n class=\"jump\"\n onclick={() => {\n scrollBottom(true);\n // pressing \"jump to present\" IS reading the tail — the\n // operator asked to be taken to the newest content, so the\n // badge must settle exactly as it does for a manual scroll\n markReadIfFollowing();\n }}\n >\n ↓ {missed() > 0 ? `${missed()} new message${missed() > 1 ? \"s\" : \"\"}` : \"jump to present\"}\n </button>\n </Show>\n <Show when={suggestions().length > 0}>\n <div class=\"cmds\">\n <For each={suggestions()}>\n {(s, i) => (\n <div\n class={\"cmdrow\" + (i() === cmdIdx() ? \" active\" : \"\")}\n title={s.title}\n onclick={() => { saveDraft(s.insert); setCmdIdx(-1); }}\n >\n <b class=\"mono\">{s.insert.trim()}</b>\n <span class=\"muted\">{s.title}</span>\n </div>\n )}\n </For>\n </div>\n </Show>\n <Show when={mentionMatches().length > 0}>\n <div class=\"cmds\">\n <For each={mentionMatches()}>\n {(m) => (\n <div class=\"cmdrow\" title={m.label} onclick={() => { saveDraft(`@${m.key} `); setCmdIdx(-1); }}>\n <b>@{m.key}</b>\n <span class=\"muted\">{m.label}</span>\n </div>\n )}\n </For>\n </div>\n </Show>\n <form onsubmit={send}>\n {/* staged image chips — clicking ✕ unstages before send */}\n <Show when={pendingImages().length > 0}>\n <div class=\"imgstage\">\n <For each={pendingImages()}>\n {(im, i) => (\n <span class=\"imgchip\" title={im.name}>\n <img src={im.url} alt={im.name} />\n <button\n type=\"button\"\n class=\"imgx\"\n title=\"remove\"\n onclick={() => setPendingImages((l) => l.filter((_, j) => j !== i()))}\n >✕</button>\n </span>\n )}\n </For>\n <span class=\"muted\" style=\"font-size:11px;align-self:center\">\n {pendingImages().length} image{pendingImages().length > 1 ? \"s\" : \"\"} attached\n </span>\n </div>\n </Show>\n <textarea\n // NOT `value={draft()}`: Solid writes the node's `value` on every\n // change of the signal, and a write during an IME composition ends\n // the composition and discards the kana typed so far — the\n // \"入力中にメッセージが消える\" report. Measured: two DOM writes per\n // input event, both mid-composition. The value is synced by the\n // effect below instead, which stands down while composing.\n ref={(el) => {\n composerEl = el;\n el.value = draft();\n }}\n rows={1}\n placeholder={`message #${sel()!.id} — / for commands · paste or 📎 to attach images`}\n oncompositionstart={() => {\n imeInProgress = true;\n }}\n oncompositionend={() => {\n // Safari fires compositionend BEFORE the final keydown for\n // Enter, so defer the reset one frame to let that keydown\n // observe the flag (see imeInProgress).\n requestAnimationFrame(() => {\n imeInProgress = false;\n });\n // the composition's RESULT must reach the signal, or the next\n // sync would overwrite the converted text with the pre-edit\n // draft\n saveDraft(composerEl?.value ?? \"\");\n }}\n onpaste={(e) => {\n // screenshots land on the clipboard as files — stage them\n const imgs = Array.from(e.clipboardData?.files ?? []).filter((f) => f.type.startsWith(\"image/\"));\n if (imgs.length) {\n e.preventDefault();\n addImages(imgs);\n }\n }}\n oninput={(e) => {\n saveDraft(e.currentTarget.value);\n setCmdIdx(0); // highlight first suggestion while popup is open\n autosizeComposer();\n }}\n onkeydown={(e) => {\n // unified suggestion navigation — the input keeps focus, the\n // highlighted row just moves (↑↓), Tab/Enter accepts\n const sugg = suggestions();\n if (sugg.length > 0 && e.key === \"ArrowDown\") {\n e.preventDefault();\n setCmdIdx((i) => Math.min(i + 1, sugg.length - 1));\n return;\n }\n if (sugg.length > 0 && e.key === \"ArrowUp\") {\n e.preventDefault();\n setCmdIdx((i) => Math.max(i - 1, 0));\n return;\n }\n if (sugg.length > 0 && (e.key === \"Tab\" || e.key === \"Enter\") && !e.shiftKey && cmdIdx() >= 0 && !imeInProgress) {\n e.preventDefault();\n saveDraft(sugg[cmdIdx()]!.insert);\n setCmdIdx(-1);\n return;\n }\n if (e.key === \"Escape\" && sugg.length > 0) {\n setCmdIdx(-1); // close popup only\n return;\n }\n // IME composition: Enter confirms the conversion, never sends.\n // Test our own flag, not e.isComposing — Safari has already\n // ended composition by the time this keydown arrives.\n // a MAXIMIZED composer takes Enter as a newline.\n //\n // Maximize exists for composing long text — a pasted stack trace,\n // a multi-paragraph question — and in that mode Enter has to mean\n // \"new line\" or the text cannot be written at all. Shift+Enter\n // inserts a newline in the normal composer, so the expanded one is\n // strictly more permissive, not inconsistent: what changed is only\n // that Enter no longer SHORTCUTS to a send.\n //\n // Sending is still one keystroke away (the send button), so nothing\n // becomes unreachable.\n if (\n shouldSendOnKey({\n key: e.key,\n shiftKey: e.shiftKey,\n composing: imeInProgress,\n maximized: composerMaximized(),\n })\n ) {\n e.preventDefault();\n void send(e);\n }\n }}\n />\n <Show when={draft().startsWith(\"@\") && draft().includes(\" \")}>\n <label\n class=\"forkchip\"\n title=\"inherit the conversation prefix byte-exactly — the sub-agent's provider prefix cache starts warm\"\n >\n <input type=\"checkbox\" checked={mentionFork()} onchange={(e) => setMentionFork(e.currentTarget.checked)} />\n fork ctx\n </label>\n </Show>\n <button\n type=\"button\"\n class=\"iconbtn maxbtn\"\n title={composerMaximized() ? \"restore composer (hide timeline)\" : \"maximize composer — hide the timeline and fill the main column\"}\n onclick={() => {\n const next = !composerMaximized();\n setComposerMaximized(next);\n // re-run autosize under the new regime, then keep the feed\n // pinned / restored correctly across the relayout\n requestAnimationFrame(() => autosizeComposer());\n }}\n >{composerMaximized() ? \"⤡\" : \"⤢\"}</button>\n <IconBtn\n icon=\"📎\"\n title=\"attach images (or paste them straight into the box)\"\n onClick={() => document.getElementById(\"composer-file\")?.click()}\n />\n <Show when={pendingImages().length}>\n <span class=\"muted\" style=\"font-size:11.5px;white-space:nowrap\">🖼 {pendingImages().length}</span>\n </Show>\n <button type=\"submit\">send</button>\n {/* hidden input lives here so the 📎 button can trigger it */}\n <input\n id=\"composer-file\"\n type=\"file\"\n accept=\"image/*\"\n multiple\n style=\"display:none\"\n onchange={(e) => {\n if (e.currentTarget.files?.length) addImages(e.currentTarget.files);\n e.currentTarget.value = \"\"; // allow re-selecting the same file\n }}\n />\n </form>\n {/**\n * The hint line is for FLASH messages only.\n *\n * It used to hold a permanent keyboard cheat-sheet under the composer, which the\n * operator reads once and then has to look past forever. The same text now lives in\n * ⚙️ settings → ❔️ help, where it is found when it is needed; a keyboard reference is\n * something you consult, not something you stare at while typing.\n */}\n {/**\n * The hint is an OVERLAY, not a sibling.\n *\n * When it was a normal child of the composer block, showing it pushed the whole\n * column up by its height and hiding it dropped it back — so every flash message\n * (a background job finishing, \"copied\", \"memory saved\") bounced the composer and\n * with it the timeline. Reported as \"時々届く通知によって入力欄が上下する\".\n *\n * Absolutely positioned below the box, so it is readable when it appears and costs\n * zero layout at any other moment.\n */}\n <Show when={flash()}>\n <div class=\"hint flashhint\">{flash()}</div>\n </Show>\n </div>\n </Show>\n </section>\n\n {/* ---------- right bar ---------- */}\n {/* Drawer-only close row. In wide mode .rightbar is a grid column\n that sits next to the content, and the ▤ button in the channel header\n is right there — so this row stays `display:none` (see app.css) and\n costs a wide-screen user nothing. Narrow, the panel is a fixed drawer\n covering up to 92vw of the screen; it covers the ▤ button that opened\n it, leaving NO visible way back out. This is that way out. */}\n {/* Click-outside dismiss for the drawer. Mirrors .notifbackdrop:\n an invisible full-screen layer UNDER the panel but OVER everything\n else, so a click anywhere on the content closes the drawer — the same\n gesture users already know from the notification popover.\n Rendered only in narrow mode: on a wide screen the panel is a static\n column and a full-screen click-catcher would swallow every click in\n the app. Gated on showRight() too, so a closed drawer — which is still\n in the DOM, translated off-screen — never blocks the UI. */}\n <Show when={narrow() && showRight()}>\n <div class=\"rightbarbackdrop\" onclick={() => setRight(false)} />\n </Show>\n <aside\n class={\"rightbar\" + (showRight() ? \" open\" : \"\")}\n ref={rightbarEl}\n onscroll={(e) => { rightbarTop = (e.currentTarget as HTMLDivElement).scrollTop; }}\n >\n {/* Close row — INSIDE the panel, and sticky so the panel's own\n overflow-y can never scroll it out of reach. On a wide screen\n .rightbar is a grid column sitting next to the content and the ▤\n button is right there, so this row stays display:none and a static\n column gets no new control. Narrow, the panel is a fixed drawer\n covering up to 92vw; it covers the ▤ button that opened it, leaving\n no visible way back out. This is that way out.\n\n Sticky rather than merely first-child: .rightbar is a long scroll\n container (session, runtime, files, tasks…), and a close button\n that scrolls away is the bug one scroll away from returning. The\n negative margin lets the row's background cover the panel's padding\n while the sticky top stays 0. */}\n <div class=\"rightbarhead\">\n <span class=\"muted\">details</span>\n <IconBtn icon=\"✕\" title=\"close details panel (esc)\" onClick={closeRight} />\n </div>\n {/* Gated on the agent ID, not the agent OBJECT. `when={sel()}`\n re-ran this whole subtree whenever an agent-update snapshot replaced\n the object — its compiled children getter builds a fresh array each\n time, so Solid rebuilt the panel and any focused control inside it\n (the tasks editor lost focus and caret). The id only changes when the\n operator actually switches agent, which is the only case where a\n rebuild is correct. Same trick FilesPanel uses below. */}\n <Show when={sel()?.id} keyed fallback={null}>\n {(_aid) => (\n <>\n {/* 🎛 session used to be a CARD here: agent / workspace / session+branch.\n Every one of those was already on screen — the header shows the agent, its\n status, the model and session/branch, and the file tree below is rooted at the\n workspace. Folding it would have hidden the duplication rather than removed it\n (#panel), so the card is gone and the workspace path moved onto the header\n title as a tooltip: the one fact it added, at zero cost in width. */}\n\n {/* keyed by agent id: Solid re-runs the JSX expression on every\n snapshot update, but <Show keyed> + primitive props keep the\n FilesPanel subtree from re-rendering unless the agent changes */}\n <Show when={sel()!.id} keyed fallback={null}>\n {(aid) => (\n <FilesPanel agentId={aid} workspace={sel()!.workspace} />\n )}\n </Show>\n\n <h3 title=\"switch provider/model live — applies from the agent's next turn\">\n 🧦 model\n <Show when={models().length}>\n <span class=\"muted\" style=\"text-transform:none;letter-spacing:0\">· {models().length} models</span>\n </Show>\n </h3>\n <div class=\"modelbox\">\n <select\n value={modelProvider()}\n onchange={(e) => {\n // switching provider must SELECT that provider's default\n // model. The draft used to keep the previous provider's value,\n // so apply carried a foreign model id to the new endpoint.\n const next = e.currentTarget.value;\n providerTouched = true;\n setModelProvider(next);\n setModelDraft(\n modelOnProviderSwitch(\n cfg().providers,\n next,\n agents().find((a) => a.id === selected()),\n ),\n );\n loadModels(next);\n }}\n title=\"provider (OpenAI-compatible endpoint)\"\n >\n <For each={providerList()}>{(p) => <option value={p}>{p}{p === cfg().defaultProvider ? \" ★\" : \"\"}</option>}</For>\n </select>\n <div style=\"display:flex;gap:4px\">\n <input\n type=\"text\"\n list=\"model-list\"\n placeholder={modelPlaceholderFor(cfg().providers, modelProvider(), sel(), effectiveProviderOf(sel(), cfg().providers, cfg().defaultProvider))}\n value={modelDraft()}\n oninput={(e) => setModelDraft(e.currentTarget.value)}\n style=\"flex:1;min-width:0\"\n />\n <datalist id=\"model-list\">\n <For each={models()}>{(m) => <option value={m.id} />}</For>\n </datalist>\n </div>\n {/* #47: reasoning effort. Shown ONLY when the endpoint's catalogue\n says this model advertises `reasoning_effort` — support is 196/462\n on OpenRouter and absent elsewhere, so offering it everywhere\n would be a control that silently does nothing. */}\n <Show when={sel()!.effortSupported}>\n <div style=\"display:flex;gap:6px;align-items:center;margin-top:6px\">\n <label class=\"muted\" style=\"font-size:11.5px;white-space:nowrap\">effort</label>\n <select\n style=\"flex:1;min-width:0\"\n value={effortDraft()}\n onchange={(e) => setEffortDraft(e.currentTarget.value)}\n >\n <option value=\"\">provider default</option>\n {/* Offer the levels THIS model accepts when the endpoint publishes\n them: a model advertising [\"max\",\"high\",\"low\"] must not be\n shown minimal/medium, which would be refused or silently clamped.\n Falls back to the four we offer when the endpoint says nothing. */}\n <For each={sel()!.effortOptions?.length ? sel()!.effortOptions : REASONING_EFFORT_OPTIONS}>\n {(v) => <option value={v}>{v}</option>}\n </For>\n </select>\n </div>\n </Show>\n {/* ONE apply for the whole 🧦 model box (#3 follow-up).\n There used to be a button beside the model input AND one beside\n the effort select, both posting to the same endpoint. Two buttons\n for one form is ambiguous about what each one sends — the operator\n could not tell whether pressing \"apply\" next to the effort had\n also carried their model edit, and it had not. So there is one\n button, it sits here under both fields, and it sends both. */}\n <div style=\"display:flex;gap:6px;align-items:center;margin-top:6px\">\n <button\n title=\"apply the provider, model and effort above to this session — takes effect from the agent's next turn\"\n style=\"flex:1\"\n onclick={async (e) => {\n if (!selected()) return;\n const btn = e.currentTarget as HTMLButtonElement;\n btn.disabled = true;\n try {\n await api(`/api/agents/${selected()}/model`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n provider: modelProvider(),\n model: modelDraft().trim() || undefined,\n // pass the provider-reported window so the runtime\n // gauge + derived compaction budget work immediately\n contextWindowTokens:\n models().find((m) => m.id === (modelDraft().trim() || undefined))?.contextLength,\n // \"\" clears it back to the provider default. Sent only\n // when the endpoint offers the control at all: a model\n // with no effort support must not have one forced on it.\n ...(sel()!.effortSupported ? { reasoningEffort: effortDraft() } : {}),\n }),\n });\n btn.textContent = \"✓ applied\";\n refreshAgents();\n } catch (ex) {\n alert(`apply failed: ${(ex as Error).message}`);\n } finally {\n setTimeout(() => { btn.textContent = \"apply\"; btn.disabled = false; }, 1200);\n }\n }}\n >apply</button>\n </div>\n <div class=\"meta\">current: {sel()!.model}</div>\n <Show when={modelSpec()}>\n <div class=\"meta\" style=\"color:var(--fg)\">{modelSpec()}</div>\n </Show>\n </div>\n\n {/* ⏯ CONTROLS MOVED TO THE HEADER (#panel).\n start/stop, fork, stop-subs and archive used to live here, which meant the\n operator had to open the details panel to pause the agent they were reading.\n A control belongs next to the thing it controls, and the header already names\n the agent. What remains here is a SETTING rather than a control: auto-continue\n describes how the loop behaves, so it sits with the goal it loops for. */}\n <div class=\"ctrlrow\">\n <label\n title=\"auto-continue fires after a round ONLY when all hold: ① this toggle is on ② a goal is set and its status is 'active' ③ the round ended cleanly (no error / not stopped). It stops when the goal is marked done, or if you press ■ stop. Sending any prompt also starts an idle agent regardless.\"\n >\n <input\n type=\"checkbox\"\n checked={sel()!.autoContinue ?? true}\n onchange={(e) => {\n if (!selected()) return;\n api(`/api/agents/${selected()}/auto-continue`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ value: e.currentTarget.checked }),\n }).then(refreshAgents);\n }}\n />\n auto-continue\n </label>\n </div>\n\n <h3 title=\"what the agent is working toward. Stored with the session; the agent reads it via get_goal(). Auto-continue keeps looping while the status is 'active' and stops when marked done.\">🎯 goal\n <Show\n when={!!sel()!.goal.text.trim()}\n fallback={<span class=\"badge\" title=\"no goal set yet\">no goal</span>}\n >\n <span class={`badge ${sel()!.goal.status === \"active\" ? \"running\" : sel()!.goal.status}`}>{sel()!.goal.status}</span>\n </Show>\n </h3>\n <div class=\"statrow\" style=\"margin-bottom:6px\">\n <span class=\"k\">status</span>\n <For each={[\"active\", \"done\", \"paused\"] as const}>\n {(s) => (\n <button\n // an EMPTY goal must not light up \"▶ working\": fresh\n // sessions store status:\"active\" by default, which made a\n // brand-new timeline look like the agent was already on it\n class={\"goalstate\" + (!!sel()!.goal.text.trim() && sel()!.goal.status === s ? ` on ${s}` : \"\")}\n disabled={!!sel()!.goal.text.trim() && sel()!.goal.status === s}\n title={\n s === \"active\"\n ? \"agent keeps working toward the goal (with auto-continue)\"\n : s === \"done\"\n ? \"mark achieved — auto-continue stops\"\n : \"parked on purpose — resume by setting active again\"\n }\n onclick={() => {\n if (!selected()) return;\n api(`/api/agents/${selected()}/goal`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ status: s }),\n }).then(refreshAgents);\n }}\n >{s === \"active\" ? \"▶ working\" : s === \"done\" ? \"✓ done\" : \"⏸ paused\"}</button>\n )}\n </For>\n </div>\n <Show\n when={sel()!.goal.text}\n fallback={<div class=\"card muted\">no goal yet — write one below and press ✓ save. Then ▶ start (or any message) sets it in motion.</div>}\n >\n <div class=\"card goalcard\" ref={trackGoalPreviewHeight} style={goalPreviewStyle()}>\n <div class=\"content\" innerHTML={renderMarkdown(String(sel()!.goal.text))} />\n </div>\n <Show when={sel()!.goal.verify}>\n <Card\n title=\"🔍️ verification contract\"\n tone=\"tool\"\n body={String(sel()!.goal.verify)}\n />\n </Show>\n <Show when={sel()!.goal.audit}>\n {(a) => (\n <Card\n title={a().verdict === \"approved\" ? \"✅ audit: approved\" : \"⚠ audit: changes required\"}\n meta={relTime(a().at)}\n tone={a().verdict === \"approved\" ? \"ok\" : \"warn\"}\n body={\n isPlaceholderDetail(a().feedback)\n ? \"_the auditor returned a verdict with no detail_\"\n : a().feedback\n }\n />\n )}\n </Show>\n </Show>\n {/* the explanation is the heading's tooltip: it never changes, so printing it under\n the goal permanently costs a line in the panel every time the operator looks */}\n <form onsubmit={setGoal} style=\"display:flex;flex-direction:column;gap:6px;margin-top:8px;margin-bottom:6px\">\n <textarea\n id=\"goal-input\"\n ref={trackGoalHeight}\n rows={3}\n placeholder=\"set new goal…\"\n value={goalDraft()}\n oninput={(e) => { setGoalDraft(e.currentTarget.value); setGoalDirty(true); }}\n style={{\n ...(goalHeightStyle() ?? {}),\n background: \"var(--bg-darkest)\", border: \"none\", \"border-radius\": \"6px\",\n padding: \"6px 8px\", color: \"var(--fg)\", font: \"inherit\",\n width: \"100%\", resize: \"vertical\",\n }}\n title=\"drag the bottom edge to make this taller — the height is remembered\"\n />\n <textarea\n id=\"goal-verify-input\"\n rows={2}\n placeholder=\"verification contract (optional) — e.g. 'npm test passes; endpoint documented'. finish(goalComplete=true) is then audited against this.\"\n title=\"pi-goal-x-style verification contract — an independent reviewer checks the agent's finish against these requirements\"\n value={goalVerifyDraft()}\n oninput={(e) => { setGoalVerifyDraft(e.currentTarget.value); setGoalDirty(true); }}\n style=\"background:var(--bg-darkest);border:1px solid var(--bg-light);border-radius:6px;padding:6px 8px;color:var(--fg);font:inherit;font-size:12.5px;width:100%;resize:vertical\"\n />\n <div style=\"display:flex;justify-content:flex-end;align-items:center;gap:10px\">\n <label\n class=\"muted\"\n style=\"display:flex;align-items:center;gap:4px;font-size:11.5px;white-space:nowrap;cursor:pointer\"\n title=\"queue a harness prompt telling the agent about the new goal at its next turn boundary\"\n >\n <input id=\"goal-notify\" type=\"checkbox\" checked={goalNotify()} onchange={(e) => setGoalNotify(e.currentTarget.checked)} /> notify agent\n </label>\n <button type=\"submit\" class=\"primarybtn\">✓ save goal</button>\n </div>\n </form>\n\n <h3 title=\"todo.md — a shared checklist in the session dir. Write tasks like '- [ ] fix login'; the agent ticks them off via set_todo, you edit here. With notify on, it's told at its next turn boundary.\">\n ✅ tasks\n <Show when={todoStats().total > 0}>\n <span class=\"badge\" style={todoStats().done === todoStats().total ? \"color:var(--ok)\" : \"color:var(--warn)\"}>\n {todoStats().done}/{todoStats().total} done\n </span>\n </Show>\n </h3>\n <Show when={todoStats().total > 0}>\n <div class=\"bartrack\" style=\"margin-bottom:6px\">\n <div\n class={\"barfill \" + (todoStats().done === todoStats().total ? \"\" : \"warn\")}\n style={{ width: `${Math.round((todoStats().done / todoStats().total) * 100)}%` }}\n />\n </div>\n </Show>\n <TodoEditor\n draft={todoDraft()}\n preview={todoViewMode()}\n onDraft={(text: string) => {\n setTodoDraft(text);\n setTodoDirty(true);\n }}\n />\n <div style=\"display:flex;justify-content:flex-end;align-items:center;gap:10px;margin-top:4px\">\n <IconBtn\n icon={todoViewMode() ? \"✎\" : \"👁\"}\n title={todoViewMode() ? \"edit markdown\" : \"rendered checklist\"}\n onClick={() => setTodoViewMode(!todoViewMode())}\n />\n <label\n class=\"muted\"\n style=\"display:flex;align-items:center;gap:4px;font-size:11.5px;white-space:nowrap;cursor:pointer\"\n title=\"queue a harness prompt telling the agent the task list changed\"\n >\n <input id=\"todo-notify\" type=\"checkbox\" checked /> notify agent\n </label>\n <button\n onclick={saveTodo}\n class=\"okbtn\"\n >✓ save tasks</button>\n </div>\n\n <h3 title=\"latest report_progress snapshot. The harness asks for one after real activity (time AND output gates); errors show under ⚠ problems\">📈 progress</h3>\n <Show\n when={sel()!.latestProgress}\n fallback={<div class=\"muted\">none yet</div>}\n >\n {(p) => (\n <div class=\"card prog\">\n <div class=\"progrow\"><b>doing</b><span class=\"content inline-md\" innerHTML={renderMarkdownCached(p().doing)} /></div>\n <Show when={p().recent}><div class=\"progrow\"><b>recent</b><span class=\"content inline-md\" innerHTML={renderMarkdownCached(p().recent)} /></div></Show>\n <Show when={p().problems}><div class=\"progrow warn\"><b>⚠ problems</b><span class=\"content inline-md\" innerHTML={renderMarkdownCached(p().problems)} /></div></Show>\n <Show when={p().next}><div class=\"progrow\"><b>next</b><span class=\"content inline-md\" innerHTML={renderMarkdownCached(p().next)} /></div></Show>\n <Show when={p().goalStatus}><div class=\"progrow\"><b>goal</b><span>{p().goalStatus}</span></div></Show>\n <div class=\"meta muted\">{relTime(p().ts)}</div>\n </div>\n )}\n </Show>\n\n {/* 📊 runtime — ONE GAUGE, THEN A GRID.\n The previous two-layer version folded \"usage & cost\" into <details>. That was\n the wrong shape: folding is for things you rarely need, and these numbers are\n read constantly — a `<details>` is a click tax on every glance, and it hides\n the very thing (cost, turns, how often it compacted) that says whether the\n session is behaving.\n\n The rows were dense because they were ROWS: each number got a label column, a\n value, and its own line. As a 3-column grid the same facts occupy three lines\n instead of seven, so nothing has to be hidden to keep the panel readable. */}\n <h3 title=\"context is how much of the model's window the live conversation occupies. Past the threshold, the oldest turns are summarized into notes so work can continue.\">📊 runtime</h3>\n <div class=\"card runcard\">\n <Show\n when={sel()!.ctx}\n keyed\n fallback={\n <div class=\"statrow\">\n <span class=\"k\">context</span>\n <span class=\"muted\">no window known for this model yet</span>\n </div>\n }\n >\n {(c) => {\n // ALL derived values are memos: this callback used to run ONCE\n // (unkeyed <Show> builds its children a single time), freezing\n // pct/bar/labels at the first snapshot — the gauge then showed\n // \"0% of 1m\" forever while the token count itself kept updating\n // (that count is a JSX expression, so it stayed reactive).\n const ctxVals = createMemo(() => {\n const cv = c;\n const modelMeta = models().find((m) => m.id === sel()!.model);\n const effectiveWindow = cv.window || modelMeta?.contextLength || 0;\n // one decimal place — 0.4% vs 0% matters on million-token windows\n const pct = effectiveWindow\n ? Math.min(999, (cv.usedTokens / effectiveWindow) * 100)\n : 0;\n return {\n usedTokens: cv.usedTokens,\n compactAt: cv.compactAt,\n compacting: cv.compacting,\n window: cv.window,\n effectiveWindow,\n pct,\n cls:\n !effectiveWindow ? \"\" : pct >= 85 ? \"crit\" : pct >= 70 ? \"warn\" : \"ok\",\n derivedBudget: effectiveWindow ? Math.round(effectiveWindow * 0.75) : 0,\n usingDerived: cv.compactAtIsManual !== true,\n };\n });\n const v = () => ctxVals();\n const fmtPct = (x: number) => {\n const r = Math.round(x * 10) / 10;\n return Number.isInteger(r) ? String(r) : r.toFixed(1);\n };\n return (\n <div\n class=\"ctxblock\"\n title=\"estimated live context vs the model's real window. Past the window, old turns are summarized into notes (compaction); the compact line below shows where that starts.\"\n >\n <div class=\"statrow\">\n <span class=\"k\">context</span>\n <b>~{fmtK(v().usedTokens)} tok</b>\n <Show when={v().effectiveWindow}>\n <span class={`pill ${v().cls}`}>\n {fmtPct(v().pct)}% of {fmtK(v().effectiveWindow)}\n </span>\n </Show>\n </div>\n <Show when={v().effectiveWindow}>\n <div class=\"bartrack\">\n <div class={`barfill ${v().cls}`} style={{ width: `${Math.min(100, v().pct)}%` }} />\n </div>\n </Show>\n {/* ONE threshold, stated once. This used to appear three times —\n the `compact` row, a \"(75% of window)\" suffix, and a sentence\n below — plus a SECOND gauge measuring the same thing against\n `derivedBudget`. Two bars for one quantity is what made the\n panel read as dense while conveying less. */}\n <div class=\"statrow\" style=\"margin-top:4px\">\n <span class=\"k\">compact at</span>\n <b>{fmtK(v().usingDerived ? v().derivedBudget : v().compactAt)} tok</b>\n <span class=\"muted\" style=\"color:var(--dim)\">\n {v().usingDerived ? \"75% of window\" : \"manual\"}\n </span>\n </div>\n <Show when={compacting() || v().compacting}>\n <div class=\"statrow\" title=\"a compaction pass is running right now — the summarizer's output streams in the timeline\">\n <span class=\"k\">🗜</span>\n <b>compacting…</b>\n <span class=\"muted\" style=\"font-size:11px;color:var(--acc)\">\n {compacting()?.phase ?? String(v().compacting)}\n </span>\n </div>\n </Show>\n <div class=\"ctrlrow\" style=\"margin-top:6px\">\n <label title=\"when on, older turns are automatically summarized when context exceeds the budget\">\n <input\n type=\"checkbox\"\n checked={sel()!.autoCompact !== false}\n onchange={(e) => {\n if (!selected()) return;\n api(`/api/agents/${selected()}/auto-compact`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ value: e.currentTarget.checked }),\n }).then(refreshAgents);\n }}\n />\n auto-compact\n </label>\n </div>\n </div>\n );\n }}\n </Show>\n {/* the reference numbers: always visible, as a grid rather than as rows */}\n <div class=\"rtgrid\">\n {/**\n * ONE NUMBER PER CELL.\n *\n * These were composites — `202.8m/230k`, `7440/7682` — and a composite is\n * whatever its two halves add up to. A long session pushed both past the column\n * width and the value escaped the card (reported twice, for tokens AND turns).\n * No amount of ellipsis fixes that honestly: eliding \"202.8m/230k\" hides which\n * half was clipped.\n *\n * Split, each cell holds one short value that fits at any scale, and the label\n * says which half it is. The grid then needs no elision at all for real numbers.\n */}\n <div class=\"rtcell\" title=\"prompt tokens billed this session\">\n <span>tokens in</span>\n <b>{fmtK(sel()!.stats.inputTokens)}</b>\n </div>\n <div class=\"rtcell\" title=\"completion tokens billed this session\">\n <span>tokens out</span>\n <b>{fmtK(sel()!.stats.outputTokens)}</b>\n </div>\n <div class=\"rtcell\" title=\"assistant turns this session\">\n <span>turns</span>\n <b>{sel()!.stats.turns}</b>\n </div>\n <div class=\"rtcell\" title=\"tool calls this session\">\n <span>tools</span>\n <b>{sel()!.stats.toolCalls}</b>\n </div>\n <div\n class=\"rtcell\"\n title={`how many times old turns were summarized into notes to make room. ${sel()!.stats.compactions ? \"Each one keeps the recent stretch verbatim.\" : \"Not yet — the context has fit so far.\"}`}\n >\n <span>compacted</span>\n <b>{sel()!.stats.compactions ?? 0}</b>\n {/* no unit line: \"times\" restated the label, and \"never\" is already visible from the 0 */}\n </div>\n <Show when={(sel()!.stats.costUsd ?? 0) > 0}>\n <div\n class=\"rtcell\"\n title={`≈ ${(sel()!.stats.costUsd ?? 0).toFixed(4)} this session, from the model's USD/token pricing and per-turn usage. Cached input is estimated at ~10% of the prompt rate; treat as an approximation, not an invoice.`}\n >\n <span>cost</span>\n <b>${costFmt(sel()!.stats.costUsd ?? 0)}</b>\n {/* the label says cost; \"this session\" restated the panel's own scope */}\n </div>\n </Show>\n <Show when={(sel()!.stats.cachedInputTokens ?? 0) > 0}>\n <div\n class=\"rtcell\"\n title={`${fmtK(sel()!.stats.cachedInputTokens)} input tokens were served from the provider's prompt cache — billed far cheaper than fresh input`}\n >\n <span>cached</span>\n <b>{Math.round((sel()!.stats.cachedInputTokens / Math.max(1, sel()!.stats.inputTokens)) * 100)}%</b>\n {/* \"of input\" is implied by the `cached` label */}\n </div>\n </Show>\n </div>\n </div>\n\n {/* 🌿 branches stays OPEN: each row FILTERS the feed, so it is an active control,\n not reference data. Folding it was the \"hiding instead of shaping\" mistake — a\n filter you cannot see is a filter you forget exists. */}\n <h3>🌿 branches <span class=\"muted\" style=\"text-transform:none;letter-spacing:0\">· click to filter the feed</span>\n {/* Say what the filter actually does. A fork INHERITS everything\n before its fork point, and that history is now included, so the\n view matches the context the agent actually reasons over. Say\n so explicitly, because a strict branch filter used to hide the\n inherited rows and read as data loss. */}\n <Show when={branchFilter()}>\n <div class=\"muted\" style=\"font-size:11px;text-transform:none;letter-spacing:0\">\n showing <b>{branchFilter()}</b> and the history it inherited before forking\n </div>\n </Show>\n </h3>\n <For each={branches()}>\n {(b) => (\n <div\n class={\"branch-row\" + (b.branch === sel()!.branch || b.branch === branchFilter() ? \" cur\" : \"\")}\n title={b.branch === branchFilter() ? \"click to show all branches again\" : `show only ${b.branch}`}\n onclick={() => {\n const next = branchFilter() === b.branch ? null : b.branch;\n const changing = next !== branchFilter();\n setBranchFilter(next);\n if (!selected()) return;\n // A filter change is a new VIEW, exactly like a session switch:\n // bump the generation so an in-flight fetch for the previous\n // filter is discarded rather than landing in this one.\n if (changing) {\n feedGeneration++;\n // and drop the rows that no longer belong — loadEvents\n // union-merges with `prev`, so without this the previous\n // branch's rows stayed on screen after filtering, which is\n // the \"the branch filter doesn't work\" report.\n setEvents([]);\n setEventsTotal(0);\n setOlderDone(false);\n }\n loadEvents(selected()!);\n }}\n >\n <span>{b.branch}{b.branch === sel()!.branch ? \" (current)\" : \"\"}</span>\n <span>{b.events} events</span>\n </div>\n )}\n </For>\n\n {/* ⏰ schedule — OPEN, not folded.\n It was folded on the argument that it lists cron tasks for all agents and so is\n unrelated to the agent being viewed. That reasoning justified SHOWING it less\n prominently, not hiding it: an unread schedule is a schedule you forget is\n running, and the section is short (a few rows) so folding saved no real space. */}\n <h3 title=\"cron tasks, all agents — click a row to open that agent. Edit them in ⚙️ settings → scheduled tasks.\">\n ⏰ schedule\n <Show when={tasks().length > 0}>\n <span class=\"muted\" style=\"text-transform:none;letter-spacing:0\">· {tasks().length} · all agents</span>\n </Show>\n </h3>\n <Show\n when={tasks().length > 0}\n fallback={<div class=\"muted\">no scheduled tasks — add them in ⚙️ settings (\"scheduled tasks\")</div>}\n >\n <For each={tasks()}>\n {(t) => (\n <div\n class={\"sched-row\" + (t.agent === selected() ? \" cur\" : \"\")}\n title={`${oneLine(t.prompt, 200)}\\nclick to open #${t.agent}`}\n onclick={() => select(t.agent)}\n >\n <div class=\"sched-top\">\n <b>{t.id}</b>\n <span class=\"muted\">@{t.agent}</span>\n <Show when={t.forked}><span title=\"runs on a forked branch so chatter stays off the main line\">⑂</span></Show>\n </div>\n {/* NOT monospace: this line is mostly prose (\"→ next 5m · last\n 2h\"), and reading it in a fixed-width face was hard (#tasks).\n Only the raw `- [ ]` markdown editor keeps monospace. */}\n <div class=\"sched-meta\">\n {t.schedule} → next {t.next ? relTime(t.next) : \"—\"}{t.last ? ` · last ${relTime(t.last)}` : \" · never ran\"}\n </div>\n <div class=\"sched-prompt muted\">{oneLine(t.prompt, 90)}</div>\n </div>\n )}\n </For>\n </Show>\n </>\n )}\n </Show>\n </aside>\n </div>\n <Show when={showNotifs()}>\n {/* notification center — pops from the sidebar footer, bottom-left */}\n {/* click-outside closer: an invisible full-screen layer under the panel */}\n <div class=\"notifbackdrop\" onclick={() => setShowNotifs(false)} />\n <div class=\"notifpanel\">\n <div class=\"notifhead\">\n notifications\n <span style=\"display:flex;gap:8px;align-items:center\">\n <Show when={notifs().length > 0}>\n <button class=\"editbtn\" onclick={() => setNotifs([])}>clear all</button>\n </Show>\n <button class=\"iconbtn\" title=\"close notifications\" onclick={() => setShowNotifs(false)}>✕</button>\n </span>\n </div>\n <Show\n when={notifs().length > 0}\n fallback={<div class=\"muted\" style=\"padding:10px\">nothing yet — progress, finishes, questions and errors will land here</div>}\n >\n <div class=\"notiflist\">\n <For each={notifs()}>\n {(n) => (\n <div\n class={\"notifitem \" + n.kind + (n.read ? \" read\" : \"\")}\n title={`from ${n.agentId}`}\n onclick={() => {\n // mark THIS one read, jump to its agent and scroll the\n // timeline to the exact message that raised it\n setNotifs((list) => list.map((x) => (x.id === n.id ? { ...x, read: true } : x)));\n if (selected() !== n.agentId && agents().some((a) => a.id === n.agentId)) select(n.agentId);\n setShowNotifs(false);\n if (n.eventId)\n // wait for the timeline swap before scrolling\n setTimeout(() => jumpToEvent(n.eventId!), selected() !== n.agentId ? 350 : 60);\n }}\n >\n <div class=\"nhead\">\n <span class=\"nicon\">{n.kind === \"finish\" ? \"✅\" : n.kind === \"question\" ? \"❓️\" : n.kind === \"error\" ? \"⚠️\" : \"📈\"}</span>\n <span class=\"ntitle\">{n.title}</span>\n <span class=\"meta muted\">{relTime(new Date(n.at).toISOString())}</span>\n <button\n class=\"iconbtn nreadbtn\"\n title={n.read ? \"already read\" : \"mark as read\"}\n onclick={(e: MouseEvent) => {\n e.stopPropagation();\n setNotifs((list) => list.map((x) => (x.id === n.id ? { ...x, read: true } : x)));\n }}\n >{n.read ? \"✓\" : \"○\"}</button>\n </div>\n <Show when={n.body}>\n <div class=\"nbody\">{truncate(n.body, 160)}</div>\n </Show>\n </div>\n )}\n </For>\n </div>\n </Show>\n </div>\n </Show>\n <Show when={showNew()}>\n <NewAgentModal\n providers={Object.keys(cfg().providers ?? {})}\n onClose={() => setShowNew(false)}\n onCreated={(id) => { setShowNew(false); refreshAgents(); select(id); }}\n />\n </Show>\n <Show when={showCfg()}>\n <ConfigModal\n cfg={cfg()}\n onClose={() => setShowCfg(false)}\n announcedOAuth={announcedOAuth}\n skills={agentSkills()}\n hasSelection={!!selected()}\n agentId={selected()}\n features={features()}\n onSaved={() => {\n loadCfg();\n loadTasks();\n }}\n // theme state lives in App (it paints `<html>`), so the appearance panel edits it\n // through these rather than keeping a second copy that would drift\n theme={{\n themes: customThemes,\n activeId: fixedTheme,\n paintedId: paintedThemeId,\n auto: themeAuto,\n setAuto: (v: boolean) => {\n setThemeAuto(v);\n localStorage.setItem(\"teapot.theme.auto\", v ? \"1\" : \"0\");\n },\n dark: sysDarkTheme,\n /**\n * PREVIEW setters: they change what is painted and write NOTHING.\n *\n * The settings dialog previews an appearance before committing it, so a preview must not\n * be a commit. Storage belongs to `commitAppearance` alone, which the save button calls.\n *\n * These used to be the bare Solid setters with every caller expected to persist, and\n * `pickThemeCard` did not — MEASURED: clicking a light card while \"follow the system\" was\n * on left the painted theme `dark` and never wrote `teapot.theme.light`.\n */\n setDark: setSysDarkTheme,\n light: sysLightTheme,\n setLight: setSysLightTheme,\n setThemes: setCustomThemes,\n setActive: setFixedTheme,\n /** paint this id regardless of the slot the OS selects — the settings preview */\n preview: (id: string | null) => setPreviewTheme(id),\n /**\n * Commit the appearance to storage — the SAVE path.\n *\n * Split from the setters above so a preview cannot decide anything. Everything the\n * operator can see is already live by this point; this only makes it survive a reload.\n */\n commitAppearance: (v: { auto: boolean; dark: string; light: string; fixed: string }) => {\n localStorage.setItem(\"teapot.theme.auto\", v.auto ? \"1\" : \"0\");\n localStorage.setItem(\"teapot.theme.dark\", v.dark);\n localStorage.setItem(\"teapot.theme.light\", v.light);\n localStorage.setItem(\"teapot.theme\", v.fixed);\n },\n }}\n />\n </Show>\n <Show when={editing()} fallback={null}>\n {(ed) => {\n const idx = () => events().findIndex((e) => e.id === ed().eventId);\n const afterCount = () => Math.max(0, events().length - idx() - 1);\n const [tail, setTail] = createSignal<\"summarize\" | \"discard\">(afterCount() > 0 ? \"summarize\" : \"discard\");\n return (\n <Modal title=\"edit prompt — forks the conversation\" onClose={() => setEditing(null)}>\n <form\n onsubmit={async (ev) => {\n ev.preventDefault();\n const ta = document.getElementById(\"edit-text\") as HTMLTextAreaElement;\n try {\n await api(`/api/agents/${selected()}/edit-prompt`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ eventId: ed().eventId, text: ta.value, tail: tail() }),\n });\n setEditing(null);\n refreshAgents();\n const id = selected();\n if (id) await select(id);\n } catch (ex) {\n alert(`edit failed: ${(ex as Error).message}`);\n }\n }}\n style=\"display:flex;flex-direction:column;gap:10px\"\n >\n <textarea id=\"edit-text\" class=\"mono w100\" rows={6} value={ed().text} />\n <Show when={afterCount() > 0}>\n <div>\n <div style=\"font-size:12.5px;margin-bottom:4px\">\n {afterCount()} event(s) came after this prompt — what should happen to them on the new branch?\n </div>\n <label style=\"display:flex;gap:6px;align-items:center;font-size:13px;color:var(--fg)\">\n <input type=\"radio\" name=\"tail\" checked={tail() === \"summarize\"} onchange={() => setTail(\"summarize\")} />\n summarize them into a note the agent can still read\n </label>\n <label style=\"display:flex;gap:6px;align-items:center;font-size:13px;color:var(--fg)\">\n <input type=\"radio\" name=\"tail\" checked={tail() === \"discard\"} onchange={() => setTail(\"discard\")} />\n discard them entirely (clean timeline)\n </label>\n </div>\n </Show>\n <div style=\"display:flex;justify-content:flex-end;gap:8px\">\n <button type=\"button\" onclick={() => setEditing(null)}>cancel</button>\n <button type=\"submit\" class=\"primarybtn\">\n ⑂ fork & resend\n </button>\n </div>\n </form>\n </Modal>\n );\n }}\n </Show>\n\n </>\n );\n}\n\n/* ---------- one chat message row ---------- */\n/* ---------- live elapsed-time ticker for a still-running bash call ---------- */\n\n/** Live elapsed-seconds readout for the current thinking stretch. */\n\n/* ---------- per-tool timeline rendering ---------- */\n\n/**\n * A `<pre>` that highlights itself with shiki when a grammar is available.\n *\n * Renders PLAIN first and swaps in the highlighted markup when it arrives, so a tool card never\n * waits on a grammar download to show its text — the same progressive approach the file preview\n * uses. Highlighting goes through `highlightLangChunks` (language by name) because tool content has\n * no file path: a JSON argument object and a bash command are the two cases worth colouring.\n *\n * Lazily imported so the shiki core stays out of the initial bundle, and the run counter guards\n * against a swapped-in result for content that has since changed.\n */\n/**\n * Highlighted code for a tool card, cached by CONTENT rather than by component instance.\n *\n * An instance-local signal is discarded whenever the row's subtree is rebuilt, and the rebuilt\n * instance starts empty and has to race the grammar download again. MEASURED before the row's\n * dependency was narrowed: 20 tool rows produced 118 constructions, and whether a given card ended\n * up highlighted depended on how many times its parent re-ran — \"bashでshikiが当たってるカードと\n * 当たってないカードがある\".\n *\n * Keying on `lang` plus the text means a remount renders highlighted on its FIRST pass (the signal\n * is seeded from the cache) and an identical block in another row costs nothing. The map is\n * bounded because a long session shows thousands of distinct commands.\n */\n\n\n\n/** The un-rendered source text of a chat row — what \"copy raw\" should give. */\n\n\n/**\n * Free-text answer row under an ask_user embed. The agent's reply arrives as\n * a regular user prompt, so this just routes through onOption — but it lets\n * the operator answer with something that wasn't among the offered options.\n */\n\n\nfunction truncate(s: string, n: number): string {\n return s.length > n ? s.slice(0, n) + \" …\" : s;\n}\n\n/** \"in 5m\" / \"3m ago\" — for schedule next/last columns */\n\n/** compact token counts with k/m/b suffixes: 12345 → \"12k\", 2.2M → \"2.2m\" */\n\n/** session cost in USD: cents below $1, whole dollars above — no noise */\nfunction costFmt(usd: number): string {\n if (usd >= 100) return Math.round(usd).toLocaleString();\n if (usd >= 10) return usd.toFixed(1);\n if (usd >= 1) return usd.toFixed(2);\n if (usd >= 0.01) return usd.toFixed(3);\n return usd.toFixed(4);\n}\n\n/** single-line preview with collapsed whitespace */\n\n/* ---------- copy-to-clipboard button ---------- */\n/** Centered icon button — the shared home for emoji-glyph buttons. Emoji\n * baselines sit off-center in plain text buttons, so every icon button\n * should render through this (inline-flex centers the glyph properly). */\n\n/** Copy `text` using the best path this environment actually supports.\n *\n * #52 — every Copy button was dead. `navigator.clipboard` only exists in a\n * SECURE context, and teapot serves the UI over plain `http://127.0.0.1` by\n * default, so the property is ABSENT — `navigator.clipboard.writeText(text)`\n * threw synchronously, before a promise existed, so the `.catch()` fallback\n * written underneath it never ran and the legacy path was dead code.\n *\n * So: feature-DETECT rather than assume. `clipboard` may be undefined, null,\n * or present without a usable `writeText` (older browsers, embedded webviews),\n * and a present API may still reject on permission or an unfocused document.\n * Each of those must reach the legacy path, and a genuine failure must say so.\n */\n\n\n/* ---------- modal shell ---------- */\n\n/* ---------- new agent ---------- */\nfunction NewAgentModal(props: { providers: string[]; onClose: () => void; onCreated: (id: string) => void }) {\n const [dir, setDir] = createSignal(\"~\");\n const [entries, setEntries] = createSignal<string[]>([]);\n const [name, setName] = createSignal(\"\");\n const [provider, setProvider] = createSignal(props.providers[0] ?? \"\");\n const [model, setModel] = createSignal(\"\");\n const [err, setErr] = createSignal(\"\");\n\n // The server resolves each requested path (absolute + ~ expansion) and\n // returns the RESOLVED path as d.path plus its parent. Keep those in state:\n // the old ↑ button sent a bare \"..\", which the server resolved against ITS\n // cwd — so going up never worked from the picker.\n async function browse(p?: string) {\n const d = await api(`/api/fs?path=${encodeURIComponent(p ?? dir())}`);\n setDir(d.path);\n setParent(d.parent ?? \"\");\n setEntries(d.entries ?? []);\n }\n onMount(() => browse(dir()));\n const [parent, setParent] = createSignal(\"\");\n\n const create = async (e: Event) => {\n e.preventDefault(); setErr(\"\");\n try {\n const r = await api(\"/api/agents\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n // start: false → the agent stays lazy/stopped; the first prompt (or\n // ▶ start) kicks off the loop, so no API call fires on an empty agent\n body: JSON.stringify({ workspace: dir(), id: name(), provider: provider() || undefined, model: model() || undefined, start: false }),\n });\n props.onCreated(r.agent.id);\n } catch (ex) { setErr(String((ex as Error).message)); }\n };\n\n return (\n <Modal title=\"new agent\" onClose={props.onClose}>\n <form onsubmit={create} style=\"display:flex;flex-direction:column;gap:10px\">\n <label>workspace directory\n <div style=\"display:flex;gap:6px\">\n <input type=\"text\" class=\"w100 mono\" value={dir()} oninput={(e) => setDir(e.currentTarget.value)} />\n <button type=\"button\" onclick={() => browse(dir())}>go</button>\n <button type=\"button\" title=\"parent directory\" onclick={() => parent() ? browse(parent()) : browse(\"..\")}>↑</button>\n </div>\n </label>\n <div class=\"dirlist\">\n <For each={entries()}>{(n) =>\n <div class=\"direntry\" onclick={() => browse(`${dir()}/${n}`.replace(/\\/+/g, \"/\"))}>📁 {n}</div>\n }</For>\n </div>\n <div style=\"display:flex;gap:10px\">\n <label style=\"flex:1\">agent name <input type=\"text\" placeholder=\"(directory name)\" value={name()} oninput={(e) => setName(e.currentTarget.value)} /></label>\n <label style=\"flex:0 1 auto;min-width:0\">provider\n <select value={provider()} onchange={(e) => setProvider(e.currentTarget.value)}>\n <For each={props.providers}>{(p) => <option>{p}</option>}</For>\n </select>\n </label>\n <label style=\"flex:1\">model <input type=\"text\" placeholder=\"(provider default)\" value={model()} oninput={(e) => setModel(e.currentTarget.value)} /></label>\n </div>\n <Show when={err()}><span style=\"color:var(--err);font-size:13px\">{err()}</span></Show>\n <button type=\"submit\" style=\"align-self:flex-end\">create</button>\n </form>\n </Modal>\n );\n}\n","/* global styles */\nimport \"./app.css\";\nimport { render } from \"solid-js/web\";\nimport App from \"./App\";\n\nrender(() => <App />, document.getElementById(\"root\")!);\n"],"file":"index-Bz-zDX6W.js"}
|