@sma1lboy/rove 0.9.259 → 0.9.262
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/cli/{chunk-bkspbk0y.js → chunk-06wk3r66.js} +1 -1
- package/dist/cli/chunk-0wy0w6jd.js +3 -0
- package/dist/cli/{chunk-ngc1n7h3.js → chunk-1bfcy0n9.js} +1 -1
- package/dist/cli/chunk-1dzr3fba.js +2 -0
- package/dist/cli/{chunk-hwbpbp0c.js → chunk-1pfsfpcg.js} +1 -1
- package/dist/cli/{chunk-h2vv63bh.js → chunk-2cwzyxcs.js} +2 -2
- package/dist/cli/{chunk-5xeywdwg.js → chunk-31h3d4re.js} +2 -2
- package/dist/cli/{chunk-e6848rj8.js → chunk-36y93k92.js} +1 -1
- package/dist/cli/{chunk-8sq09avz.js → chunk-37v3752z.js} +1 -1
- package/dist/cli/{chunk-hynv8c2k.js → chunk-3ds88mym.js} +1 -1
- package/dist/cli/{chunk-cewyvr3c.js → chunk-4ntrjm11.js} +1 -1
- package/dist/cli/{chunk-smqmpz5c.js → chunk-4t1dvw2h.js} +1 -1
- package/dist/cli/chunk-4tgz542w.js +3 -0
- package/dist/cli/{chunk-ymq20jvp.js → chunk-53p99fe7.js} +7 -3
- package/dist/cli/{chunk-rsvh7n8v.js → chunk-5a3c9fnd.js} +1 -1
- package/dist/cli/{chunk-ndbxpd01.js → chunk-65kx9ksj.js} +3 -3
- package/dist/cli/{chunk-9f1xbpxn.js → chunk-68xcxsbg.js} +1 -1
- package/dist/cli/{chunk-b41sj385.js → chunk-6an1v8vq.js} +1 -1
- package/dist/cli/{chunk-s0jbtyd9.js → chunk-6ks6s8b2.js} +3 -2
- package/dist/cli/{chunk-wv8vfhty.js → chunk-6nw0s0ab.js} +1 -1
- package/dist/cli/{chunk-bkt3ktvx.js → chunk-73fw8277.js} +1 -1
- package/dist/cli/{chunk-hqkzc8cv.js → chunk-74e3k701.js} +1 -1
- package/dist/cli/{chunk-stcvcsfm.js → chunk-7697syt8.js} +1 -1
- package/dist/cli/{chunk-9ztqf6hb.js → chunk-7nqzg7h6.js} +2 -2
- package/dist/cli/chunk-7t9q7k4d.js +4 -0
- package/dist/cli/{chunk-pw9teydh.js → chunk-8e8y2m0b.js} +1 -1
- package/dist/cli/chunk-8k04kxqq.js +20 -0
- package/dist/cli/chunk-951xzbsm.js +3 -0
- package/dist/cli/{chunk-dqprpnd6.js → chunk-95gk3twe.js} +1 -1
- package/dist/cli/chunk-b7w3q5f1.js +2 -0
- package/dist/cli/{chunk-jtf8qstz.js → chunk-c3g1bfn6.js} +1 -1
- package/dist/cli/{chunk-3vtpshwx.js → chunk-c7j05xps.js} +1 -1
- package/dist/cli/{chunk-emtbtym6.js → chunk-db61d8dz.js} +1 -1
- package/dist/cli/{chunk-3n2jn56j.js → chunk-dq3m7rhj.js} +1 -1
- package/dist/cli/{chunk-7rfy6zpw.js → chunk-edrw4tby.js} +1 -1
- package/dist/cli/chunk-ephcyh6v.js +3 -0
- package/dist/cli/{chunk-1dnyxp0v.js → chunk-esk09jfb.js} +1 -1
- package/dist/cli/{chunk-j5w8n1st.js → chunk-fg55dc4s.js} +1 -1
- package/dist/cli/{chunk-278sc87n.js → chunk-fq3s9q62.js} +1 -1
- package/dist/cli/{chunk-4pmx2q7r.js → chunk-gc3f7zbs.js} +1 -1
- package/dist/cli/{chunk-ecngwr1v.js → chunk-gc78tfn9.js} +1 -1
- package/dist/cli/{chunk-45yxyx4z.js → chunk-h0pg8e0g.js} +2 -2
- package/dist/cli/{chunk-efjahmtj.js → chunk-h5znx9v9.js} +1 -1
- package/dist/cli/{chunk-jfbnz454.js → chunk-hrgd7vws.js} +1 -1
- package/dist/cli/chunk-jc2jwy0j.js +2 -0
- package/dist/cli/{chunk-btygchef.js → chunk-k21hb0rj.js} +1 -1
- package/dist/cli/{chunk-rc2nwsdd.js → chunk-k71h719j.js} +1 -1
- package/dist/cli/{chunk-n3br556t.js → chunk-karefnj8.js} +3 -3
- package/dist/cli/{chunk-6q52d0nj.js → chunk-kkzmdwfr.js} +2 -2
- package/dist/cli/{chunk-pbfehk8q.js → chunk-kqdq5g1x.js} +2 -2
- package/dist/cli/{chunk-jbndzrbw.js → chunk-m2qajv9v.js} +1 -1
- package/dist/cli/{chunk-1vwngrmf.js → chunk-m3773n9n.js} +1 -1
- package/dist/cli/chunk-m3nfbnxy.js +2 -0
- package/dist/cli/{chunk-9ed3gqj9.js → chunk-m5kxc6m3.js} +3 -3
- package/dist/cli/{chunk-bc4agaf1.js → chunk-mgx6w27b.js} +1 -1
- package/dist/cli/{chunk-qtewm0jz.js → chunk-n8p8b9qd.js} +1 -1
- package/dist/cli/{chunk-0z1azqkp.js → chunk-nnda6138.js} +1 -1
- package/dist/cli/{chunk-edsm15ht.js → chunk-nwevnc6k.js} +1 -1
- package/dist/cli/{chunk-5yv3jzc5.js → chunk-p0ycfqw2.js} +1 -1
- package/dist/cli/{chunk-15jt6k82.js → chunk-q55z079p.js} +1 -1
- package/dist/cli/{chunk-6v8rhkr8.js → chunk-qc376zm1.js} +1 -1
- package/dist/cli/{chunk-67stdpfn.js → chunk-qk9tgve2.js} +1 -1
- package/dist/cli/{chunk-xpr9sf8t.js → chunk-qwhajjyw.js} +2 -2
- package/dist/cli/chunk-r03m4san.js +2 -0
- package/dist/cli/{chunk-601dsgex.js → chunk-r1epx453.js} +1 -1
- package/dist/cli/{chunk-6h12b2k0.js → chunk-r7p1dhrv.js} +1 -1
- package/dist/cli/{chunk-4abka29v.js → chunk-rcqckj34.js} +1 -1
- package/dist/cli/{chunk-5g3s1a2n.js → chunk-rh5vxymy.js} +1 -1
- package/dist/cli/chunk-rrqjk4rn.js +16 -0
- package/dist/cli/{chunk-rnxk3587.js → chunk-sp9cmc7p.js} +1 -1
- package/dist/cli/{chunk-qpvvc1xz.js → chunk-t228jyth.js} +1 -1
- package/dist/cli/{chunk-3yx6rrgm.js → chunk-tj1w7jb7.js} +4 -4
- package/dist/cli/{chunk-t60qcvcj.js → chunk-traxwyfz.js} +1 -1
- package/dist/cli/{chunk-44ba9qvn.js → chunk-tx4b93j7.js} +1 -1
- package/dist/cli/{chunk-pgbsb202.js → chunk-tykb6n4m.js} +1 -1
- package/dist/cli/{chunk-sh5a4djc.js → chunk-vznz1yf0.js} +1 -1
- package/dist/cli/{chunk-1j4e2jcx.js → chunk-xwynw0t0.js} +1 -1
- package/dist/cli/{chunk-k2cnmb5q.js → chunk-xywr9nj6.js} +1 -1
- package/dist/cli/{chunk-3v2hgjb2.js → chunk-y5wt6c1s.js} +1 -1
- package/dist/cli/{chunk-k3b5cnd5.js → chunk-y7nkgnzn.js} +16 -16
- package/dist/cli/{chunk-jj3nbb2g.js → chunk-yxsec1f1.js} +1 -1
- package/dist/cli/{chunk-p27ph0g8.js → chunk-z5evzj1q.js} +1 -1
- package/dist/cli/{chunk-kcefxpn1.js → chunk-zqfvxz1g.js} +1 -1
- package/dist/cli/{chunk-59hmb90m.js → chunk-zsth2jk6.js} +1 -1
- package/dist/cli/{chunk-bdwp2k8f.js → chunk-zt0dmqn5.js} +1 -1
- package/dist/cli/index.js +4 -4
- package/dist/cli/pty-host-node.mjs +4 -0
- package/dist/cli/rove.js +1 -1
- package/dist/completions/rove.bash +1 -1
- package/dist/completions/rove.fish +1 -1
- package/dist/completions/rove.zsh +1 -1
- package/dist/skills/rove/SKILL.md +1 -1
- package/dist/skills/rove/references/api-flags.md +18 -3
- package/dist/web/assets/{index-B4sS_af0.js → index-BLCf4p1g.js} +23 -23
- package/dist/web/assets/{index-znAxiX5H.css → index-CdjFB6v7.css} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +3 -3
- package/dist/cli/chunk-1dcb0069.js +0 -3
- package/dist/cli/chunk-4pt3n7cg.js +0 -4
- package/dist/cli/chunk-5c0dgs7n.js +0 -2
- package/dist/cli/chunk-apm5yjkq.js +0 -3
- package/dist/cli/chunk-cc1mzr8d.js +0 -2
- package/dist/cli/chunk-g1rqy0nz.js +0 -2
- package/dist/cli/chunk-jzf2d1pj.js +0 -20
- package/dist/cli/chunk-q2kweazg.js +0 -16
- package/dist/cli/chunk-sqks9vyt.js +0 -2
- package/dist/cli/chunk-wg9w0xf4.js +0 -3
- package/dist/cli/chunk-ywtsqm67.js +0 -2
- package/dist/cli/chunk-zae59k1j.js +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAASIABAAAAAACQQAAAQuAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVF4AdBEICoRkhAALIAABNgIkAzoEIAWFAAeBFAwHG2oHKJ6DceNW4lJEFHn9tEOE37LNsvkjHr7f739rn3u+OSrSxLQytE91Dw2PYtNVq3Qaw/vJ7fUBMdOj/u2ImB98cT5WUx9F13ZKt06mU7tG1sAYcM26yCRX4f/0904bmwq8hwkUUMTRX61pa9C3xlpAGYw1vOu8C2SBZZFlld7DAW82RJWmwYMI1AJCKBNCIASqdZGFmtPSNQRhMpR0EKjWTwm6z6sJ+4jqhxjovTinVdRpZaQjaQzAYjI8NgAKDJCokgunCn9oUQE8VZd/F//+v6P4F1U9gLr58yNI/dJX9BAshEoJbTDogz7ocKoUsPvES8UK/aQIUQgpGgECBVLkOEV6iASTYgNAPKdNXayhDPL7IJuAZnEYSZ0eOLc9i5Rv5/+lEi3sW/kfnCf/+fTe0sxS7CKLx5erRJkKOixEqQaoqrvx5HN4iz4VhX0gS6DjFIWUzn/fIXJRVFY1NFRVNVeFt+SYmrK6vCU6eJsnKnJj5HTESMTQZOTI3Y/tzr3rUcOsiRy/ciP50s3Mycgxmhz9GMXhjzVH30ut796NHP0UUa31/Zoa6vCH6iPvdIM0IRANaT60FablmZlZd+UKNFy9NrvnFGxb5NC2CRxR0/rIyF/WNn+35sv9r+tHVhkseuWGKkCPPh96+GXt8Lc/Sh24ujfjf+tNw1lZWreiPuHb/PSpyjdv2rf/++ZE5TSKjFdZxYsBvr1sEHl5STuHZqYR7jGYGvGBBdjcaB5bODY1GAxMjsd0wDMIzXAXODRd74DxNMtO4YuYHclgLQRzp9KlUmxptCwv9bYgvWGD2xBW7r9413fdJu+mxzvzAUYeeONQvZP4kgfqZle4jhH/MWh+UbxgtJdrLdXLymNL53PRU0D3Q6FcXTfGqGcul6vrqhgLGAVSv+IVIfZOHpu+mlLqSlnj903j8mazXDsba/wbxhS/4Oubh1c5/uXDgt4j5KtnGEy5BIJHo0ur+jD+r2qCkuP1aRVM8EpUoRYSJyqNRA38uwDvHBNo0AejO2Z+ZYLLal1QiFyFh1EDQOgSCSCpjwwKU8yDbIjroEwne0G5Qca49cYp4AlqtQNZfWTQoFb1tRpFYAmRD+HXTkV4uQhG2bg4OKmyoypAsUGtWgQXyFxYrkpODeUxvGqIZA61erXo0sFG1UBGuPgpuon8RNUG2DhovAjZCBuZwtXrU3mQGki9+pm0eVZAXoWxLWTQoYHBPrJR4WunNxIFbCHfkTyPK+sqxjxDmGArZvf79JGJ3GwEqjwc7a7NIrl/7bJ7Nzu4+n1Ow6shEPnUrtVo7cnd5Wi5qCUbBIQbNKCP95FMCSZylEV5VCiiMqqiOmrKZ/I/C0gI1fyuulVcM2E1r4MhtcV/fbCD+HwEvVzH1dGNAzFE0FTbKzyQz3gootrNbN2a4PuG0j0JOgE=)format("woff2"),url(data:font/woff;base64,d09GRgABAAAAAAbUAA8AAAAACOgAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABWAAAABgAAAAcABQABEdQT1MAAAFwAAAAHgAAAB5EdEx1R1NVQgAAAZAAAAAnAAAAKLj8uOpPUy8yAAABuAAAAFEAAABgFwRca1NUQVQAAAIMAAAARgAAAF7mY9MfY21hcAAAAlQAAABRAAAAdAyHCodnYXNwAAACqAAAAAgAAAAIAAAAEGdseWYAAAKwAAAB6QAAAl7g5OpvaGVhZAAABJwAAAA2AAAANhSQ8UNoaGVhAAAE1AAAAB8AAAAkAcoBImhtdHgAAAT0AAAAHgAAADofBAM2bG9jYQAABRQAAAAgAAAAIATcBZ9tYXhwAAAFNAAAABwAAAAgAIcCb25hbWUAAAVQAAABEgAAAoA4pV3kcG9zdAAABmQAAABwAAAAlNdzMTB42mNgZGBg4GGAAEYgZAWTjCAeAAG0ABkAAQAAAAoAHAAcAAFERkxUAAgABAAAAAD//wAAAAAAAHjaY2BkYGDgYlADQiYXN58QBqGcxJI8Bj4GEGABEf//g0gAWkkFVQB42mNgYYpinMDAysDA1MUUwcDA4A2hGeMYjBgdgKIMDJwMUMDEzoAEvJyAxAEGXpaXzH/+XWFgYP7DqKPAwDj//nWgSjWmW0BZBQZWABNDDdYAAAB42kXIIQIBARQFwHl/QQIkWXInUAANXMOBJCcTd+KIGCjMNViq9/H0CM6P/S0j0bOwUqh08iEb8kPTXn3RiMoYhD90Nwc3AAB42lXIRwHCQBAF0JceehWAlTjhjikUgAVQA4mJLbdk5neUqHBVKWSv3XF2VCnt3AyevkVZv+sxBBbbq/6HfFP4hEcYQgEK82v1aHQ5RTs3FRQAAAAAAQAB//8AD3jabZA1tNRAFEDfTGDdfXHI2QQnZJJvK5ngDs13Welwt/78CtcS7xvcrcHKbXCtceh+wgtu437nXRCgC4BY9AGOXOAFYNHR0dzoKCGju8gJ6xiZaF3DWqcPBiSV5i2geaCgAlAJ77ghgjfiLC7KojvOZEmSXS63emXr5W7lsTLtXFMkRmks4ly+cYOEnvO2YLDNANv+9oJwhkpAAJAcHPG/1RC2BERc1ZGGMxYVWDyVSjc0NMaZELUf9e4JhCgNB3b2PiJRctuqZ0WPR8zilxutN/ji97vUBYMAnGjtzxjtK3wrDaMABo+R9KjWwNRUMppwuWS1QdfFZCIlMF2TxDGuJJlYW7OmVlvD+sx86b1hvC/l8yXf2hqZ66xbZ80yWzyD9/fzGaRzA58+nSOzYC+gw9AP+vyNqUAUhoD4lSnputbgUFPJ5O9Y+ReWlxkrc96naX08b3zk/KORb+E+VjYPmH1M6+UHeVlDtCzzGZ9FY8YMA8gPMsQA0jqaGkHT6cYSdVwl7Zs9Wzx+DyWUugPujd03T52ikrUvM26kF9PIcRmycuDBKcd3XRhPDgtnQACINzJ3fVl1tTB++3bc2S7kyD3cCQIQNMcSKaY2YOciE+d0zFbGjps6u0PILTFlRZHNJfAFnfeHtgAAAAABAAAAAjYEro52gl8PPPUAAwPoAAAAANvSppoAAAAA29rQ8vk5/tQEkgP8AAAABgACAAAAAAAAeNpjYGRgYP7z7woDA8uGn5Z/+1kmAUVQAR8Ar8AG6gB42mOKYIgCYiMkrAzCUHEbJJoBikHgCkMPAPDwCFUAAAAAABoAOwBGAFEAbwB3AKkAsQDmAQkBCQEJAQkBFgEveNpjYGRgYOBn3MGQx7CFgQ3MQwBmBiYALRoB+HjajJADbgVQEEXPZ20bQW3bthvXbr8Vp4to1KV0AV1Wb9JvZzJvzhvcB6CQL0wYzHnAj6E/yAYaDeVBNlJsMAfZxCy/QTbTy3eQLdTzGWQr3VwGuZhx2v/ZAIVUB9kc0TSUKJ8f5FIRHGPjnWs+2MKt+MYzt1xwr/jIk3JymR0X0wzIXKo7VbXjFvfLn3lTtCn7qPoB6+yyzb3qy8pdq/6hrj11fMj7OFbtEY+mrlU/516rVFCdVobplw/JEjVaCaqIYlUiUzOaW9aa/Q1idmlPXZHbCagW/B10XwaRi06VuVdMf+9DnIov6rlF8yzhUXxC/4c66Uz48UepqEN9N/Tzt2RwjOljsUUfj581AbaEXsIAAHjaY2BiAIP/qQxGQIqRAR3wA7EKw0lGJgYbRmZGFkZWRjZGdgZmRg5GTkYuRm42x6Si1LJU9tK8TAMTR1cI7WoB5btB+Zas6Ym5uYlgnoGjAZNzEF9icmlJanJ+bpJecmJxKg9IxtjADMwBAKDtHJg=)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2)format("woff2"),url(/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2)format("woff2"),url(/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,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)format("woff2"),url(/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(data:font/woff2;base64,d09GMgABAAAAAASAABAAAAAACNgAAAQlAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVEwAdBEICoRkg3gLIAABNgIkAzoEIAWEaAeBFAwHGzgHSJ4DbjN9OmtkIy0becnT/RjJ4uGfw99974/GXrhoTCqLok66NY3jTloEUdrmwCevn/Ls30xSpFlZ6UJMrW+fTNwAEdSuvSzCRANvEgnjUmw8swT+87+w7I/7qb8XlIB7NpGBjXiUjRX0b7ZpJ8+orRLzvGhWYCMdAU3BbRdPuqOeKAXuRKAWEEJJCIEQqNbLD9osq2kBviL8A4Fq4yLgAa+6DNaiAwcYOrqYHfgQcMgL3AFgG4fHHqREEUBSxUtmBfzNWxXADfviy8Kff7dA4QfFBQG6fnoX5Dh+gEEcIVRKtMIYhc/kCgsCDiarQY4QWpEKQoYTAAIJUcaHAHIXIN9BooBWhEAr0j7QzAkh1RnEWOY4wuRW8uX/f5o5W8gXcjriOUb9z/wjACRuWaWrpKIyLMQ/DUDN/TT+ErgHRpPBIRQrKCcZCvxBBCBEkSD4lKMjRblQlCvpQHPsSZE9R6K2o/vpXkGboKWbbltxx2feLT+a6KJb5293n7vTt53uwOzUO4gYc5eedhvS+a1bbdNuIiSA89cuGo25IZh6DXrJJIIUUibFUG0zt+ijO+cvnj8fjVm4cKlvN90DwzrdMmy8H9GjDyv90Xz2W10PVj3oTY7LLfwfmxMHoef+8n33R0duOxF3LPCYFXtymWNdcLBD3VF4S91+GWf8c9k7sZC6fPpnbENnCmayerBNki0ZbFUXiHV/wkxWklGmydCkaR5o0oZnlj3oSVdnZKjTITaXStOyWGYakzUgTSt1gvSs/otJL1FkzE/3e+aXvj7n+TOv9HkZ6evS4e3OXafCx8iqJfNGpQLM7rkt0ppRJ8N3gd1IjHLaROM0cLkhdf2NQjZ4bmjo2mBWKJ4CPA4IZXX9hFlPBnhxWhXzgBGQ88QeRD3j1/AD5a/JxMnL5gK5deaC2H7HvK98gngBbzfWLKD0g2ufeA7nMsQepBwDgpdhy90BzC+8DSCers8O6KKloYn0RCtKo9EM9LsAd7AgNBhFGEAsvl4K1LpCiCIF3IZHFUKvX5AqfUPBgkO+ovHpUNJtOJSN6hDWWxAigkCt9hbEXdaOHLvI6lM5gQA79LRYOpUsWBpKYu2klOQULGlGCwOzHIkSmYmZKBlQrlmCQ0mDv5SeiVyiemVqVJGyEDJhKemY1dLT0YsnpKch0UbKxExJTydIigQpkiUvYA3SVFDqFH2uNggh343VmPs2ycX0DIYwPYTigMak5AjS0ohI8zmoo4EJwypS4iVcDOuDuvRMgytHPa5LTjnoc1YiCcT0tBI3qjXxqqFomJf2PylAOHMDRp1HGBaDQCTiIC7iQSH4iEICRHMZkUlqk/KsOmVSGlOK7NIseRNZFp3NkbNaLateTmKScHGTAyu2WqQf6lD8rMNg1+lKTcpwkfvQ/7eRMwAA)format("woff2"),url(data:font/woff;base64,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)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/jetbrains-mono-cyrillic-700-normal-BWTpRfYl.woff2)format("woff2"),url(/assets/jetbrains-mono-cyrillic-700-normal-CEoEElIJ.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/jetbrains-mono-greek-700-normal-C6CZE3T8.woff2)format("woff2"),url(/assets/jetbrains-mono-greek-700-normal-DEigVDxa.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(data:font/woff2;base64,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)format("woff2"),url(/assets/jetbrains-mono-vietnamese-700-normal-BDLVIk2r.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/jetbrains-mono-latin-ext-700-normal-CZipNAKV.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-ext-700-normal-CxPITLHs.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/jetbrains-mono-latin-700-normal-BYuf6tUa.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-700-normal-D3wTyLJW.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--paper:#141413;--surface:#1a1917;--inset:#2b2a27;--line:#3a3835;--line-active:#5c5853;--ink:#eae7df;--muted:#a9a39a;--subtle:#6b665f;--accent:#cc785c;--accent-soft:color-mix(in srgb, var(--accent) 14%, transparent);--hover:color-mix(in srgb, var(--ink) 7%, transparent);--shadow-popover:0 8px 24px #00000052, 0 2px 6px #0003;--focus:var(--accent);--info:#61aaf2;--diff-added:var(--success);--diff-removed:var(--error);--diff-added-bg:#9aca861a;--diff-removed-bg:#d475631a;--error:#d47563;--success:#9aca86;--warning:#e8c96b;--mono:"JetBrains Mono", "IBM Plex Mono", "SF Mono", Menlo, Consolas, ui-monospace, monospace;--sans:-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--radius:8px;--radius-sm:6px;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--paper);color:var(--ink);font:13px / 1.4 var(--sans);-webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;padding:0}button:focus-visible,.input:focus-visible{outline:1px solid var(--focus);outline-offset:1px}:root{--scroll-thumb:color-mix(in srgb, var(--subtle) 45%, transparent);--scroll-thumb-hover:var(--subtle);--scroll-thumb-active:var(--muted)}@supports not selector(::-webkit-scrollbar){*{scrollbar-width:thin;scrollbar-color:var(--scroll-thumb) transparent}:hover{scrollbar-color:var(--scroll-thumb-hover) transparent}}@supports selector(::-webkit-scrollbar){::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-corner{background:0 0}::-webkit-scrollbar-button{display:none}::-webkit-scrollbar-thumb{background:var(--scroll-thumb) padding-box;border:3px solid #0000;border-radius:999px;min-width:32px;min-height:32px}::-webkit-scrollbar-thumb:hover{background-color:var(--scroll-thumb-hover)}::-webkit-scrollbar-thumb:active{background-color:var(--scroll-thumb-active)}}.xterm .xterm-scrollable-element>.scrollbar>.slider{background-clip:padding-box;border:3px solid #0000;border-radius:999px}.xterm .xterm-scrollable-element>.shadow{display:none}.muted{color:var(--muted)}.error{color:var(--error)}.wordmark{font:700 14px var(--mono);letter-spacing:.02em;white-space:nowrap}.bracket{color:var(--accent)}.kicker{font:500 11px var(--mono);letter-spacing:.11em;text-transform:uppercase;color:var(--muted);margin:0}.kicker.is-accent{color:var(--accent)}.app{grid-template-rows:1fr auto;grid-template-columns:minmax(220px,280px) 1fr;height:100%;display:grid}.rail{border-right:1px solid var(--line);flex-direction:column;grid-row:1;min-height:0;display:flex}.rail-head{justify-content:space-between;align-items:baseline;gap:8px;padding:14px 14px 10px;display:flex}.rail-body{flex:1;padding:4px 6px 12px;overflow-y:auto}.project-head:not(:first-child){margin-top:18px}.rail:focus{outline:none}.rail:focus-within .is-cursor{box-shadow:inset 0 0 0 1px var(--focus)}.rail-search{gap:4px;padding:0 14px 8px;font-size:12px;display:flex}.rail-search .caret{color:var(--accent);animation:1s step-end infinite blink}.rail-search .muted{margin-left:6px}@keyframes blink{50%{opacity:0}}.project-head{font:700 12px var(--mono);color:var(--muted);align-items:center;gap:8px;margin:6px 8px 4px;display:flex}.project-head .rule{background:var(--line);flex:1;height:1px}.row{border-radius:var(--radius-sm);text-align:left;align-items:center;gap:8px;width:100%;min-height:26px;padding:3px 8px;display:flex;position:relative}.row:hover,.row[data-menu-open],.tab[data-menu-open]{background:var(--hover)}.row.is-selected{background:var(--inset)}.row.is-selected:before{content:"";background:var(--focus);border-radius:1px;width:2px;position:absolute;top:4px;bottom:4px;left:-6px}.tab-row{color:var(--muted)}.tab-row>.glyph{margin-left:18px}.tab-row.is-selected{color:var(--ink)}.glyph{width:1ch;font-family:var(--mono);text-align:center;flex:none}.row-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.chips{font:11px var(--mono);flex:none;gap:6px;display:flex}.tone-accent{color:var(--accent)}.tone-muted,.chip.muted{color:var(--subtle)}.tone-attention{color:var(--error)}.tone-warning{color:var(--warning)}.tone-success{color:var(--success)}.tone-ink{color:var(--ink)}.empty{font-family:var(--mono);padding:16px 10px;font-size:12px}.empty p{margin:0 0 4px}.workspace{flex-direction:column;grid-row:1;gap:6px;min-width:0;min-height:0;padding:8px 10px 8px 8px;display:flex}.tab-strip{font-family:var(--mono);align-items:center;gap:2px;min-width:0;font-size:12px;display:flex}.tab{border-radius:var(--radius-sm);color:var(--muted);white-space:nowrap;align-items:center;gap:6px;padding:4px 10px;display:flex}.tab:hover{background:var(--hover)}.tab.is-active{color:var(--ink);background:var(--inset)}.tab-index{color:var(--subtle)}.tab.is-active .tab-index{color:var(--accent)}.tab-strip-title{color:var(--subtle);text-overflow:ellipsis;white-space:nowrap;font-family:var(--sans);margin-left:auto;padding-left:12px;overflow:hidden}.pane{border:1px solid var(--line);border-radius:var(--radius);background:var(--paper);flex:1;min-height:0;display:flex;overflow:hidden}.placeholder{font:12px var(--mono);color:var(--subtle);margin:auto}.term-pane{flex:1;min-width:0;display:flex;position:relative}.term-host{flex:1;min-width:0;padding:6px 4px 4px 8px}.term-host .xterm{height:100%}.term-notice{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);font:11px var(--mono);color:var(--muted);padding:5px 10px;position:absolute;bottom:10px;right:10px}.term-notice.is-error{color:var(--error)}.status{border-top:1px solid var(--line);background:var(--surface);font:11px var(--mono);color:var(--muted);grid-column:1/-1;align-items:center;gap:8px;padding:4px 12px;display:flex}.status .spacer{flex:1}.usage{white-space:nowrap;gap:16px;display:flex;overflow:hidden}.tone-ok{color:var(--success)}.tone-warn{color:var(--warning)}.tone-crit{color:var(--error)}.dot{background:var(--subtle);border-radius:50%;width:6px;height:6px}.dot.state-open{background:var(--success)}.dot.state-retrying{background:var(--warning)}.link{color:var(--accent)}.link:hover{text-decoration:underline}.connect{place-items:center;height:100%;padding:24px;display:grid}.connect-card{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);flex-direction:column;gap:12px;width:min(460px,100%);padding:24px;display:flex}.connect-card p{margin:0}.input{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--paper);width:100%;color:var(--ink);font:12px var(--mono);padding:8px 10px}.actions{justify-content:flex-end;align-items:center;gap:14px;display:flex}.button{border-radius:var(--radius-sm);background:var(--accent);color:var(--paper);font:600 12px var(--mono);padding:6px 14px}.button:active,.row:active,.tab:active{transform:scale(.97)}@media (prefers-reduced-motion:reduce){.button:active,.row:active,.tab:active{transform:none}}.machine-chip{color:var(--subtle);white-space:nowrap;font-weight:400}.row.is-stale .row-title,.row.is-stale .glyph,.project-head.is-stale{color:var(--subtle)}.remote-notice{font:12px / 1.5 var(--mono);text-align:left;flex-direction:column;gap:8px;padding:14px;display:flex}.overlay{z-index:20;background:#0a0a098c;place-items:start center;padding-top:12vh;display:grid;position:fixed;inset:0}.dialog{color:inherit;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);width:min(440px,100vw - 32px);max-height:76vh;box-shadow:var(--shadow-popover);flex-direction:column;gap:12px;margin:0;padding:18px 20px;display:flex;position:static}.dialog.is-wide{width:min(620px,100vw - 32px)}.dialog-body{flex-direction:column;gap:12px;min-height:0;display:flex;overflow-y:auto}.dialog-body p{margin:0}.field{flex-direction:column;gap:6px;display:flex}.textarea{resize:vertical;min-height:72px;line-height:1.45}select.input{appearance:none;cursor:pointer}.chips-row{flex-wrap:wrap;gap:6px;display:flex}.chip-button{border:1px solid var(--line);border-radius:var(--radius-sm);font:12px var(--mono);color:var(--muted);padding:4px 10px}.chip-button:hover{background:var(--hover)}.chip-button.is-active{border-color:var(--accent);color:var(--ink);background:var(--accent-soft)}.choices{margin:0;padding:0;list-style:none}.button.is-danger{background:var(--error)}.button:disabled{opacity:.5;cursor:default}.menu{z-index:30;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);min-width:200px;max-height:calc(100vh - 16px);box-shadow:var(--shadow-popover);transform-origin:0 0;flex-direction:column;padding:4px;animation:.12s cubic-bezier(.16,1,.3,1) menu-in;display:flex;position:fixed;overflow-y:auto}@keyframes menu-in{0%{opacity:0;transform:scale(.96)}}@media (prefers-reduced-motion:reduce){.menu{animation:none}}.menu-item{border-radius:var(--radius-sm);text-align:left;justify-content:space-between;gap:24px;padding:5px 10px;font-size:13px;display:flex}.menu-key{font:11px var(--mono);color:var(--subtle)}.menu-item.is-selected{background:var(--hover)}.menu-item.is-selected .menu-key{color:var(--muted)}.menu-item.is-danger{color:var(--error)}.menu-sep{background:var(--line);border:0;flex:none;height:1px;margin:4px -4px}.menu-chevron,.menu-check{font:12px var(--mono);color:var(--subtle)}.menu-check{color:var(--accent)}.menu-item.is-open{background:var(--hover)}.menu-item.is-selected .menu-chevron,.menu-item.is-open .menu-chevron{color:var(--ink)}.menu-sub{min-width:160px}.menu-item.is-danger.is-selected{background:var(--error);color:var(--paper)}.menu-item.is-danger.is-selected .menu-key{color:inherit}@media (forced-colors:active){.menu-item.is-selected{outline-offset:-2px;outline:2px solid highlight}}.toasts{z-index:40;flex-direction:column;gap:6px;display:flex;position:fixed;bottom:34px;right:14px}.toast{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);max-width:420px;color:var(--ink);font:12px var(--mono);text-align:left;cursor:pointer;overflow-wrap:anywhere;padding:7px 12px}.toast.is-error{color:var(--error)}.inbox h2.kicker{margin-top:4px}.inbox-hints{color:var(--subtle)}.cards{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.inbox-card{flex-direction:column;align-items:stretch;gap:2px;padding:6px 10px}.inbox-line{align-items:baseline;gap:10px;min-width:0;display:flex}.inbox-badge,.inbox-age{font:11px var(--mono);flex:none}.inbox-age{color:var(--subtle)}.inbox-sub{font:11px var(--mono);color:var(--muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mono{font:12px var(--mono)}.inbox-chip:hover{color:var(--accent)}.new-task{width:auto;color:var(--muted);margin:4px 6px 10px}.tab-new{color:var(--subtle)}div.placeholder{flex-direction:column;align-items:center;gap:12px;display:flex}div.placeholder p{margin:0}.settings{grid-template-columns:140px 1fr;gap:18px;min-height:360px;display:grid}.settings-nav{border-right:1px solid var(--line);flex-direction:column;gap:2px;padding-right:10px;display:flex}.settings-tab{text-align:left;border-radius:var(--radius-sm);color:var(--muted);padding:5px 10px}.settings-tab:hover{background:var(--hover)}.settings-tab.is-active{color:var(--ink);background:var(--inset)}.settings-body{flex-direction:column;gap:18px;max-height:60vh;display:flex;overflow-y:auto}.settings-group{flex-direction:column;gap:8px;display:flex}.settings-group p{margin:0;font-size:12px}.settings-rows{flex-direction:column;display:flex}.engine-row{border-bottom:1px solid var(--line);align-items:center;gap:10px;padding:6px 4px;display:flex}.engine-check input{accent-color:var(--accent)}.engine-main{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.engine-detail{text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.engine-actions{font:11px var(--mono);gap:10px;display:flex}.prefix-hud{z-index:40;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);min-width:220px;color:var(--ink);box-shadow:var(--shadow-popover);padding:8px 12px;font-size:12px;position:fixed;bottom:34px;left:12px}.prefix-hud-head{margin-bottom:2px}.prefix-hud-row{color:var(--muted);gap:12px;display:flex}.prefix-hud-key{min-width:3ch;color:var(--accent)}.dialog:focus{outline:none}.page{border:1px solid var(--line);border-radius:var(--radius);background:var(--paper);flex:1;min-height:0;padding:14px 18px;overflow-y:auto}.page:focus{outline:none}.page-title{font:700 14px var(--sans);margin:0 0 6px}.page-group{margin-top:12px}.page-group .project-head{margin-left:0}.wt-row{border-radius:var(--radius-sm);padding:5px 8px}.wt-row.is-cursor{background:var(--inset);box-shadow:inset 2px 0 0 var(--accent)}.wt-line{align-items:baseline;gap:8px;font-size:13px;display:flex}.wt-line.mono{justify-content:space-between;font-size:11px}.wt-branch{font-family:var(--mono)}.wt-path{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.page-hints{margin-top:16px;font-size:11px}.page-head{justify-content:space-between;align-items:baseline;display:flex}.update-versions b{margin-right:10px}.update-actions{flex-direction:column;margin:10px 0;display:flex}.update-action{border-radius:var(--radius-sm);text-align:left;gap:12px;padding:4px 8px;font-size:13px;display:flex}.update-action.is-cursor{background:var(--inset);box-shadow:inset 2px 0 0 var(--accent)}.update-label{min-width:14ch}.update-chip{color:var(--warning)}.release-notes h2{margin:14px 0 4px;font-size:13px}.release-notes pre,.whats-new-body pre{white-space:pre-wrap;font:12px / 1.5 var(--mono);color:var(--muted);margin:0}.whats-new-body{max-height:55vh;overflow-y:auto}.files{outline:none;flex-direction:column;grid-row:1;min-width:0;min-height:0;padding:10px 6px 8px 0;display:flex}.files:focus-within .files-tab.is-active{color:var(--accent)}.files-actions{font:11px var(--mono);justify-content:flex-end;gap:14px;padding:0 8px 8px;display:flex}.files-tabs{gap:4px;padding:0 4px 6px;display:flex}.files-tab{border-radius:var(--radius-sm);font:600 12px var(--mono);color:var(--muted);padding:3px 10px}.files-tab.is-active{color:var(--ink);background:var(--inset)}.files-scope{font:11px var(--mono);color:var(--muted);flex-wrap:wrap;gap:4px 10px;padding:0 8px 8px;display:flex}.files-body{flex:1;min-height:0;overflow-y:auto}.file-row{min-height:24px;font:12px var(--mono)}.files:not(:focus) .file-row.is-selected:before{background:var(--line-active)}.status-M{color:var(--warning)}.status-A,.status-untracked{color:var(--success)}.status-D{color:var(--error)}.status-R{color:var(--accent)}.placeholder-line{font:12px var(--mono);color:var(--subtle);margin:12px 10px}.tab-preview{cursor:default}.tab-close{color:var(--subtle);padding:0 2px}.tab-close:hover{color:var(--accent)}.term-slot{flex:1;min-width:0;display:flex}.term-slot.is-hidden{display:none}.preview{outline:none;flex-direction:column;flex:1;min-width:0;display:flex}.preview-body{min-height:0;font:12px / 1.5 var(--mono);flex:1;padding:6px 0;overflow:auto}.diff-row{white-space:pre;cursor:default;grid-template-columns:4ch 4ch 2ch 1fr;gap:0 8px;padding:0 12px;display:grid}.diff-row .gutter{color:var(--subtle);text-align:right}.diff-row .code{min-width:0}.diff-row.kind-add{background:var(--diff-added-bg)}.diff-row.kind-add .sign,.diff-row.kind-add .code{color:var(--diff-added)}.diff-row.kind-del{background:var(--diff-removed-bg)}.diff-row.kind-del .sign,.diff-row.kind-del .code{color:var(--diff-removed)}.diff-row.kind-hunk,.diff-row.kind-meta{color:var(--subtle)}.diff-row.kind-file{color:var(--ink);border-top:1px solid var(--line);margin-top:8px;padding-top:4px;font-weight:700}.diff-row.is-noted .sign{color:var(--accent)}.diff-row.is-noted{box-shadow:inset 2px 0 0 var(--accent)}.preview:focus .diff-row.is-cursor{background:var(--accent-soft)}.diff-row.is-cursor{background:var(--inset)}.preview-footer{border-top:1px solid var(--line);font:11px var(--mono);color:var(--muted);gap:10px;padding:5px 12px;display:flex}.preview-footer .spacer{flex:1}.pref-row,.pref-cycle,.pref-readonly{text-align:left;align-items:baseline;gap:10px;width:100%;padding:5px 4px;font-size:13px;display:flex}.pref-row{cursor:pointer}.pref-cycle:hover:not(:disabled){background:var(--hover)}.pref-cycle .pref-label:after{content:" ›";color:var(--accent)}.pref-row input[type=checkbox]{accent-color:var(--accent);align-self:center}.pref-label{font-family:var(--mono);font-size:12px}.pref-hint{margin:0;font-size:11px}.pref-field{border:0;flex-direction:column;gap:6px;min-width:0;margin:0;padding:4px;display:flex}.pref-field legend{float:left;width:100%;margin-bottom:6px;padding:0}.pref-field .chips-row{clear:both}.pref-number{width:9ch;padding:3px 6px}.pref-readonly .pref-label{color:var(--muted)}.tier-row{border-bottom:1px solid var(--line);flex-direction:column;gap:3px;padding:8px 4px;display:flex}.tier-head{align-items:baseline;gap:12px;display:flex}.tier-head .link{margin-left:auto}.tier-editor{flex-direction:column;gap:8px;padding:8px 0 2px;display:flex}.hook-rows{font:12px var(--mono);gap:18px;padding:10px 4px;display:flex}.confirm-inline{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);flex-direction:column;gap:6px;padding:8px 10px;display:flex}.confirm-inline p{margin:0}.tone-diff-added{color:var(--diff-added)}.tone-diff-removed{color:var(--diff-removed)}.task-mark{border-radius:2px;flex:none;align-self:stretch;width:3px;margin:2px 0}.tab-row.is-two-row{align-items:flex-start}.row-caption{font-size:11px;display:block}html[data-running-title=shimmer] .task-row.is-running .row-title{background:linear-gradient(90deg, var(--ink) 0%, var(--ink) 35%, var(--accent) 50%, var(--ink) 65%, var(--ink) 100%) 0 0 / 300% 100%;color:#0000;-webkit-background-clip:text;background-clip:text;animation:2.4s linear infinite shimmer}@keyframes shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}.pane:focus-within{border-color:var(--focus)}html[data-working-border=flow] .pane.is-working{background:linear-gradient(var(--paper), var(--paper)) padding-box, linear-gradient(90deg, var(--line), var(--task-ink,var(--focus)), var(--line), var(--task-ink,var(--focus)), var(--line)) border-box;background-size:100% 100%,300% 100%;border-color:#0000;animation:3s linear infinite flow-border}@keyframes flow-border{0%{background-position:0 0,0 0}to{background-position:0 0,-200% 0}}.tab-strip.is-tabs-hidden .tab:not(.tab-new):not(.tab-preview){display:none}@media (prefers-reduced-motion:reduce){html[data-running-title=shimmer] .task-row.is-running .row-title{color:inherit;background:0 0;animation:none}html[data-working-border=flow] .pane.is-working{animation:none}}.app{grid-template-columns:var(--rail-w,minmax(220px, 280px)) 1fr minmax(240px, 300px)}.app.is-zen{grid-template-columns:var(--rail-w,minmax(220px, 280px)) 1fr}.app.is-narrow{grid-template-columns:minmax(0,1fr)}.app.narrow-content .rail,.app.narrow-sidebar .workspace{display:none}.narrow-back{align-self:flex-start;padding:2px 6px;font-size:12px;font-weight:700}.recent-row .glyph{font-weight:700}.rail{position:relative}.rail-grip{cursor:col-resize;z-index:5;touch-action:none;width:6px;position:absolute;top:0;bottom:0;right:-3px}.rail-grip:hover,.rail-grip:active{background:var(--accent-soft)}.rail-fold-btn{color:var(--muted);z-index:6;padding:0 4px;font-weight:700;position:absolute;bottom:2px;right:8px}.rail-fold-btn:hover{color:var(--accent)}.rail.is-folded{align-items:center;overflow:hidden}.rail-fold-btn:only-child,.rail.is-folded .rail-fold-btn{right:50%;transform:translate(50%)}.rail-folded-list{flex:1;width:100%;min-height:0;padding:10px 0 24px;overflow-y:auto}.rail-folded-group{flex-direction:column;align-items:center;display:flex}.rail-folded-rule{border-top:1px solid var(--line);width:60%;margin:6px 0}.rail-folded-cell{width:100%;font:13px var(--mono);text-align:center;padding:3px 0}.rail-folded-list.is-initials .rail-folded-cell{justify-content:center;gap:8px;display:flex}.rail-folded-initials{color:var(--muted)}.rail-folded-list.is-hairline .rail-folded-cell{padding:3px 0;line-height:1}.rail-folded-cell.is-selected{background:var(--inset);box-shadow:inset 2px 0 0 var(--accent)}.hint-bar{white-space:nowrap;color:var(--muted);flex-shrink:0;align-items:baseline;font-size:11px;display:inline-flex}.hint-sep{margin:0 6px}.hint-bar .link:disabled{opacity:.5;cursor:default}.shortcut-badge{border:1px solid var(--accent);border-radius:var(--radius-sm);background:var(--surface);color:var(--accent);cursor:pointer;z-index:8;padding:1px 5px;font-size:10px;position:absolute;top:50%;right:4px;transform:translateY(-50%)}.row.new-task,.inbox-chip,.badge-host,.hint-bar>span{position:relative}.rail-head .shortcut-badge{top:100%;right:0;transform:none}.split{flex:1;min-width:0;position:relative}.split-leaf{box-sizing:border-box;min-width:0;min-height:0;display:flex;position:absolute}.split.is-box .split-leaf{border:1px solid var(--line);border-radius:var(--radius-sm)}.split.is-line .split-leaf.has-left{border-left:1px solid var(--line)}.split.is-line .split-leaf.has-top{border-top:1px solid var(--line)}.split.is-rail .split-leaf{border-left:2px solid var(--line)}.split.is-rail .split-leaf.has-top{--mt:6px}.split.is-rule .split-leaf{border-top:1px solid var(--line)}.split.is-rule .split-leaf.has-left{--ml:8px}.split.is-rule .split-name{top:-8px}.split.is-box .split-leaf.is-active,.split.is-line .split-leaf.is-active.has-left,.split.is-line .split-leaf.is-active.has-top,.split.is-rail .split-leaf.is-active,.split.is-rule .split-leaf.is-active{border-color:var(--accent)}.split-name{background:var(--paper);color:var(--subtle);font:10px var(--mono);pointer-events:none;z-index:3;padding:0 4px;position:absolute;top:2px;right:8px}.split-leaf.is-active .split-name{color:var(--accent)}.term-scrolled{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);z-index:4;gap:12px;padding:4px 10px;font-size:11px;display:flex;position:absolute;bottom:10px;right:10px}.tone-info{color:var(--accent)}.term-search{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);font:12px var(--mono);z-index:5;align-items:center;gap:10px;padding:4px 10px;display:flex;position:absolute;bottom:8px;left:8px;right:8px}.term-search-input{min-width:0;color:var(--ink);font:inherit;background:0 0;border:0;outline:none;flex:1}.prefix-guide{z-index:40;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);width:min(560px,100vw - 24px);max-height:60vh;box-shadow:var(--shadow-popover);padding:8px 12px;font-size:12px;position:fixed;bottom:76px;left:12px;overflow-y:auto}.prefix-guide-head{justify-content:space-between;gap:16px;margin-bottom:6px;display:flex}.prefix-guide-body{columns:2 220px;column-gap:20px}.prefix-guide-group{break-inside:avoid;margin-bottom:8px}.prefix-guide-row{width:100%;color:var(--ink);text-align:left;gap:10px;padding:1px 0;display:flex}.prefix-guide-row:hover:not(:disabled){background:var(--hover)}.prefix-guide-row:disabled{cursor:default}.palette-list{margin:8px 0;overflow-y:auto}.palette-row{border-radius:var(--radius-sm);width:100%;color:var(--ink);font:12px var(--mono);text-align:left;white-space:pre;justify-content:space-between;gap:16px;padding:3px 6px;display:flex}.palette-row.is-selected{background:var(--hover)}.palette-chord{color:var(--accent)}.help-head{justify-content:space-between;gap:16px;display:flex}.help-corner{flex-direction:column;align-items:flex-end;font-size:11px;display:flex}.help-scroll{max-height:52vh;margin-top:8px;overflow-y:auto}.help-section{margin-bottom:10px}.help-title{font:700 12px var(--sans);color:var(--accent);margin:0 0 4px}.help-row{gap:12px;padding:1px 0;font-size:12px;display:flex}.help-cap{min-width:14ch;color:var(--ink)}.help-desc{flex:1}.pane-hint{white-space:nowrap;text-overflow:ellipsis;margin:0;padding:4px 14px;font-size:11px;overflow:hidden}.app-shell{flex-direction:column;height:100%;display:flex}.app-shell>.app{flex:1;height:auto;min-height:0}.daemon-banner{border-bottom:1px solid var(--warning);background:var(--inset);color:var(--warning);flex-wrap:wrap;align-items:baseline;gap:12px;padding:4px 14px;font-size:12px;display:flex}.daemon-banner span{color:var(--muted)}.taskops-hint{font:11px var(--mono);color:var(--subtle)}.taskops-path{font:12px var(--mono);word-break:break-all}.brief{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--paper);max-height:38vh;font:12px / 1.5 var(--mono);white-space:pre-wrap;word-break:break-word;margin:0;padding:10px 12px;overflow:auto}.notes{flex-direction:column;gap:8px;max-height:44vh;display:flex;overflow-y:auto}.note{border-radius:var(--radius-sm);text-align:left;flex-direction:column;gap:2px;width:100%;padding:6px 10px;display:flex}.note.is-selected,.note:focus-visible{background:var(--accent-soft);outline:none}.note-head{font:11px var(--mono);color:var(--accent);white-space:pre}.note-text{color:var(--ink);white-space:pre-wrap;word-break:break-word}.note-confirm{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--paper);flex-direction:column;gap:8px;padding:10px 12px;display:flex}.note-confirm p{margin:0}.row.is-moving,.project-head.is-moving{background:var(--accent-soft);box-shadow:inset 2px 0 0 var(--accent)}.project-head.is-moving:after{content:"move";font:500 10px var(--mono);letter-spacing:.11em;text-transform:uppercase;color:var(--accent)}.taskops-body{white-space:pre-line}.suggest{position:relative}.suggest-list{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);max-height:188px;font:12px var(--mono);margin:4px 0 0;padding:2px;list-style:none;overflow-y:auto}.suggest-row{text-align:left;width:100%;font:inherit;border-radius:var(--radius-sm);color:var(--muted);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;padding:3px 8px;display:block;overflow:hidden}.suggest-row.is-cursor{background:var(--hover);color:var(--ink)}.suggest-row.is-accent{color:var(--accent)}.newtask-legend{font:11px var(--mono);color:var(--subtle);margin:8px 0 0}.dialog-body+div>.dialog-body{margin-top:14px}.rail-nav{flex-direction:column;padding:0 6px 8px;display:flex}.rail-nav-row{border-radius:var(--radius-sm);color:var(--muted);text-align:left;align-items:center;padding:3px 8px;display:flex}.rail-nav-row:hover{background:var(--inset)}.rail-nav-row.is-active{color:var(--ink);font-weight:700}.mono{font-family:var(--mono)}.pg-top{justify-content:space-between;align-items:baseline;gap:16px;display:flex}.pg-top .page-title{margin:0}.pg-hint{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:11px;overflow:hidden}.pg-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.kb-page{flex-direction:column;gap:8px;display:flex;overflow:hidden}.kb-project{align-items:baseline;gap:12px;min-width:0;display:flex}.kb-project-name{color:var(--accent);white-space:nowrap;font-weight:700}.kb-project-path{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:11px;overflow:hidden}.kb-empty{margin-left:auto;font-size:12px}.kb-board{flex:1;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;min-height:0;display:grid}.kb-single{flex-direction:column;flex:1;gap:8px;min-height:0;display:flex}.kb-strip{gap:16px;font-size:12px;display:flex}.kb-strip .is-active{color:var(--accent);font-weight:700}.kb-lane{border:1px solid var(--line);border-radius:var(--radius);flex-direction:column;min-height:0;padding:8px;display:flex}.kb-single .kb-lane{flex:1}.kb-lane-head{font:700 12px var(--mono);color:var(--muted);justify-content:space-between;gap:8px;margin:0 0 8px;display:flex}.kb-lane-in_progress .kb-lane-head{color:var(--accent)}.kb-lane-parked .kb-lane-head{color:var(--warning)}.kb-lane-done .kb-lane-head{color:var(--success)}.kb-cards{flex-direction:column;flex:1;gap:8px;min-height:0;display:flex;overflow-y:auto}.kb-cards p{margin:0;font-size:11px}.kb-card{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);cursor:pointer;flex-direction:column;flex:none;gap:4px;padding:8px 10px;display:flex}.kb-card:hover{border-color:var(--line-active)}.kb-card.is-selected{border-color:var(--accent)}.kb-card.is-attention:not(.is-selected){border-color:var(--warning)}.kb-card.is-done .kb-card-title{color:var(--muted)}.kb-card-head{justify-content:space-between;gap:8px;display:flex}.kb-card-title{overflow-wrap:anywhere;min-width:0;font-weight:700}.kb-card-body{white-space:pre-wrap;overflow-wrap:anywhere;height:2.8em;font-size:12px;overflow:hidden}.kb-card-foot{justify-content:space-between;gap:8px;font-size:11px;display:flex}.dialog.kb-drawer{width:min(680px,100vw - 32px)}.kb-drawer-head{align-items:baseline;gap:14px;display:flex}.kb-label{align-items:baseline;gap:10px;display:flex}.kb-hint{text-transform:none;letter-spacing:0}.kb-body{font-family:var(--mono);min-height:160px}.kb-group{border-radius:var(--radius-sm);border:1px solid #0000;padding:4px}.kb-group:focus{border-color:var(--accent);outline:none}.kb-places{flex-direction:column;align-items:flex-start;gap:2px;display:flex}.kb-place{font:12px var(--mono);color:var(--muted);white-space:pre}.kb-place.is-active{color:var(--accent);font-weight:700}.kb-legend{font-size:11px}.kb-section{flex-direction:column;gap:4px;display:flex}.kb-section p{margin:0}.kb-event{gap:8px;font-size:12px;display:flex}.kb-age{text-align:right;min-width:4ch}.pg-list{flex-direction:column;gap:6px;margin-top:10px;display:flex}.pg-row{border:1px solid var(--line);border-radius:var(--radius-sm);cursor:pointer;align-items:baseline;gap:10px;min-width:0;padding:7px 10px;display:flex}.pg-row.is-cursor{border-color:var(--accent);background:var(--inset)}.pg-row .pg-name{white-space:nowrap;font-weight:700}.pg-row.is-off .pg-name{color:var(--muted)}.pg-row .pg-grow{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.pg-detail{border:1px solid var(--line);border-radius:var(--radius);gap:24px;margin-top:10px;padding:12px;display:flex}.pg-detail>div{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.pg-detail p,.pg-detail h2{margin:0}.pg-prompt{white-space:pre-wrap;overflow-wrap:anywhere}.pg-run{font-size:12px}.pg-response{white-space:pre-wrap;overflow-wrap:anywhere;font-size:12px}.pg-notice{margin:8px 0 0;font-size:12px}.pg-cron{gap:18px;padding:6px 4px;display:flex}.pg-cron button{border-radius:var(--radius-sm);text-align:left;min-width:5ch;font:13px var(--mono);border:1px solid #0000;flex-direction:column;gap:2px;padding:4px 6px;display:flex}.pg-cron button span{color:var(--subtle);font-size:10px}.pg-cron button.is-active{border-color:var(--accent);color:var(--accent);font-weight:700}.pg-cron:focus{outline:none}.pg-issue-line{align-items:baseline;gap:10px;min-width:0;display:flex}.pg-issue-line .pg-num{color:var(--muted);white-space:nowrap}.pg-issue-sub{color:var(--muted);gap:10px;padding-left:4ch;font-size:12px;display:flex}.pg-issue-sub .pg-grow{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.pg-issue{border-radius:var(--radius-sm);cursor:pointer;border-left:2px solid #0000;flex-direction:column;gap:2px;padding:6px 10px;display:flex}.pg-issue.is-cursor{background:var(--inset);border-left-color:var(--accent)}.mods-page{flex-direction:column;gap:12px;display:flex}.mods-empty p{margin:4px 0}.mod-pane{border:1px solid var(--line);border-radius:var(--radius);font-family:var(--mono);padding:8px 12px 12px}.mod-pane-title{color:var(--ink);margin-bottom:8px;font-size:12px}.mod-box{align-items:flex-start;min-width:0;display:flex}.mod-box.is-framed{border:1px solid var(--line);border-radius:var(--radius-sm)}.mod-text{color:var(--ink);white-space:pre-wrap;overflow-wrap:anywhere}.mod-text.is-bold{font-weight:700}.mod-button{border-radius:var(--radius-sm);font:inherit;cursor:pointer;background:0 0;border:1px solid;padding:2px 10px;font-weight:700}.mod-button:hover,.mod-button.is-cursor{background:color-mix(in srgb, currentcolor 18%, transparent)}.mod-text.tone-info,.mod-button.tone-info{color:var(--info)}.mod-text.tone-success,.mod-button.tone-success{color:var(--success)}.mod-text.tone-warning,.mod-button.tone-warning{color:var(--warning)}.mod-text.tone-error,.mod-button.tone-error{color:var(--error)}.mod-text.tone-muted,.mod-button.tone-muted{color:var(--muted)}.mod-field{align-self:stretch;min-width:0;max-width:40em;display:flex}.mod-box.is-row>.mod-field{flex:12em;align-self:center}.mod-field .input{width:100%;font-family:var(--mono)}.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre;font-family:monospace}.xterm .xterm-accessibility-tree>div{transform-origin:0;width:fit-content}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;z-index:11;background:0 0;transition:opacity .1s linear}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{display:none;position:absolute}.xterm .xterm-scrollable-element>.shadow.top{width:100%;height:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;display:block;top:0;left:3px}.xterm .xterm-scrollable-element>.shadow.left{width:3px;height:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;display:block;top:3px;left:0}.xterm .xterm-scrollable-element>.shadow.top-left-corner{width:3px;height:3px;display:block;top:0;left:0}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}.welcome{max-width:72ch;font:12px / 1.5 var(--mono);flex-direction:column;gap:10px;margin:0 auto;padding:28px 20px;display:flex;overflow-y:auto}.welcome p,.welcome dl,.welcome dd{margin:0}.welcome-title{font:600 14px var(--mono);color:var(--accent);margin:0}.welcome-steps{flex-direction:column;gap:2px;padding-top:6px;display:flex}.welcome-step{gap:14px;display:flex}.welcome-cap{color:var(--accent);flex:0 0 8ch}.welcome-env,.welcome-start{flex-direction:column;gap:6px;padding-top:6px;display:flex}.welcome-start .button{align-self:flex-start}.welcome-fix{flex-direction:column;gap:2px;display:flex}.welcome-docs{opacity:.7;padding-top:6px}
|
|
1
|
+
@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAASIABAAAAAACQQAAAQuAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVF4AdBEICoRkhAALIAABNgIkAzoEIAWFAAeBFAwHG2oHKJ6DceNW4lJEFHn9tEOE37LNsvkjHr7f739rn3u+OSrSxLQytE91Dw2PYtNVq3Qaw/vJ7fUBMdOj/u2ImB98cT5WUx9F13ZKt06mU7tG1sAYcM26yCRX4f/0904bmwq8hwkUUMTRX61pa9C3xlpAGYw1vOu8C2SBZZFlld7DAW82RJWmwYMI1AJCKBNCIASqdZGFmtPSNQRhMpR0EKjWTwm6z6sJ+4jqhxjovTinVdRpZaQjaQzAYjI8NgAKDJCokgunCn9oUQE8VZd/F//+v6P4F1U9gLr58yNI/dJX9BAshEoJbTDogz7ocKoUsPvES8UK/aQIUQgpGgECBVLkOEV6iASTYgNAPKdNXayhDPL7IJuAZnEYSZ0eOLc9i5Rv5/+lEi3sW/kfnCf/+fTe0sxS7CKLx5erRJkKOixEqQaoqrvx5HN4iz4VhX0gS6DjFIWUzn/fIXJRVFY1NFRVNVeFt+SYmrK6vCU6eJsnKnJj5HTESMTQZOTI3Y/tzr3rUcOsiRy/ciP50s3Mycgxmhz9GMXhjzVH30ut796NHP0UUa31/Zoa6vCH6iPvdIM0IRANaT60FablmZlZd+UKNFy9NrvnFGxb5NC2CRxR0/rIyF/WNn+35sv9r+tHVhkseuWGKkCPPh96+GXt8Lc/Sh24ujfjf+tNw1lZWreiPuHb/PSpyjdv2rf/++ZE5TSKjFdZxYsBvr1sEHl5STuHZqYR7jGYGvGBBdjcaB5bODY1GAxMjsd0wDMIzXAXODRd74DxNMtO4YuYHclgLQRzp9KlUmxptCwv9bYgvWGD2xBW7r9413fdJu+mxzvzAUYeeONQvZP4kgfqZle4jhH/MWh+UbxgtJdrLdXLymNL53PRU0D3Q6FcXTfGqGcul6vrqhgLGAVSv+IVIfZOHpu+mlLqSlnj903j8mazXDsba/wbxhS/4Oubh1c5/uXDgt4j5KtnGEy5BIJHo0ur+jD+r2qCkuP1aRVM8EpUoRYSJyqNRA38uwDvHBNo0AejO2Z+ZYLLal1QiFyFh1EDQOgSCSCpjwwKU8yDbIjroEwne0G5Qca49cYp4AlqtQNZfWTQoFb1tRpFYAmRD+HXTkV4uQhG2bg4OKmyoypAsUGtWgQXyFxYrkpODeUxvGqIZA61erXo0sFG1UBGuPgpuon8RNUG2DhovAjZCBuZwtXrU3mQGki9+pm0eVZAXoWxLWTQoYHBPrJR4WunNxIFbCHfkTyPK+sqxjxDmGArZvf79JGJ3GwEqjwc7a7NIrl/7bJ7Nzu4+n1Ow6shEPnUrtVo7cnd5Wi5qCUbBIQbNKCP95FMCSZylEV5VCiiMqqiOmrKZ/I/C0gI1fyuulVcM2E1r4MhtcV/fbCD+HwEvVzH1dGNAzFE0FTbKzyQz3gootrNbN2a4PuG0j0JOgE=)format("woff2"),url(data:font/woff;base64,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)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2)format("woff2"),url(/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2)format("woff2"),url(/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,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)format("woff2"),url(/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(data:font/woff2;base64,d09GMgABAAAAAASAABAAAAAACNgAAAQlAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVEwAdBEICoRkg3gLIAABNgIkAzoEIAWEaAeBFAwHGzgHSJ4DbjN9OmtkIy0becnT/RjJ4uGfw99974/GXrhoTCqLok66NY3jTloEUdrmwCevn/Ls30xSpFlZ6UJMrW+fTNwAEdSuvSzCRANvEgnjUmw8swT+87+w7I/7qb8XlIB7NpGBjXiUjRX0b7ZpJ8+orRLzvGhWYCMdAU3BbRdPuqOeKAXuRKAWEEJJCIEQqNbLD9osq2kBviL8A4Fq4yLgAa+6DNaiAwcYOrqYHfgQcMgL3AFgG4fHHqREEUBSxUtmBfzNWxXADfviy8Kff7dA4QfFBQG6fnoX5Dh+gEEcIVRKtMIYhc/kCgsCDiarQY4QWpEKQoYTAAIJUcaHAHIXIN9BooBWhEAr0j7QzAkh1RnEWOY4wuRW8uX/f5o5W8gXcjriOUb9z/wjACRuWaWrpKIyLMQ/DUDN/TT+ErgHRpPBIRQrKCcZCvxBBCBEkSD4lKMjRblQlCvpQHPsSZE9R6K2o/vpXkGboKWbbltxx2feLT+a6KJb5293n7vTt53uwOzUO4gYc5eedhvS+a1bbdNuIiSA89cuGo25IZh6DXrJJIIUUibFUG0zt+ijO+cvnj8fjVm4cKlvN90DwzrdMmy8H9GjDyv90Xz2W10PVj3oTY7LLfwfmxMHoef+8n33R0duOxF3LPCYFXtymWNdcLBD3VF4S91+GWf8c9k7sZC6fPpnbENnCmayerBNki0ZbFUXiHV/wkxWklGmydCkaR5o0oZnlj3oSVdnZKjTITaXStOyWGYakzUgTSt1gvSs/otJL1FkzE/3e+aXvj7n+TOv9HkZ6evS4e3OXafCx8iqJfNGpQLM7rkt0ppRJ8N3gd1IjHLaROM0cLkhdf2NQjZ4bmjo2mBWKJ4CPA4IZXX9hFlPBnhxWhXzgBGQ88QeRD3j1/AD5a/JxMnL5gK5deaC2H7HvK98gngBbzfWLKD0g2ufeA7nMsQepBwDgpdhy90BzC+8DSCers8O6KKloYn0RCtKo9EM9LsAd7AgNBhFGEAsvl4K1LpCiCIF3IZHFUKvX5AqfUPBgkO+ovHpUNJtOJSN6hDWWxAigkCt9hbEXdaOHLvI6lM5gQA79LRYOpUsWBpKYu2klOQULGlGCwOzHIkSmYmZKBlQrlmCQ0mDv5SeiVyiemVqVJGyEDJhKemY1dLT0YsnpKch0UbKxExJTydIigQpkiUvYA3SVFDqFH2uNggh343VmPs2ycX0DIYwPYTigMak5AjS0ohI8zmoo4EJwypS4iVcDOuDuvRMgytHPa5LTjnoc1YiCcT0tBI3qjXxqqFomJf2PylAOHMDRp1HGBaDQCTiIC7iQSH4iEICRHMZkUlqk/KsOmVSGlOK7NIseRNZFp3NkbNaLateTmKScHGTAyu2WqQf6lD8rMNg1+lKTcpwkfvQ/7eRMwAA)format("woff2"),url(data:font/woff;base64,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)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/jetbrains-mono-cyrillic-700-normal-BWTpRfYl.woff2)format("woff2"),url(/assets/jetbrains-mono-cyrillic-700-normal-CEoEElIJ.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/jetbrains-mono-greek-700-normal-C6CZE3T8.woff2)format("woff2"),url(/assets/jetbrains-mono-greek-700-normal-DEigVDxa.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(data:font/woff2;base64,d09GMgABAAAAAA+YABAAAAAALJQAAA84AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnAbhXAcghYGYD9TVEFUTACDBBEICrA8p1ILgjgAATYCJAOEKAQgBYRoB4xODAcb3iVFRoaNAwho/vmJoixsfqj4v07g5OqncaqIUAYqEI6gCkZ0qK4wEp3O9K+ySRaPPWftnd0mjZ8MzaNUaT+LsTAfnt9Wf+57KJFiNgZKlNHoICIwI21jYAViwejIjPZsu9HtRqQ77o8Mg+c/7tNzXzaRbQGM7gKhXRPOFLQiNdiAagUv6MdINrw+CRbhCE4hLJogyLSeshN+VfZv5VL37H77gu4BKGHwW0dphEhUGp7GwmyG25Sd6RBu5KJfsOTNfCWUAfB19+PmRqWEQqiWGEn0j5jlvf3H/82VdmZ/psCo0P8iGd/ns5PZJHNZaHmxwLjtAeWugApQATsgkmXNkhyjrpK1usLr8vD90V5b7skee5GGy7ZRGGe7LuOFEX8C/Wam5iygbneagmmYgiiqXH2XJK/cPwoEwAMAAEWEECHEEhHJUhHppIhiWkSJckQlI6KZDeHgQnj0IwZMIKbMIBYsoAWF0Jatom3YRiMAjhwq1OE0OyB43IEJCDAAOAmAzKQqsADEYmi+jAgWUtf5lSpVPIM1Nn604UB+8+kcMZwH72OOZ7davZk9tJtVRIsSnvNE9OrEH4KBFbrHbRCqNAG9QZJRZx4JZOWpDpoASo9SQw/gKVmLUOG9GwEgggRIhnxQghb0YAILtB2vjwDQBfAAbBBOgDCDGsrXAsoFuCJEIsjOMrlKUYcQBAlIVIQojHc9ABPGya9gqHNSXCJMDlD3Z3wKAuLiUQC0SEPMzAT4UyMBlBQcNCIHcR+AACLQAGIXIUYADBTKeavwOZyQYKGMYIZzX7A6ZNOWbXvWQMXMzK2SH/na6PFMLAmFmBY26NyXnbMijFGe2SsCqPfxBDR7eyenVKkNFLCda82A0wDKIU07AHfgj7/04fGV/XmSogPk478PtZwDkCECWWYIiAHJmeT1DgUIgH+Km4QIQcRgZFyeiihY1OngXWovUMdA/fNKcMMQjXghRqasR8zAwMDH169zhzfQJEqBYXd6YiE0g2bT2ft/Mx4+Ke0hKCKSb8gdHl9AnyULcMdjfjia13+zDnocBY9C7g66gB//BI6fJEWaDFlyAEBW+x9YgFZJpEkqF60JEt3khixYIdBIyIhNj6sBzyl8Bhz1GKpEqsFUi6VOhGrxzkjQIpGNWLMYFrGs4pwWzSyFUzKHHJ1ydUnnkalNlnbZOmRolcerQK9CfaT65etRbIDMIIVhKqPUxmiMUxpRalqJKWX8ys0gSNMGAG4GgKwCOoDxChGfMH6g+wEAjWrgVNWR6HK6JmKmSqMyAnp89GkbFlUvxHn9DBRSJkbJ0WO3bZpmsWFBLpPLlUFplsvJC71sAwTtTKa/ewc0gsrMnTccBDHoBgVfgvuFQAl01Npfijtuu2KxaV/sineuGHfjbJgPBiYcfeYkYs9WM01qZv/3+L2fajEo5gznhondV80YlkzdVH02jAjOYSmcqhjohBj9veu6vAd5supT4jsmdnxiYCKE3dpEmKOqu8w5Y56a38bfFjPXHJbTiukP33yJU85ikrZ7dY8UV9XnvSYbERMVfbG1/4mgp4EtarXUHun+zExY6HhGihCEK2aBGSSICBmMlU68XuvHPfmG6FUGYVCEAL8mvYgQyDvlRLttv/PGjL3k1wdr1zVo6ullSK+O5c85/L1Tzbd8ictJGCTir/jjf3onzjNYWBMJtX2OmDHtcybOYVLNkk9/hdYy+Nbc0qHV5aIeAypuMcjzee9Gk3yrPYM+/gMOqjAUWA8kv7LHPCmhDCYPubjOkJvrCCWtPVSvIRpqtlC9mD550fHy8lxurkM2XTQzDK2/noSvs1zSDTGVD80yI1EMHnVzHd5F8FXUe/gUZzB1BZMYGk7XOdnjWA9XmR4nJPJFREI1169CzIvjJCE/kj4ID0/l3n7uvvs427vpF3n23ntXdbqFoJBIY3QZ8qMcTudTbju456BTWVRRcyItL0L285fufOHSSt4Tb17dFdVxu9K37hBaMzMF1tfANroT3N8aDy6ZxkoqfIaoUxUDY6Wmdn+H7lAbpTnUdcBz8Nx4xasJYwnfVoyjbeKa42sm7ml3BSnbMKDRefXV+kI9BQyNvr7MdTXE97szrtapqzVatVqrqVYbsDrgzI0Si5oHLDpDTfna1PNfQcoeXQj4OMtsTZlK2aRhL3N88wG8sOpUDTrXdy9XHvKP7G8+vzB9+EmivIb9ycTheekRZONPbGdPq7ll1N23Jc+vLC6wW4Msy2J7ty/Q75pd9MaUV7U2ZnZq9Vpp/Ybk+5w8Mw7Ztt5pb2tPz7S9wWqu30ulz3+7dBAcTtmrt5rjRxWlaqu6VKHI01g1eYxPHf0OFLENg9pSb912Xan3Nmg4NdDd+D57XnmwpLByNMQ3BB3RDWllHTrdUlnszwjM/tfr759Of+YhP6Qsw4Cm1Kvf1JduDik1t8DRdkwlH2lT61MpZ7Wbmjks7jmV20B85NSCWX/n+RshZQ/PB3yuJae2VCE3ap1LLt9iAKaPW5fa1N8UFv5S3TZqfuqflTH6Z/y9fdN+3Pu0+YuPmVu+hDlhrabBOce57oRV1iUcKm29k94sb8+kvcFq0a8Ru+1y/3NZx/sdv/qvUqJKUEmUilx1gjq36GqHyoE7wplzmV1MVgs8K0vuD2lY8lzd4TkJnSLiVmd2tkd28Mbq8M769A6GVjd3Ao1/odl4vhaQnrV6W/Q9mfdnZ9+f2aPvbsH0Snrvjb0iPkRJlkzlxWKpsOBYlHKlZ3Fu1+vx4j+ryV/wolPPmIelbZLMUgukP5E8l5mVlmaFkqLzs3O2kKXd8rY3omYKcwrzsgvLRSOvKSwHit/KsnaXGa9f5vhsSRlk0ZXl8xNek/b7n3HFqVZLt/yW3PSy4vJQ0nOn+0xVXcmf5hV8mtxVJWzO5Vv+9UBw/X6u4Fawbv5TWNt671Me50OB3uQsDmULH72ZrcwVtvSM35H8miTvs+SOKjoV1r3p9pvsIj6EqZZU+Q2yDPt2ffS0lAxLinwTt/97dmd5aecR/7wLLTYZm/yf/zscaG1x54eHuu/fv3udw/2NoKHZIQ/lCp5LU3RLPXI8rUm3XWcbK0+8JT6XbaOlUGqiJc6ufUz/vQuu2RgMBCYDjcFGe2OVM0WRVZV5JsVRZWs0QvQV794PpQ96AxOeAIRPzyUssDi8Rn1fdleK8MVgnGnY5mZd4NWYykucsffEW+PviXWWNJXXFq6lPnySirw/8SItkVJlUdrNJ1p67Ewk/n1jKHBuKvBIcKo7S1FvBALLY4HP+J0k/X1k8EGuKLbhVHtBXDb/oeuvv7dzJeb16auT9a9aGxx+7soMkrp/LFASEEAXq2lCoXUAuYYUENs6NFnCHLwb91rg6/D1Ca/Z4BvwjeymGaJ0GrGHFYjwUG1FheNen0CJ8sVwK7gB+Mak3BSFt6yNICTZwpGUfUvElQ4knJaPkqaTAZyG0wSyhzlGKpDYVmMglALZL3xn5K9IHP9SijyAwV75a07ALVV45EHN2PEzLFfkDIYAuuxhjmGAdVgHFbalCPTfASxlxIob1tgugvBl+HJyBTEPZyNs8JX4qnm4GlHWCsUz2TsYiskDGMAmZooiCq/AMrX3WmJRDEssC71DpNi1YDx3Vg4obg9HMIDdzD3LKB3QbQvFsFAK5Ax+N2NUluV/KT4PYDAM2UJi5Az/oyCC3+osjNE/YJlODushjAclp0Wcn+2zr7BF3He1Pqn54dG/jv58cvufjv+//BcAZkBp6ec8cpjmJF2cNRLaULMyVm2YZacOIr+BJ5p6qIB5mIezV6BSySV69tn/EtqoHTkOkrZMORbkRMh4sjk1UhEXOThDNVlXdaJ+wdY+LHWUzPMWsgts3/NSdO0HLKDCa2QX2D68REUyXu2vow6QCVDhAttXQUsjfDoK9Kr46aIA24OnF9+lV1k2Ekf+KvpR94uqTpSCItUwRFMDFTMDM3BIMTSVCsEulBbTsTD7ZbTYywywahmLhJgzDEbljIq8ajpqETW1Imoeqw7Fonkx+SVo5sg9RkeRbNQua2DVEEv5UqIOqCgJiFmFC6xaxdUQQOkY9m9t33cLK//JounfAPx9ed9NOPeDz/8GzknULn0IgkhQAAJ8CTywPOAcZZMOwVm+hWWb07CyKad+PXVq+5uNTt3iG0YpNdavoU7mhmFoEM11k2CcvxHwxAHuxpsYxhJWsIKPcYBxOeOytbjPv1QZDIPft7zfHQHcrBhDCy9KgCyagjzX+VO02QD2EleXJ1L8rzyF5W/laTp73RgkBuUjJDlbPlIOjxREKVkxJKESZyORxu2IMMg4UuQfDrCZNK7HhCYBr9oxw/q4+QYNGhJw1KryKTPKyQ83o4/fsCkBM2QIDBtjORmSg6pqTzMwM/GV1vPrkRPa0haTJmQx7W3SmH4uPn4THn5WGVRkVJSUe18GZciYPkpW1Jbenb3Uuhd9IlmPYVMW+beC52gpnEAGh0x9s5Hr3PoMf30c4dNnsq0zu6XbSX798/zt3Q4a1q1n9e67fa/PK3mqd+WLPRSgnMs9QQUg/gluBuT4AEVowiARJJIwCYuwCYdwCY/wiYAIkR+RKGLRYsSKE19REiRKSpVkKVKlSZchU5ZsOXJJ5FWafAUKSRUpJiOnqDJKKmqaGqKlU6JUmXIVKlWpVqNWHQJj9Oo1OMWgkVFT+0yambPFwuq0M1rY2Dk4ubh5tOZJm3YdOnXp5tWjt4706eczEJ1BQ4aNGDVm3IRJU6b5zQiYNWfegkVBIWctWXbOirDV512was26DZu2bNtxca0bHMaXcXzezJHX3kuGg3DQgmZxkgYvcOSGh23/NFj4ueUA4aDJSDpssvpMRk+n+Wo0RsbVQMJoY9QGnfrwebY9bDShBz6WDT/30EO3PPy0qFHIQaKl+xafPvqc8G9Co9//BbLR2+fel4z6L4qEgBCsAY6gGKhhEsncCkBIsGQUEy5Z86Wi+asBUQhGcMVJuGUQTgJhxSI8UxDDlSTRuYRFf0TV6k8INXywb8Fou5mKewIlT0U69vFXRR7T/eH55NcVfcwTnh7vIXxO87PtdtkfbOMPudH29CdL1b76OJVfKzkETa23NlID/Vyyh32eD0HaB0WeEl85A0PlLU3DkD1ZS6cTFwkYYsUIxRhhiJWdFJNo46JigrC/jgoTcZop6gjrqICM/O9k7YngMgA=)format("woff2"),url(/assets/jetbrains-mono-vietnamese-700-normal-BDLVIk2r.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/jetbrains-mono-latin-ext-700-normal-CZipNAKV.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-ext-700-normal-CxPITLHs.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/jetbrains-mono-latin-700-normal-BYuf6tUa.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-700-normal-D3wTyLJW.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--paper:#141413;--surface:#1a1917;--inset:#2b2a27;--line:#3a3835;--line-active:#5c5853;--ink:#eae7df;--muted:#a9a39a;--subtle:#6b665f;--accent:#cc785c;--accent-soft:color-mix(in srgb, var(--accent) 14%, transparent);--hover:color-mix(in srgb, var(--ink) 7%, transparent);--shadow-popover:0 8px 24px #00000052, 0 2px 6px #0003;--focus:var(--accent);--info:#61aaf2;--diff-added:var(--success);--diff-removed:var(--error);--diff-added-bg:#9aca861a;--diff-removed-bg:#d475631a;--error:#d47563;--success:#9aca86;--warning:#e8c96b;--mono:"JetBrains Mono", "IBM Plex Mono", "SF Mono", Menlo, Consolas, ui-monospace, monospace;--sans:-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--radius:8px;--radius-sm:6px;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--paper);color:var(--ink);font:13px / 1.4 var(--sans);-webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;padding:0}button:focus-visible,.input:focus-visible{outline:1px solid var(--focus);outline-offset:1px}:root{--scroll-thumb:color-mix(in srgb, var(--subtle) 45%, transparent);--scroll-thumb-hover:var(--subtle);--scroll-thumb-active:var(--muted)}@supports not selector(::-webkit-scrollbar){*{scrollbar-width:thin;scrollbar-color:var(--scroll-thumb) transparent}:hover{scrollbar-color:var(--scroll-thumb-hover) transparent}}@supports selector(::-webkit-scrollbar){::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-corner{background:0 0}::-webkit-scrollbar-button{display:none}::-webkit-scrollbar-thumb{background:var(--scroll-thumb) padding-box;border:3px solid #0000;border-radius:999px;min-width:32px;min-height:32px}::-webkit-scrollbar-thumb:hover{background-color:var(--scroll-thumb-hover)}::-webkit-scrollbar-thumb:active{background-color:var(--scroll-thumb-active)}}.xterm .xterm-scrollable-element>.scrollbar>.slider{background-clip:padding-box;border:3px solid #0000;border-radius:999px}.xterm .xterm-scrollable-element>.shadow{display:none}.muted{color:var(--muted)}.error{color:var(--error)}.wordmark{font:700 14px var(--mono);letter-spacing:.02em;white-space:nowrap}.bracket{color:var(--accent)}.kicker{font:500 11px var(--mono);letter-spacing:.11em;text-transform:uppercase;color:var(--muted);margin:0}.kicker.is-accent{color:var(--accent)}.app{grid-template-rows:1fr auto;grid-template-columns:minmax(220px,280px) 1fr;height:100%;display:grid}.rail{border-right:1px solid var(--line);flex-direction:column;grid-row:1;min-height:0;display:flex}.rail-head{justify-content:space-between;align-items:baseline;gap:8px;padding:14px 14px 10px;display:flex}.rail-body{flex:1;padding:4px 6px 12px;overflow-y:auto}.project-head:not(:first-child){margin-top:18px}.rail:focus{outline:none}.rail:focus-within .is-cursor{box-shadow:inset 0 0 0 1px var(--focus)}.rail-search{gap:4px;padding:0 14px 8px;font-size:12px;display:flex}.rail-search .caret{color:var(--accent);animation:1s step-end infinite blink}.rail-search .muted{margin-left:6px}@keyframes blink{50%{opacity:0}}.project-head{font:700 12px var(--mono);color:var(--muted);align-items:center;gap:8px;margin:6px 8px 4px;display:flex}.project-head .rule{background:var(--line);flex:1;height:1px}.row{border-radius:var(--radius-sm);text-align:left;align-items:center;gap:8px;width:100%;min-height:26px;padding:3px 8px;display:flex;position:relative}.row:hover,.row[data-menu-open],.tab[data-menu-open]{background:var(--hover)}.row.is-selected{background:var(--inset)}.row.is-selected:before{content:"";background:var(--focus);border-radius:1px;width:2px;position:absolute;top:4px;bottom:4px;left:-6px}.tab-row{color:var(--muted)}.tab-row>.glyph{margin-left:18px}.tab-row.is-selected{color:var(--ink)}.glyph{width:1ch;font-family:var(--mono);text-align:center;flex:none}.row-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.chips{font:11px var(--mono);flex:none;gap:6px;display:flex}.tone-accent{color:var(--accent)}.tone-muted,.chip.muted{color:var(--subtle)}.tone-attention{color:var(--error)}.tone-warning{color:var(--warning)}.tone-success{color:var(--success)}.tone-ink{color:var(--ink)}.empty{font-family:var(--mono);padding:16px 10px;font-size:12px}.empty p{margin:0 0 4px}.workspace{flex-direction:column;grid-row:1;gap:6px;min-width:0;min-height:0;padding:8px 10px 8px 8px;display:flex}.tab-strip{font-family:var(--mono);align-items:center;gap:2px;min-width:0;font-size:12px;display:flex}.tab{border-radius:var(--radius-sm);color:var(--muted);white-space:nowrap;align-items:center;gap:6px;padding:4px 10px;display:flex}.tab:hover{background:var(--hover)}.tab.is-active{color:var(--ink);background:var(--inset)}.tab-index{color:var(--subtle)}.tab.is-active .tab-index{color:var(--accent)}.tab-strip-title{color:var(--subtle);text-overflow:ellipsis;white-space:nowrap;font-family:var(--sans);margin-left:auto;padding-left:12px;overflow:hidden}.pane{border:1px solid var(--line);border-radius:var(--radius);background:var(--paper);flex:1;min-height:0;display:flex;overflow:hidden}.placeholder{font:12px var(--mono);color:var(--subtle);margin:auto}.term-pane{flex:1;min-width:0;display:flex;position:relative}.term-host{flex:1;min-width:0;padding:6px 4px 4px 8px}.term-host .xterm{height:100%}.term-notice{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);font:11px var(--mono);color:var(--muted);padding:5px 10px;position:absolute;bottom:10px;right:10px}.term-notice.is-error{color:var(--error)}.status{border-top:1px solid var(--line);background:var(--surface);font:11px var(--mono);color:var(--muted);grid-column:1/-1;align-items:center;gap:8px;padding:4px 12px;display:flex}.status .spacer{flex:1}.usage{white-space:nowrap;gap:16px;display:flex;overflow:hidden}.tone-ok{color:var(--success)}.tone-warn{color:var(--warning)}.tone-crit{color:var(--error)}.dot{background:var(--subtle);border-radius:50%;width:6px;height:6px}.dot.state-open{background:var(--success)}.dot.state-retrying{background:var(--warning)}.link{color:var(--accent)}.link:hover{text-decoration:underline}.connect{place-items:center;height:100%;padding:24px;display:grid}.connect-card{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);flex-direction:column;gap:12px;width:min(460px,100%);padding:24px;display:flex}.connect-card p{margin:0}.input{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--paper);width:100%;color:var(--ink);font:12px var(--mono);padding:8px 10px}.actions{justify-content:flex-end;align-items:center;gap:14px;display:flex}.button{border-radius:var(--radius-sm);background:var(--accent);color:var(--paper);font:600 12px var(--mono);padding:6px 14px}.button:active,.row:active,.tab:active{transform:scale(.97)}@media (prefers-reduced-motion:reduce){.button:active,.row:active,.tab:active{transform:none}}.machine-chip{color:var(--subtle);white-space:nowrap;font-weight:400}.row.is-stale .row-title,.row.is-stale .glyph,.project-head.is-stale{color:var(--subtle)}.remote-notice{font:12px / 1.5 var(--mono);text-align:left;flex-direction:column;gap:8px;padding:14px;display:flex}.overlay{z-index:20;background:#0a0a098c;place-items:start center;padding-top:12vh;display:grid;position:fixed;inset:0}.dialog{color:inherit;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);width:min(440px,100vw - 32px);max-height:76vh;box-shadow:var(--shadow-popover);flex-direction:column;gap:12px;margin:0;padding:18px 20px;display:flex;position:static}.dialog.is-wide{width:min(620px,100vw - 32px)}.dialog-head{justify-content:space-between;align-items:center;gap:12px;display:flex}.dialog-close{border-radius:var(--radius-sm);width:24px;height:24px;color:var(--muted);place-items:center;margin:-4px -6px -4px 0;font-size:18px;line-height:1;display:grid}.dialog-close:hover,.dialog-close:focus-visible{background:var(--inset);color:var(--ink)}.dialog-body{flex-direction:column;gap:12px;min-height:0;display:flex;overflow-y:auto}.dialog-body p{margin:0}.field{flex-direction:column;gap:6px;display:flex}.textarea{resize:vertical;min-height:72px;line-height:1.45}select.input{appearance:none;cursor:pointer}.chips-row{flex-wrap:wrap;gap:6px;display:flex}.chip-button{border:1px solid var(--line);border-radius:var(--radius-sm);font:12px var(--mono);color:var(--muted);padding:4px 10px}.chip-button:hover{background:var(--hover)}.chip-button.is-active{border-color:var(--accent);color:var(--ink);background:var(--accent-soft)}.choices{margin:0;padding:0;list-style:none}.button.is-danger{background:var(--error)}.button:disabled{opacity:.5;cursor:default}.menu{z-index:30;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);min-width:200px;max-height:calc(100vh - 16px);box-shadow:var(--shadow-popover);transform-origin:0 0;flex-direction:column;padding:4px;animation:.12s cubic-bezier(.16,1,.3,1) menu-in;display:flex;position:fixed;overflow-y:auto}@keyframes menu-in{0%{opacity:0;transform:scale(.96)}}@media (prefers-reduced-motion:reduce){.menu{animation:none}}.menu-item{border-radius:var(--radius-sm);text-align:left;justify-content:space-between;gap:24px;padding:5px 10px;font-size:13px;display:flex}.menu-key{font:11px var(--mono);color:var(--subtle)}.menu-item.is-selected{background:var(--hover)}.menu-item.is-selected .menu-key{color:var(--muted)}.menu-item.is-danger{color:var(--error)}.menu-sep{background:var(--line);border:0;flex:none;height:1px;margin:4px -4px}.menu-chevron,.menu-check{font:12px var(--mono);color:var(--subtle)}.menu-check{color:var(--accent)}.menu-item.is-open{background:var(--hover)}.menu-item.is-selected .menu-chevron,.menu-item.is-open .menu-chevron{color:var(--ink)}.menu-sub{min-width:160px}.menu-item.is-danger.is-selected{background:var(--error);color:var(--paper)}.menu-item.is-danger.is-selected .menu-key{color:inherit}@media (forced-colors:active){.menu-item.is-selected{outline-offset:-2px;outline:2px solid highlight}}.toasts{z-index:40;flex-direction:column;gap:6px;display:flex;position:fixed;bottom:34px;right:14px}.toast{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);max-width:420px;color:var(--ink);font:12px var(--mono);text-align:left;cursor:pointer;overflow-wrap:anywhere;padding:7px 12px}.toast.is-error{color:var(--error)}.inbox h2.kicker{margin-top:4px}.inbox-hints{color:var(--subtle)}.cards{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.inbox-card{flex-direction:column;align-items:stretch;gap:2px;padding:6px 10px}.inbox-line{align-items:baseline;gap:10px;min-width:0;display:flex}.inbox-badge,.inbox-age{font:11px var(--mono);flex:none}.inbox-age{color:var(--subtle)}.inbox-sub{font:11px var(--mono);color:var(--muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mono{font:12px var(--mono)}.inbox-chip:hover{color:var(--accent)}.new-task{width:auto;color:var(--muted);margin:4px 6px 10px}.tab-new{color:var(--subtle)}div.placeholder{flex-direction:column;align-items:center;gap:12px;display:flex}div.placeholder p{margin:0}.settings{grid-template-columns:140px 1fr;gap:18px;min-height:360px;display:grid}.settings-nav{border-right:1px solid var(--line);flex-direction:column;gap:2px;padding-right:10px;display:flex}.settings-tab{text-align:left;border-radius:var(--radius-sm);color:var(--muted);padding:5px 10px}.settings-tab:hover{background:var(--hover)}.settings-tab.is-active{color:var(--ink);background:var(--inset)}.settings-body{flex-direction:column;gap:18px;max-height:60vh;display:flex;overflow-y:auto}.settings-group{flex-direction:column;gap:8px;display:flex}.settings-group p{margin:0;font-size:12px}.settings-rows{flex-direction:column;display:flex}.engine-row{border-bottom:1px solid var(--line);align-items:center;gap:10px;padding:6px 4px;display:flex}.engine-check input{accent-color:var(--accent)}.engine-main{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.engine-detail{text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.engine-actions{font:11px var(--mono);gap:10px;display:flex}.prefix-hud{z-index:40;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);min-width:220px;color:var(--ink);box-shadow:var(--shadow-popover);padding:8px 12px;font-size:12px;position:fixed;bottom:34px;left:12px}.prefix-hud-head{margin-bottom:2px}.prefix-hud-row{color:var(--muted);gap:12px;display:flex}.prefix-hud-key{min-width:3ch;color:var(--accent)}.dialog:focus{outline:none}.page{border:1px solid var(--line);border-radius:var(--radius);background:var(--paper);flex:1;min-height:0;padding:14px 18px;overflow-y:auto}.page:focus{outline:none}.page-title{font:700 14px var(--sans);margin:0 0 6px}.page-group{margin-top:12px}.page-group .project-head{margin-left:0}.wt-row{border-radius:var(--radius-sm);padding:5px 8px}.wt-row.is-cursor{background:var(--inset);box-shadow:inset 2px 0 0 var(--accent)}.wt-line{align-items:baseline;gap:8px;font-size:13px;display:flex}.wt-line.mono{justify-content:space-between;font-size:11px}.wt-branch{font-family:var(--mono)}.wt-path{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.page-hints{margin-top:16px;font-size:11px}.page-head{justify-content:space-between;align-items:baseline;display:flex}.update-versions b{margin-right:10px}.update-actions{flex-direction:column;margin:10px 0;display:flex}.update-action{border-radius:var(--radius-sm);text-align:left;gap:12px;padding:4px 8px;font-size:13px;display:flex}.update-action.is-cursor{background:var(--inset);box-shadow:inset 2px 0 0 var(--accent)}.update-label{min-width:14ch}.update-chip{color:var(--warning)}.release-notes h2{margin:14px 0 4px;font-size:13px}.whats-new-body{max-height:55vh;overflow:hidden auto}.whats-new-keys{margin-right:auto;font-size:11px}.release-md{overflow-wrap:anywhere;font-size:13px;line-height:1.55}.release-md h3{font:500 11px var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:12px 0 6px}.release-md h3:first-child{margin-top:0}.release-md ul{margin:0;padding-left:18px}.release-md li+li{margin-top:8px}.release-md p{margin:0 0 8px}.release-md a{color:var(--accent);text-underline-offset:2px;text-decoration:underline}.release-md code{border-radius:var(--radius-sm);background:var(--inset);font:12px var(--mono);padding:0 4px}.files{outline:none;flex-direction:column;grid-row:1;min-width:0;min-height:0;padding:10px 6px 8px 0;display:flex}.files:focus-within .files-tab.is-active{color:var(--accent)}.files-actions{font:11px var(--mono);justify-content:flex-end;gap:14px;padding:0 8px 8px;display:flex}.files-tabs{gap:4px;padding:0 4px 6px;display:flex}.files-tab{border-radius:var(--radius-sm);font:600 12px var(--mono);color:var(--muted);padding:3px 10px}.files-tab.is-active{color:var(--ink);background:var(--inset)}.files-scope{font:11px var(--mono);color:var(--muted);flex-wrap:wrap;gap:4px 10px;padding:0 8px 8px;display:flex}.files-body{flex:1;min-height:0;overflow-y:auto}.file-row{min-height:24px;font:12px var(--mono)}.files:not(:focus) .file-row.is-selected:before{background:var(--line-active)}.status-M{color:var(--warning)}.status-A,.status-untracked{color:var(--success)}.status-D{color:var(--error)}.status-R{color:var(--accent)}.placeholder-line{font:12px var(--mono);color:var(--subtle);margin:12px 10px}.tab-preview{cursor:default}.tab-close{color:var(--subtle);padding:0 2px}.tab-close:hover{color:var(--accent)}.term-slot{flex:1;min-width:0;display:flex}.term-slot.is-hidden{display:none}.preview{outline:none;flex-direction:column;flex:1;min-width:0;display:flex}.preview-body{min-height:0;font:12px / 1.5 var(--mono);flex:1;padding:6px 0;overflow:auto}.diff-row{white-space:pre;cursor:default;grid-template-columns:4ch 4ch 2ch 1fr;gap:0 8px;padding:0 12px;display:grid}.diff-row .gutter{color:var(--subtle);text-align:right}.diff-row .code{min-width:0}.diff-row.kind-add{background:var(--diff-added-bg)}.diff-row.kind-add .sign,.diff-row.kind-add .code{color:var(--diff-added)}.diff-row.kind-del{background:var(--diff-removed-bg)}.diff-row.kind-del .sign,.diff-row.kind-del .code{color:var(--diff-removed)}.diff-row.kind-hunk,.diff-row.kind-meta{color:var(--subtle)}.diff-row.kind-file{color:var(--ink);border-top:1px solid var(--line);margin-top:8px;padding-top:4px;font-weight:700}.diff-row.is-noted .sign{color:var(--accent)}.diff-row.is-noted{box-shadow:inset 2px 0 0 var(--accent)}.preview:focus .diff-row.is-cursor{background:var(--accent-soft)}.diff-row.is-cursor{background:var(--inset)}.preview-footer{border-top:1px solid var(--line);font:11px var(--mono);color:var(--muted);gap:10px;padding:5px 12px;display:flex}.preview-footer .spacer{flex:1}.pref-row,.pref-cycle,.pref-readonly{text-align:left;align-items:baseline;gap:10px;width:100%;padding:5px 4px;font-size:13px;display:flex}.pref-row{cursor:pointer}.pref-cycle:hover:not(:disabled){background:var(--hover)}.pref-cycle .pref-label:after{content:" ›";color:var(--accent)}.pref-row input[type=checkbox]{accent-color:var(--accent);align-self:center}.pref-label{font-family:var(--mono);font-size:12px}.pref-hint{margin:0;font-size:11px}.pref-field{border:0;flex-direction:column;gap:6px;min-width:0;margin:0;padding:4px;display:flex}.pref-field legend{float:left;width:100%;margin-bottom:6px;padding:0}.pref-field .chips-row{clear:both}.pref-number{width:9ch;padding:3px 6px}.pref-readonly .pref-label{color:var(--muted)}.tier-row{border-bottom:1px solid var(--line);flex-direction:column;gap:3px;padding:8px 4px;display:flex}.tier-head{align-items:baseline;gap:12px;display:flex}.tier-head .link{margin-left:auto}.tier-editor{flex-direction:column;gap:8px;padding:8px 0 2px;display:flex}.hook-rows{font:12px var(--mono);gap:18px;padding:10px 4px;display:flex}.confirm-inline{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);flex-direction:column;gap:6px;padding:8px 10px;display:flex}.confirm-inline p{margin:0}.tone-diff-added{color:var(--diff-added)}.tone-diff-removed{color:var(--diff-removed)}.task-mark{border-radius:2px;flex:none;align-self:stretch;width:3px;margin:2px 0}.tab-row.is-two-row{align-items:flex-start}.row-caption{font-size:11px;display:block}html[data-running-title=shimmer] .task-row.is-running .row-title{background:linear-gradient(90deg, var(--ink) 0%, var(--ink) 35%, var(--accent) 50%, var(--ink) 65%, var(--ink) 100%) 0 0 / 300% 100%;color:#0000;-webkit-background-clip:text;background-clip:text;animation:2.4s linear infinite shimmer}@keyframes shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}.pane:focus-within{border-color:var(--focus)}html[data-working-border=flow] .pane.is-working{background:linear-gradient(var(--paper), var(--paper)) padding-box, linear-gradient(90deg, var(--line), var(--task-ink,var(--focus)), var(--line), var(--task-ink,var(--focus)), var(--line)) border-box;background-size:100% 100%,300% 100%;border-color:#0000;animation:3s linear infinite flow-border}@keyframes flow-border{0%{background-position:0 0,0 0}to{background-position:0 0,-200% 0}}.tab-strip.is-tabs-hidden .tab:not(.tab-new):not(.tab-preview){display:none}@media (prefers-reduced-motion:reduce){html[data-running-title=shimmer] .task-row.is-running .row-title{color:inherit;background:0 0;animation:none}html[data-working-border=flow] .pane.is-working{animation:none}}.app{grid-template-columns:var(--rail-w,minmax(220px, 280px)) 1fr minmax(240px, 300px)}.app.is-zen{grid-template-columns:var(--rail-w,minmax(220px, 280px)) 1fr}.app.is-narrow{grid-template-columns:minmax(0,1fr)}.app.narrow-content .rail,.app.narrow-sidebar .workspace{display:none}.narrow-back{align-self:flex-start;padding:2px 6px;font-size:12px;font-weight:700}.recent-row .glyph{font-weight:700}.rail{position:relative}.rail-grip{cursor:col-resize;z-index:5;touch-action:none;width:6px;position:absolute;top:0;bottom:0;right:-3px}.rail-grip:hover,.rail-grip:active{background:var(--accent-soft)}.rail-fold-btn{color:var(--muted);z-index:6;padding:0 4px;font-weight:700;position:absolute;bottom:2px;right:8px}.rail-fold-btn:hover{color:var(--accent)}.rail.is-folded{align-items:center;overflow:hidden}.rail-fold-btn:only-child,.rail.is-folded .rail-fold-btn{right:50%;transform:translate(50%)}.rail-folded-list{flex:1;width:100%;min-height:0;padding:10px 0 24px;overflow-y:auto}.rail-folded-group{flex-direction:column;align-items:center;display:flex}.rail-folded-rule{border-top:1px solid var(--line);width:60%;margin:6px 0}.rail-folded-cell{width:100%;font:13px var(--mono);text-align:center;padding:3px 0}.rail-folded-list.is-initials .rail-folded-cell{justify-content:center;gap:8px;display:flex}.rail-folded-initials{color:var(--muted)}.rail-folded-list.is-hairline .rail-folded-cell{padding:3px 0;line-height:1}.rail-folded-cell.is-selected{background:var(--inset);box-shadow:inset 2px 0 0 var(--accent)}.hint-bar{white-space:nowrap;color:var(--muted);flex-shrink:0;align-items:baseline;font-size:11px;display:inline-flex}.hint-sep{margin:0 6px}.hint-bar .link:disabled{opacity:.5;cursor:default}.shortcut-badge{border:1px solid var(--accent);border-radius:var(--radius-sm);background:var(--surface);color:var(--accent);cursor:pointer;z-index:8;padding:1px 5px;font-size:10px;position:absolute;top:50%;right:4px;transform:translateY(-50%)}.row.new-task,.inbox-chip,.badge-host,.hint-bar>span{position:relative}.rail-head .shortcut-badge{top:100%;right:0;transform:none}.split{flex:1;min-width:0;position:relative}.split-leaf{box-sizing:border-box;min-width:0;min-height:0;display:flex;position:absolute}.split.is-box .split-leaf{border:1px solid var(--line);border-radius:var(--radius-sm)}.split.is-line .split-leaf.has-left{border-left:1px solid var(--line)}.split.is-line .split-leaf.has-top{border-top:1px solid var(--line)}.split.is-rail .split-leaf{border-left:2px solid var(--line)}.split.is-rail .split-leaf.has-top{--mt:6px}.split.is-rule .split-leaf{border-top:1px solid var(--line)}.split.is-rule .split-leaf.has-left{--ml:8px}.split.is-rule .split-name{top:-8px}.split.is-box .split-leaf.is-active,.split.is-line .split-leaf.is-active.has-left,.split.is-line .split-leaf.is-active.has-top,.split.is-rail .split-leaf.is-active,.split.is-rule .split-leaf.is-active{border-color:var(--accent)}.split-name{background:var(--paper);color:var(--subtle);font:10px var(--mono);pointer-events:none;z-index:3;padding:0 4px;position:absolute;top:2px;right:8px}.split-leaf.is-active .split-name{color:var(--accent)}.term-scrolled{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);z-index:4;gap:12px;padding:4px 10px;font-size:11px;display:flex;position:absolute;bottom:10px;right:10px}.tone-info{color:var(--accent)}.term-search{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);font:12px var(--mono);z-index:5;align-items:center;gap:10px;padding:4px 10px;display:flex;position:absolute;bottom:8px;left:8px;right:8px}.term-search-input{min-width:0;color:var(--ink);font:inherit;background:0 0;border:0;outline:none;flex:1}.prefix-guide{z-index:40;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);width:min(560px,100vw - 24px);max-height:60vh;box-shadow:var(--shadow-popover);padding:8px 12px;font-size:12px;position:fixed;bottom:76px;left:12px;overflow-y:auto}.prefix-guide-head{justify-content:space-between;gap:16px;margin-bottom:6px;display:flex}.prefix-guide-body{columns:2 220px;column-gap:20px}.prefix-guide-group{break-inside:avoid;margin-bottom:8px}.prefix-guide-row{width:100%;color:var(--ink);text-align:left;gap:10px;padding:1px 0;display:flex}.prefix-guide-row:hover:not(:disabled){background:var(--hover)}.prefix-guide-row:disabled{cursor:default}.palette-list{margin:8px 0;overflow-y:auto}.palette-row{border-radius:var(--radius-sm);width:100%;color:var(--ink);font:12px var(--mono);text-align:left;white-space:pre;justify-content:space-between;gap:16px;padding:3px 6px;display:flex}.palette-row.is-selected{background:var(--hover)}.palette-chord{color:var(--accent)}.help-head{justify-content:space-between;gap:16px;display:flex}.help-corner{flex-direction:column;align-items:flex-end;font-size:11px;display:flex}.help-scroll{max-height:52vh;margin-top:8px;overflow-y:auto}.help-section{margin-bottom:10px}.help-title{font:700 12px var(--sans);color:var(--accent);margin:0 0 4px}.help-row{gap:12px;padding:1px 0;font-size:12px;display:flex}.help-cap{min-width:14ch;color:var(--ink)}.help-desc{flex:1}.pane-hint{white-space:nowrap;text-overflow:ellipsis;margin:0;padding:4px 14px;font-size:11px;overflow:hidden}.app-shell{flex-direction:column;height:100%;display:flex}.app-shell>.app{flex:1;height:auto;min-height:0}.daemon-banner{border-bottom:1px solid var(--warning);background:var(--inset);color:var(--warning);flex-wrap:wrap;align-items:baseline;gap:12px;padding:4px 14px;font-size:12px;display:flex}.daemon-banner span{color:var(--muted)}.taskops-hint{font:11px var(--mono);color:var(--subtle)}.taskops-path{font:12px var(--mono);word-break:break-all}.brief{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--paper);max-height:38vh;font:12px / 1.5 var(--mono);white-space:pre-wrap;word-break:break-word;margin:0;padding:10px 12px;overflow:auto}.notes{flex-direction:column;gap:8px;max-height:44vh;display:flex;overflow-y:auto}.note{border-radius:var(--radius-sm);text-align:left;flex-direction:column;gap:2px;width:100%;padding:6px 10px;display:flex}.note.is-selected,.note:focus-visible{background:var(--accent-soft);outline:none}.note-head{font:11px var(--mono);color:var(--accent);white-space:pre}.note-text{color:var(--ink);white-space:pre-wrap;word-break:break-word}.note-confirm{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--paper);flex-direction:column;gap:8px;padding:10px 12px;display:flex}.note-confirm p{margin:0}.row.is-moving,.project-head.is-moving{background:var(--accent-soft);box-shadow:inset 2px 0 0 var(--accent)}.project-head.is-moving:after{content:"move";font:500 10px var(--mono);letter-spacing:.11em;text-transform:uppercase;color:var(--accent)}.taskops-body{white-space:pre-line}.suggest{position:relative}.suggest-list{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--inset);max-height:188px;font:12px var(--mono);margin:4px 0 0;padding:2px;list-style:none;overflow-y:auto}.suggest-row{text-align:left;width:100%;font:inherit;border-radius:var(--radius-sm);color:var(--muted);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;padding:3px 8px;display:block;overflow:hidden}.suggest-row.is-cursor{background:var(--hover);color:var(--ink)}.suggest-row.is-accent{color:var(--accent)}.newtask-legend{font:11px var(--mono);color:var(--subtle);margin:8px 0 0}.dialog-body+div>.dialog-body{margin-top:14px}.rail-nav{flex-direction:column;padding:0 6px 8px;display:flex}.rail-nav-row{border-radius:var(--radius-sm);color:var(--muted);text-align:left;align-items:center;padding:3px 8px;display:flex}.rail-nav-row:hover{background:var(--inset)}.rail-nav-row.is-active{color:var(--ink);font-weight:700}.mono{font-family:var(--mono)}.pg-top{justify-content:space-between;align-items:baseline;gap:16px;display:flex}.pg-top .page-title{margin:0}.pg-hint{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:11px;overflow:hidden}.pg-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.kb-page{flex-direction:column;gap:8px;display:flex;overflow:hidden}.kb-project{align-items:baseline;gap:12px;min-width:0;display:flex}.kb-project-name{color:var(--accent);white-space:nowrap;font-weight:700}.kb-project-path{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:11px;overflow:hidden}.kb-empty{margin-left:auto;font-size:12px}.kb-board{flex:1;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;min-height:0;display:grid}.kb-single{flex-direction:column;flex:1;gap:8px;min-height:0;display:flex}.kb-strip{gap:16px;font-size:12px;display:flex}.kb-strip .is-active{color:var(--accent);font-weight:700}.kb-lane{border:1px solid var(--line);border-radius:var(--radius);flex-direction:column;min-height:0;padding:8px;display:flex}.kb-single .kb-lane{flex:1}.kb-lane-head{font:700 12px var(--mono);color:var(--muted);justify-content:space-between;gap:8px;margin:0 0 8px;display:flex}.kb-lane-in_progress .kb-lane-head{color:var(--accent)}.kb-lane-parked .kb-lane-head{color:var(--warning)}.kb-lane-done .kb-lane-head{color:var(--success)}.kb-cards{flex-direction:column;flex:1;gap:8px;min-height:0;display:flex;overflow-y:auto}.kb-cards p{margin:0;font-size:11px}.kb-card{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);cursor:pointer;flex-direction:column;flex:none;gap:4px;padding:8px 10px;display:flex}.kb-card:hover{border-color:var(--line-active)}.kb-card.is-selected{border-color:var(--accent)}.kb-card.is-attention:not(.is-selected){border-color:var(--warning)}.kb-card.is-done .kb-card-title{color:var(--muted)}.kb-card-head{justify-content:space-between;gap:8px;display:flex}.kb-card-title{overflow-wrap:anywhere;min-width:0;font-weight:700}.kb-card-body{white-space:pre-wrap;overflow-wrap:anywhere;height:2.8em;font-size:12px;overflow:hidden}.kb-card-foot{justify-content:space-between;gap:8px;font-size:11px;display:flex}.dialog.kb-drawer{width:min(680px,100vw - 32px)}.kb-drawer-head{align-items:baseline;gap:14px;display:flex}.kb-label{align-items:baseline;gap:10px;display:flex}.kb-hint{text-transform:none;letter-spacing:0}.kb-body{font-family:var(--mono);min-height:160px}.kb-group{border-radius:var(--radius-sm);border:1px solid #0000;padding:4px}.kb-group:focus{border-color:var(--accent);outline:none}.kb-places{flex-direction:column;align-items:flex-start;gap:2px;display:flex}.kb-place{font:12px var(--mono);color:var(--muted);white-space:pre}.kb-place.is-active{color:var(--accent);font-weight:700}.kb-legend{font-size:11px}.kb-section{flex-direction:column;gap:4px;display:flex}.kb-section p{margin:0}.kb-event{gap:8px;font-size:12px;display:flex}.kb-age{text-align:right;min-width:4ch}.pg-list{flex-direction:column;gap:6px;margin-top:10px;display:flex}.pg-row{border:1px solid var(--line);border-radius:var(--radius-sm);cursor:pointer;align-items:baseline;gap:10px;min-width:0;padding:7px 10px;display:flex}.pg-row.is-cursor{border-color:var(--accent);background:var(--inset)}.pg-row .pg-name{white-space:nowrap;font-weight:700}.pg-row.is-off .pg-name{color:var(--muted)}.pg-row .pg-grow{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.pg-detail{border:1px solid var(--line);border-radius:var(--radius);gap:24px;margin-top:10px;padding:12px;display:flex}.pg-detail>div{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.pg-detail p,.pg-detail h2{margin:0}.pg-prompt{white-space:pre-wrap;overflow-wrap:anywhere}.pg-run{font-size:12px}.pg-response{white-space:pre-wrap;overflow-wrap:anywhere;font-size:12px}.pg-notice{margin:8px 0 0;font-size:12px}.pg-cron{gap:18px;padding:6px 4px;display:flex}.pg-cron button{border-radius:var(--radius-sm);text-align:left;min-width:5ch;font:13px var(--mono);border:1px solid #0000;flex-direction:column;gap:2px;padding:4px 6px;display:flex}.pg-cron button span{color:var(--subtle);font-size:10px}.pg-cron button.is-active{border-color:var(--accent);color:var(--accent);font-weight:700}.pg-cron:focus{outline:none}.pg-issue-line{align-items:baseline;gap:10px;min-width:0;display:flex}.pg-issue-line .pg-num{color:var(--muted);white-space:nowrap}.pg-issue-sub{color:var(--muted);gap:10px;padding-left:4ch;font-size:12px;display:flex}.pg-issue-sub .pg-grow{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.pg-issue{border-radius:var(--radius-sm);cursor:pointer;border-left:2px solid #0000;flex-direction:column;gap:2px;padding:6px 10px;display:flex}.pg-issue.is-cursor{background:var(--inset);border-left-color:var(--accent)}.mods-page{flex-direction:column;gap:12px;display:flex}.mods-empty p{margin:4px 0}.mod-pane{border:1px solid var(--line);border-radius:var(--radius);font-family:var(--mono);padding:8px 12px 12px}.mod-pane-title{color:var(--ink);margin-bottom:8px;font-size:12px}.mod-box{align-items:flex-start;min-width:0;display:flex}.mod-box.is-framed{border:1px solid var(--line);border-radius:var(--radius-sm)}.mod-text{color:var(--ink);white-space:pre-wrap;overflow-wrap:anywhere}.mod-text.is-bold{font-weight:700}.mod-button{border-radius:var(--radius-sm);font:inherit;cursor:pointer;background:0 0;border:1px solid;padding:2px 10px;font-weight:700}.mod-button:hover,.mod-button.is-cursor{background:color-mix(in srgb, currentcolor 18%, transparent)}.mod-text.tone-info,.mod-button.tone-info{color:var(--info)}.mod-text.tone-success,.mod-button.tone-success{color:var(--success)}.mod-text.tone-warning,.mod-button.tone-warning{color:var(--warning)}.mod-text.tone-error,.mod-button.tone-error{color:var(--error)}.mod-text.tone-muted,.mod-button.tone-muted{color:var(--muted)}.mod-field{align-self:stretch;min-width:0;max-width:40em;display:flex}.mod-box.is-row>.mod-field{flex:12em;align-self:center}.mod-field .input{width:100%;font-family:var(--mono)}.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre;font-family:monospace}.xterm .xterm-accessibility-tree>div{transform-origin:0;width:fit-content}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;z-index:11;background:0 0;transition:opacity .1s linear}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{display:none;position:absolute}.xterm .xterm-scrollable-element>.shadow.top{width:100%;height:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;display:block;top:0;left:3px}.xterm .xterm-scrollable-element>.shadow.left{width:3px;height:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;display:block;top:3px;left:0}.xterm .xterm-scrollable-element>.shadow.top-left-corner{width:3px;height:3px;display:block;top:0;left:0}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}.welcome{max-width:72ch;font:12px / 1.5 var(--mono);flex-direction:column;gap:10px;margin:0 auto;padding:28px 20px;display:flex;overflow-y:auto}.welcome p,.welcome dl,.welcome dd{margin:0}.welcome-title{font:600 14px var(--mono);color:var(--accent);margin:0}.welcome-steps{flex-direction:column;gap:2px;padding-top:6px;display:flex}.welcome-step{gap:14px;display:flex}.welcome-cap{color:var(--accent);flex:0 0 8ch}.welcome-env,.welcome-start{flex-direction:column;gap:6px;padding-top:6px;display:flex}.welcome-start .button{align-self:flex-start}.welcome-fix{flex-direction:column;gap:2px;display:flex}.welcome-docs{opacity:.7;padding-top:6px}
|
package/dist/web/index.html
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
6
|
<meta name="referrer" content="no-referrer" />
|
|
7
7
|
<title>rove</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-BLCf4p1g.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CdjFB6v7.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
12
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@sma1lboy/rove",
|
|
4
|
-
"version": "0.9.
|
|
4
|
+
"version": "0.9.262",
|
|
5
5
|
"description": "Rove — the agent multiplexer for your terminal. Run coding agents on parallel tasks with isolated worktrees and persistent sessions.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"terminal",
|
|
@@ -99,8 +99,8 @@
|
|
|
99
99
|
"@vitest/coverage-v8": "2.1.9",
|
|
100
100
|
"knip": "^6.14.2",
|
|
101
101
|
"react-devtools-core": "^7.0.1",
|
|
102
|
-
"rove-bridge": "0.0.
|
|
103
|
-
"rove-weixin": "0.0.
|
|
102
|
+
"rove-bridge": "0.0.23",
|
|
103
|
+
"rove-weixin": "0.0.23",
|
|
104
104
|
"typescript": "5.8.2",
|
|
105
105
|
"vitest": "2.1.9"
|
|
106
106
|
},
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{closeTab,engineTabArgv,initialTabs,setTabTitle,tabPtyKeyFor,terminalTabsKey}from"./chunk-9ztqf6hb.js";import{awaitEngineProcess,buildEngineSessionLaunch,deliverToHostedKey,enginePresence,ensureHostedSessionHost,findHostedEngineKey,hostedSessionFailureLine,hostedTaskKeys,initMarkerSaysFinished,isHostedTaskKey,killHostedSessions,listHostedSessions,listHostedSessionsOrNull,openHostedSessionHost,pastePromptWhenEngineUp,readPersistedTerminalDefaultColors,sessionArgvNamesEngine}from"./chunk-rsvh7n8v.js";import{engineLaunchArgv}from"./chunk-pbfehk8q.js";import{engineProcessIn,parsePsSnapshot,psSnapshot,vendorFromArgv}from"./chunk-bdwp2k8f.js";import{ApiError}from"./chunk-x7r75e3p.js";import{loadStateFile,patchStateFile,updateStateFile}from"./chunk-g4281a0g.js";import{basename}from"path";function wireNode(node){if(node.kind==="leaf")return{kind:"leaf",id:node.id,title:node.title??null,own:node.content===null};return{kind:"group",orientation:node.orientation,children:node.children.map(wireNode)}}function wireSplit(tree){return tree?{root:wireNode(tree.root),activeLeafId:tree.activeLeafId}:null}function taskEngineArgv(task){return engineLaunchArgv({command:task.command,vendor:task.vendor})}function readTabsSnapshot(taskId){try{let snap=loadStateFile()[terminalTabsKey(taskId)];return snap&&Array.isArray(snap.tabs)?snap:void 0}catch{return}}function closeTabsSnapshot(taskId,tabId){let closing,key=terminalTabsKey(taskId);return updateStateFile((store)=>{let state=store[key];if(!state||!Array.isArray(state.tabs))return!1;if(closing=state.tabs.find((tab)=>tab.id===tabId),!closing)return!1;let{state:next,closedId}=closeTab(state,tabId,{allowEmpty:!0});if(!closedId)return closing=void 0,!1;store[key]=next;return}),closing}function renameTabsSnapshot(taskId,tabId,title){let found=!1,key=terminalTabsKey(taskId);return updateStateFile((store)=>{let state=store[key];if(!state||!Array.isArray(state.tabs))return!1;if(!state.tabs.some((tab)=>tab.id===tabId))return!1;found=!0;let next=setTabTitle(state,tabId,title);if(next===state)return!1;store[key]=next;return}),found}var aliveKeysOf=(sessions)=>new Set(sessions.filter((s)=>s.alive).map((s)=>s.key));function unregisteredTabIds(snapshot,taskId,sessions){let known=new Set((snapshot?.tabs??[]).map((t)=>t.id)),prefix=`${taskId}::`,out=[];for(let s of sessions){if(!s.alive||!s.key.startsWith(prefix))continue;let tabId=s.key.slice(prefix.length);if(tabId.includes("::"))continue;if(!known.has(tabId)&&!out.includes(tabId))out.push(tabId)}return out}var abnormalExit=(exit)=>exit&&(exit.code!==0||exit.signal!==null)?exit:null;function joinTaskTabs(snapshot,taskId,sessions,persistedExits={},liveVendors,engineAlive){let unknown=sessions===null,rows0=sessions??[],alive=aliveKeysOf(rows0),sessionExits=new Map(rows0.map((s)=>[s.key,s.exit])),deadExit=(key)=>{let ex=abnormalExit(sessionExits.get(key)??persistedExits[key]);if(!ex)return null;let record=persistedExits[key],sameDeath=record?.at===ex.at,tail=sameDeath?record?.tail:void 0,code=ex.code??(sameDeath?record?.code??null:null),layer=record?.layer??"pty";return{code,signal:ex.signal,at:ex.at,layer,...tail&&tail.length>0?{tail}:{}}},engineExit=(key)=>{let record=persistedExits[`${key}#engine`];if(!record)return null;let{code,signal,at,tail,atApproximate}=record;return{code,signal,at,layer:"engine",...atApproximate?{atApproximate}:{},...tail&&tail.length>0?{tail}:{}}},rows=(snapshot?.tabs??[]).map((t)=>{let key=tabPtyKeyFor(taskId,t),isAlive=unknown?null:alive.has(key),walked=isAlive===!0&&liveVendors?.has(key)===!0?liveVendors.get(key)??null:void 0,engineIsAlive=engineAliveOf(key,isAlive,engineAlive);return{id:t.id,kind:t.kind,title:t.title??null,vendor:t.vendor??null,liveVendor:walked!==void 0?walked:t.liveVendor??null,lastTitle:t.lastTitle??null,autoTitle:t.autoTitle??null,alive:isAlive,engineAlive:engineIsAlive,exit:isAlive===!1?deadExit(key):engineIsAlive===!1?engineExit(key):null,...t.splitTree?{split:wireSplit(t.splitTree)}:{},...t.kind==="engine"&&t.ptyTask?{viewOf:t.ptyTask.id}:{}}});for(let tabId of unregisteredTabIds(snapshot,taskId,rows0))rows.push({id:tabId,kind:"engine",title:null,vendor:null,liveVendor:null,lastTitle:null,autoTitle:null,alive:!0,engineAlive:engineAliveOf(`${taskId}::${tabId}`,!0,engineAlive),exit:null,unregistered:!0});return rows}function engineAliveOf(key,isAlive,engineAlive){if(isAlive===null)return null;if(!isAlive)return!1;return engineAlive?.has(key)===!0?engineAlive.get(key)??null:null}function publishCliTabSnapshot(taskId,sessionId){if(!taskId)return;try{let key=terminalTabsKey(taskId);if(loadStateFile()[key]!==void 0)return;let seeded=initialTabs();patchStateFile({[key]:sessionId?{...seeded,tabs:seeded.tabs.map((t)=>t.kind==="engine"?{...t,sessionId,spawned:!0}:t)}:seeded})}catch{}}function markCliTabSession(taskId,tabId,sessionId){try{let key=terminalTabsKey(taskId);updateStateFile((store)=>{let existing=store[key];if(!existing||!Array.isArray(existing.tabs))return!1;store[key]={...existing,tabs:existing.tabs.map((t)=>t.id===tabId&&t.kind==="engine"?{...t,...sessionId?{sessionId}:{},spawned:!0}:t)};return})}catch{}}function allocateTab(taskId,build,taken=new Set){let key=terminalTabsKey(taskId),out={};if(updateStateFile((store)=>{let existing=store[key],state=existing&&Array.isArray(existing.tabs)&&existing.tabs.length>0?existing:initialTabs(),ordinal=typeof state.nextOrdinal==="number"&&state.nextOrdinal>1?state.nextOrdinal:2;while(taken.has(`tab-${ordinal}`)||state.tabs.some((t)=>t.id===`tab-${ordinal}`))ordinal++;let tab=build(`tab-${ordinal}`,ordinal);out.tab=tab,store[key]={...state,tabs:[...state.tabs,tab],activeId:tab.id,nextOrdinal:ordinal+1};return}),!out.tab)throw Error(`tab allocation for ${taskId} did not run`);return out.tab}function mintCliTab(taskId,vendor,command){try{return allocateTab(taskId,(id,ordinal)=>({kind:"engine",id,title:null,ordinal,...vendor?{vendor}:{},...command?{engineCommand:command}:{}})).id}catch{return`tab-cli-${Date.now().toString(36)}`}}async function countLiveEngineSessions(sessions,snapshot=psSnapshot){let tabs=sessions.filter((s)=>s.alive&&s.key.split("::").length===2);if(!tabs.length)return 0;let rows;try{if(rows=parsePsSnapshot(await snapshot(tabs.flatMap((s)=>s.pid?[s.pid]:[]))),!rows.length)return tabs.length}catch{return tabs.length}return tabs.filter((s)=>{if(!s.pid)return!0;let root=rows.find((row)=>row.pid===s.pid);if(!root)return!0;if(engineProcessIn(rows,s.pid)||vendorFromArgv(root.args))return!0;let[taskId,tabId]=s.key.split("::"),labelled=readTabsSnapshot(taskId)?.tabs.some((tab)=>tab.id===tabId&&tab.kind==="engine");if(tabId!=="tab-1"&&!labelled&&!sessionArgvNamesEngine(s.command))return!1;let executable=basename(root.args.split(/\s+/)[0]).toLowerCase().replace(/^-/,"").replace(/\.exe$/,"");if(["sh","bash","zsh","fish","dash","ash","ksh","mksh"].includes(executable))return/^\S+\s+-[a-zA-Z]*c\b/.test(root.args);return!0}).length}async function openAdmittedEngine(rpc,spec,opts){let limit=opts.maxLiveEngines;if(limit===void 0)return rpc.request("pty.open",spec);for(let attempt=0;attempt<20;attempt++){let{sessions,admissionToken}=await rpc.request("pty.list",{});if(typeof admissionToken!=="string")throw new ApiError("the PTY host must be updated before enforcing engine.maxLiveSessions","ENGINE_ADMISSION_UNAVAILABLE",{taskId:opts.taskId,hint:"the running PTY host predates atomic admission; update and restart the PTY host before retrying",nextCommandArgs:opts.retryArgs});let live=await countLiveEngineSessions(sessions,opts.snapshot);if(!sessions.some((s)=>s.key===spec.key&&s.alive)&&live>=limit)throw new ApiError(`${live} engine sessions are already running (engine.maxLiveSessions is ${limit})`,"ENGINE_LIMIT",{taskId:opts.taskId,live,limit,hint:"wait for an engine to finish or close a tab, then retry; raise engine.maxLiveSessions in state.json to allow more",nextCommandArgs:opts.retryArgs});let result=await rpc.request("pty.openChecked",{...spec,admissionToken});if(result.kind==="opened")return result.open}throw new ApiError("PTY inventory kept changing during engine admission; retry the send","ENGINE_ADMISSION_BUSY",{taskId:opts.taskId,nextCommandArgs:opts.retryArgs})}function restoredTabsOf(sessions,taskId,exceptKey){let prefix=`${taskId}::`,ids=[];for(let s of sessions){if(s.alive||s.restored!==!0||s.key===exceptKey||!s.key.startsWith(prefix))continue;let tab=s.key.slice(prefix.length);if(tab.includes("::"))continue;if(!ids.includes(tab))ids.push(tab)}let tabs=readTabsSnapshot(taskId)?.tabs??[];return ids.map((tab)=>{let sessionId=tabs.find((t)=>t.id===tab)?.sessionId;return sessionId?{tab,sessionId}:{tab}})}function restoredTabLaunch(task,tabId,worktreePath,shell){let tab=readTabsSnapshot(task.id)?.tabs.find((t)=>t.id===tabId&&t.kind==="engine");if(!tab)return null;let base=engineLaunchArgv({command:tab.engineCommand??(tab.vendor?void 0:task.command),vendor:tab.vendor??task.vendor,effort:task.modelEffort,model:tab.engineCommand||tab.vendor?void 0:task.model});return buildEngineSessionLaunch({task:{id:task.id,kind:task.kind??"task",vendor:tab.vendor??task.vendor,repo:task.repo},worktreePath,shell,argv:engineTabArgv(tab,base,!1,task.vendor),promptIntent:{kind:"none"},tabId})}var isTaskKey=isHostedTaskKey,findEngineKey=findHostedEngineKey,taskKeys=hostedTaskKeys,openPtyHost=openHostedSessionHost,ensurePtyHost=ensureHostedSessionHost,listSessions=listHostedSessions,listSessionsOrNull=listHostedSessionsOrNull,deliverToKey=deliverToHostedKey,ENGINE_START_PROBE_MS=3000,ENGINE_START_POLL_MS=150,ENGINE_NOT_OBSERVED_REASON=`no engine process appeared in the session within ${ENGINE_START_PROBE_MS}ms`;function outcomeFields(outcome){if(!outcome)return{engineReady:!1,delivered:!1};return{engineReady:outcome.ready,delivered:!0,bytes:outcome.bytes,promptEcho:outcome.confirmed?"confirmed":"unconfirmed"}}async function deliverHostedPrompt(rpc,target,cwd,prompt,launch,opts){let{sessions=[]}=await rpc.request("pty.list",{}),existingKey=opts?.forceNew?null:findEngineKey(sessions,target.id,target.engineBin);if(existingKey){let pid=sessions.find((s)=>s.key===existingKey)?.pid,presence=await enginePresence(pid,target.engineBin,opts?.snapshot);if(presence.kind==="unknown")throw new ApiError(`could not read the process table, so task ${target.id}'s engine tab (${existingKey}) could not be checked for a live engine`,"ENGINE_PROBE_FAILED",{hint:"the `ps` probe failed or timed out; retry, or check the machine's process table",nextCommandArgs:["api","pty-list"]});if(presence.kind!=="engine")throw new ApiError(`task ${target.id}'s engine tab (${existingKey}) has no live engine process \u2014 its engine exited into a plain shell`,"ENGINE_NOT_RUNNING",{hint:"spawn a fresh engine tab for this prompt with --tab new",nextCommandArgs:["api","send","--task-id",target.id,"--tab","new","--plain","--prompt",prompt]});let outcome=await deliverToKey(rpc,existingKey,prompt,{vendor:presence.vendor});return{session:existingKey,pane:existingKey,started:!1,...outcomeFields(outcome)}}if(!opts?.forceNew){let aliveTabs=sessions.filter((s)=>s.alive&&isTaskKey(s.key,target.id)).map((s)=>s.key);if(aliveTabs.length>0)throw new ApiError(`task ${target.id} has live tabs (${aliveTabs.join(", ")}) but none resolves as its engine tab \u2014 refusing to spawn a new engine`,"NO_ENGINE_TAB",{hint:"address a live engine tab explicitly with --tab <tab-N> (see pty-list), or spawn a fresh engine tab with --tab new",nextCommandArgs:["api","pty-list"]})}let frozen=restoredTabsOf(sessions,target.id,launch.key),disclose=frozen.length>0?{frozenTabs:frozen}:{},staleCanonical=sessions.find((session)=>session.key===launch.key&&!session.alive);if(staleCanonical&&staleCanonical.restored!==!0)await rpc.request("pty.kill",{key:launch.key});let open=await openAdmittedEngine(rpc,{key:launch.key,cwd,command:launch.command,defaultColors:readPersistedTerminalDefaultColors()},{maxLiveEngines:opts?.maxLiveEngines,snapshot:opts?.snapshot,taskId:target.id,retryArgs:opts?.retryArgs??["api","send","--task-id",target.id,...opts?.forceNew?["--tab","new"]:[],"--plain","--prompt",prompt]});try{if(!open.alive)return{session:launch.key,pane:launch.key,started:open.created!==!1||open.respawned===!0,engineReady:!1,delivered:!1,...disclose};if(launch.firstMessage){let outcome=await pastePromptWhenEngineUp(rpc,launch.key,target.engineBin,launch.firstMessage,{initMarkerPath:launch.initMarkerPath,initTimeoutMs:launch.initTimeoutMs});return{session:launch.key,pane:launch.key,started:open.created!==!1||open.respawned===!0,...outcomeFields(outcome),...disclose}}let started=open.created!==!1||open.respawned===!0;if(open.created===!1&&open.respawned!==!0){let outcome=await pastePromptWhenEngineUp(rpc,launch.key,target.engineBin,prompt,{snapshot:opts?.snapshot});return{session:launch.key,pane:launch.key,started,...outcomeFields(outcome),...disclose}}let pendingInit={session:launch.key,pane:launch.key,started,engineReady:!1,delivered:!0,reason:"repo init script is still running; the engine has not started yet",...disclose};if(launch.initMarkerPath&&!initMarkerSaysFinished(launch.initMarkerPath))return pendingInit;if(await awaitEngineProcess(rpc,launch.key,target.engineBin,{timeoutMs:ENGINE_START_PROBE_MS,intervalMs:ENGINE_START_POLL_MS,snapshot:opts?.snapshot})===null){if(launch.initMarkerPath&&!initMarkerSaysFinished(launch.initMarkerPath)&&(await listSessions(rpc)).some((session)=>session.key===launch.key&&session.alive)&&!initMarkerSaysFinished(launch.initMarkerPath))return pendingInit;return{session:launch.key,pane:launch.key,started,engineReady:!1,delivered:!1,reason:await hostedSessionFailureLine(rpc,launch.key)??ENGINE_NOT_OBSERVED_REASON,...disclose}}return{session:launch.key,pane:launch.key,started,engineReady:!0,delivered:!0,...disclose}}finally{await rpc.request("pty.detach",{key:launch.key}).catch(()=>{})}}var killTaskSessions=killHostedSessions;
|
|
3
|
-
export{wireSplit,taskEngineArgv,readTabsSnapshot,closeTabsSnapshot,renameTabsSnapshot,unregisteredTabIds,joinTaskTabs,publishCliTabSnapshot,markCliTabSession,allocateTab,mintCliTab,openAdmittedEngine,restoredTabLaunch,isTaskKey,findEngineKey,taskKeys,openPtyHost,ensurePtyHost,listSessions,listSessionsOrNull,deliverToKey,ENGINE_START_PROBE_MS,ENGINE_START_POLL_MS,ENGINE_NOT_OBSERVED_REASON,outcomeFields,deliverHostedPrompt,killTaskSessions};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{spawnSync}from"child_process";import{existsSync}from"fs";import{join}from"path";function normalizeRemoteUrl(url){let u=url.trim();return u=u.replace(/^[a-z+]+:\/\//i,""),u=u.replace(/^[^@/]+@/,""),u=u.replace(/^([^/:]+):(?!\d+\/)/,"$1/"),u=u.replace(/^([^/:]+):\d+\//,"$1/"),u=u.replace(/\/+$/,"").replace(/\.git$/i,""),u.toLowerCase()}function git(cwd,args){let res=spawnSync("git",["-C",cwd,...args],{encoding:"utf8",timeout:5000});return res.status===0?res.stdout.trim():null}function repoIdentity(path){if(!existsSync(path)||git(path,["rev-parse","--git-dir"])===null)return null;let origin=git(path,["remote","get-url","origin"]),root=git(path,["rev-list","--max-parents=0","HEAD"])?.split(`
|
|
3
|
-
`).filter(Boolean).sort()[0];return{...origin?{origin:normalizeRemoteUrl(origin)}:{},...root?{root}:{}}}function isLocalCheckout(path){return existsSync(join(path,".git"))||existsSync(path)&&git(path,["rev-parse","--git-dir"])!==null}function matchRepo(want,candidates){if(want.root){let byRoot=candidates.find((c)=>c.identity.root===want.root);if(byRoot)return byRoot.path}if(want.origin){let byOrigin=candidates.find((c)=>c.identity.origin===want.origin);if(byOrigin)return byOrigin.path}return null}function unpushedCommits(path,ref){if(git(path,["rev-parse","--verify","--quiet",`${ref}^{commit}`])===null)return null;let ahead=git(path,["rev-list","--count",`${ref}@{upstream}..${ref}`]);if(ahead!==null)return Number.parseInt(ahead,10)||0;let lone=git(path,["rev-list","--count",ref,"--not","--remotes"]);return lone===null?null:Number.parseInt(lone,10)||0}
|
|
4
|
-
export{normalizeRemoteUrl,repoIdentity,isLocalCheckout,matchRepo,unpushedCommits};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{API_VERBS,VERBS,VERB_ALIASES,VERB_GROUPS,findVerb,unknownVerbError}from"./chunk-q2kweazg.js";import"./chunk-1j4e2jcx.js";import"./chunk-rc2nwsdd.js";import"./chunk-t60qcvcj.js";import"./chunk-e6848rj8.js";import"./chunk-j11hzmwy.js";import"./chunk-6h12b2k0.js";import"./chunk-17e2tgyg.js";import"./chunk-cbc1h345.js";import"./chunk-jjv7xem7.js";import"./chunk-4hestsjp.js";import"./chunk-stcvcsfm.js";import"./chunk-2bgmby1d.js";import"./chunk-41x1hrqe.js";import"./chunk-5mhvjytn.js";import"./chunk-edsm15ht.js";import"./chunk-atn06ncf.js";import"./chunk-j5w8n1st.js";import"./chunk-qkehg2c1.js";import"./chunk-1dcb0069.js";import"./chunk-9ztqf6hb.js";import"./chunk-rsvh7n8v.js";import"./chunk-ampdybqg.js";import"./chunk-sak1tphp.js";import"./chunk-pbfehk8q.js";import"./chunk-4250pw6r.js";import"./chunk-qpvvc1xz.js";import"./chunk-rxqdw6s5.js";import"./chunk-zae59k1j.js";import"./chunk-f5n0tgky.js";import"./chunk-z3zaa155.js";import"./chunk-yewmtant.js";import"./chunk-hpay0ax8.js";import"./chunk-catrr0z3.js";import"./chunk-bdwp2k8f.js";import"./chunk-efjahmtj.js";import"./chunk-2tfnscxk.js";import"./chunk-9ecnsh42.js";import"./chunk-w7zv47mp.js";import"./chunk-etfh8f4z.js";import"./chunk-t7j8g9f6.js";import"./chunk-dmzg9zdc.js";import"./chunk-kg9kmwt9.js";import"./chunk-6xppe9bj.js";import"./chunk-4pt3n7cg.js";import"./chunk-b7xjhgts.js";import"./chunk-x7r75e3p.js";import"./chunk-zsfyj36g.js";import"./chunk-601dsgex.js";import"./chunk-1vwngrmf.js";import"./chunk-3vtpshwx.js";import"./chunk-ag3txfg2.js";import"./chunk-2brn8e1y.js";import"./chunk-bkt3ktvx.js";import"./chunk-7zyyvc3d.js";import"./chunk-r6k3ve2g.js";import"./chunk-xy8be792.js";import"./chunk-7kysxgbq.js";import"./chunk-h2m7em1e.js";import"./chunk-7ghwdjdc.js";import"./chunk-tdhk4dz8.js";import"./chunk-hqkzc8cv.js";import"./chunk-22d0yc7m.js";import"./chunk-40dgv828.js";import"./chunk-3342qzve.js";import"./chunk-g4281a0g.js";import"./chunk-zh0c8yzw.js";import"./chunk-wqckm0k6.js";import"./chunk-prqeddy7.js";import"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-2676cb62.js";import"./chunk-q07r6hf7.js";import"./chunk-cmp64q4j.js";import"./chunk-s0jbtyd9.js";import"./chunk-278sc87n.js";import"./chunk-gskbzgc3.js";import"./chunk-pn5ygqn6.js";import"./chunk-n0rtj4z7.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import"./chunk-pxk2c2vj.js";import"./chunk-91sykzqq.js";export{unknownVerbError,findVerb,VERB_GROUPS,VERB_ALIASES,VERBS,API_VERBS};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{isRowTokenTone}from"./chunk-atn06ncf.js";import{sameWorktreeChanges}from"./chunk-55ajzrj6.js";import{ensureDaemonReachable,isStaleInstallError}from"./chunk-601dsgex.js";import{toTaskId}from"./chunk-xy8be792.js";import{CURRENT_VERSION}from"./chunk-hqkzc8cv.js";import{homeDir}from"./chunk-prqeddy7.js";import{createStateCell,mapReadableState}from"./chunk-cmp64q4j.js";import{DAEMON_PROTOCOL_VERSION,MIN_COMPATIBLE_PROTOCOL_VERSION,isAttentionInboxState,isDaemonVersionStale,isForeignDaemonHome,isProtocolCompatible,isRoutineInboxState,parseDaemonStopReason}from"./chunk-s0jbtyd9.js";import{parseModUiPayload}from"./chunk-278sc87n.js";import{logClient,logClientError}from"./chunk-gskbzgc3.js";function parseWorktreeChangesPayload(payload){let changes=payload?.changes;if(!changes||typeof changes!=="object"||Array.isArray(changes))return null;let map=new Map;for(let[path,value]of Object.entries(changes)){let counts=value;if(typeof counts?.added!=="number"||typeof counts.deleted!=="number")return null;map.set(path,{added:counts.added,deleted:counts.deleted,...typeof counts.behind==="number"?{behind:counts.behind}:{},...typeof counts.ahead==="number"?{ahead:counts.ahead}:{}})}let unreadable=payload?.unreadable;if(Array.isArray(unreadable)){for(let path of unreadable)if(typeof path==="string"&&path.length>0)map.set(path,null)}return map}function sameWorktreeChangesMap(a,b){if(a.size!==b.size)return!1;for(let[path,counts]of a){if(!b.has(path))return!1;if(!sameWorktreeChanges(counts,b.get(path)??null))return!1}return!0}function parseToken(raw){if(!raw||typeof raw!=="object")return null;let t=raw;if(typeof t.source!=="string"||typeof t.key!=="string")return null;if(typeof t.text!=="string"||t.text.length===0)return null;if(typeof t.expiresAt!=="number"||!Number.isFinite(t.expiresAt))return null;return{source:t.source,key:t.key,text:t.text,...isRowTokenTone(t.tone)?{tone:t.tone}:{},expiresAt:t.expiresAt}}function parseRowTokensPayload(payload){let tokens=payload?.tokens;if(!tokens||typeof tokens!=="object"||Array.isArray(tokens))return null;let out=new Map;for(let[taskId,list]of Object.entries(tokens)){if(!Array.isArray(list))continue;let parsed=list.map(parseToken).filter((token)=>token!==null);if(parsed.length>0)out.set(taskId,parsed)}return out}function sameRowTokenMap(a,b){if(a.size!==b.size)return!1;for(let[taskId,left]of a){let right=b.get(taskId);if(!right||right.length!==left.length)return!1;for(let[i,token]of left.entries()){let other=right[i];if(!other||other.source!==token.source||other.key!==token.key||other.text!==token.text||other.tone!==token.tone||other.expiresAt!==token.expiresAt)return!1}}return!0}function liveRowTokens(map,taskId,now){let tokens=map?.get(taskId);if(!tokens||tokens.length===0)return[];return tokens.filter((token)=>token.expiresAt>now)}function shouldLogReconnectAttempt(attempt){if(attempt>100)return!1;return attempt===1||attempt%10===0}function describePayload(value){if(value===void 0)return"undefined";if(value===null)return"null";let type=Array.isArray(value)?"array":typeof value,text;try{text=typeof value==="string"?value:JSON.stringify(value)}catch{text=String(value)}if(text.length>120)text=`${text.slice(0,120)}\u2026`;return`${type}:${text}`}function decodeUiPrefsPayload(payload){let p=payload;if(!p||typeof p!=="object"||!("theme"in p))return null;if(p.theme!==null&&typeof p.theme!=="string")return null;return{theme:typeof p.theme==="string"&&p.theme.length>0?p.theme:null,..."themeMode"in p?{themeMode:typeof p.themeMode==="string"?p.themeMode:null}:{},transparentBackground:p.transparentBackground!==!1,focusAccent:typeof p.focusAccent==="string"?p.focusAccent:null,locale:typeof p.locale==="string"?p.locale:"",sortMode:p.sortMode==="recent"||p.sortMode==="attention"||p.sortMode==="name"?p.sortMode:"default",keysCollapsed:p.keysCollapsed===!0,projectFilter:typeof p.projectFilter==="string"&&p.projectFilter.length>0?p.projectFilter:null}}var TOKEN_TOTAL_FIELDS=["inputTokens","outputTokens","cacheReadTokens","cacheCreationTokens"];function parseContextUsagePayload(payload){let context=payload?.context;if(!context||typeof context!=="object"||Array.isArray(context))return null;let map=new Map;for(let[key,value]of Object.entries(context)){let v=value;if(typeof v?.contextTokens!=="number")return null;if(v.contextWindowTokens!==void 0&&typeof v.contextWindowTokens!=="number")return null;let totals={};for(let field of TOKEN_TOTAL_FIELDS){let raw=v[field];if(raw===void 0)continue;if(typeof raw!=="number")return null;totals[field]=raw}map.set(key,{contextTokens:v.contextTokens,...typeof v.contextWindowTokens==="number"?{contextWindowTokens:v.contextWindowTokens}:{},...v.approximate===!0?{approximate:!0}:{},...totals})}return map}function sameContextUsageMap(a,b){if(a.size!==b.size)return!1;for(let[key,value]of a){let other=b.get(key);if(!other||other.contextTokens!==value.contextTokens||other.contextWindowTokens!==value.contextWindowTokens||other.approximate!==value.approximate||TOKEN_TOTAL_FIELDS.some((field)=>other[field]!==value[field]))return!1}return!0}function parseUsageSnapshotPayload(payload){let usage=payload?.usage;if(!usage||typeof usage!=="object"||Array.isArray(usage))return null;let map=new Map;for(let[vendor,value]of Object.entries(usage)){let snapshot=value;if(typeof snapshot?.capturedAt!=="number"||!Array.isArray(snapshot.windows))return null;let windows=[];for(let raw of snapshot.windows){let w=raw;if(typeof w?.kind!=="string"||typeof w.label!=="string"||typeof w.percent!=="number")return null;if(w.resetsAt!==null&&typeof w.resetsAt!=="number")return null;windows.push({kind:w.kind,label:w.label,percent:w.percent,resetsAt:w.resetsAt})}map.set(vendor,{windows,capturedAt:snapshot.capturedAt})}return map}function sameUsageSnapshotMap(a,b){if(a.size!==b.size)return!1;for(let[vendor,usage]of a){let other=b.get(vendor);if(!other||other.capturedAt!==usage.capturedAt||other.windows.length!==usage.windows.length)return!1;for(let i=0;i<usage.windows.length;i++){let x=usage.windows[i],y=other.windows[i];if(!x||!y||x.kind!==y.kind||x.label!==y.label||x.percent!==y.percent||x.resetsAt!==y.resetsAt)return!1}}return!0}function parseTranscriptActivityPayload(payload){let activity=payload?.activity;if(!activity||typeof activity!=="object"||Array.isArray(activity))return null;let map=new Map;for(let[path,value]of Object.entries(activity)){let v=value;if(typeof v?.mtimeMs!=="number"||typeof v.completionAt!=="number")return null;if(v.completionId!==null&&typeof v.completionId!=="string")return null;map.set(path,{mtimeMs:v.mtimeMs,completionId:v.completionId,completionAt:v.completionAt})}return map}function sameTranscriptActivityMap(a,b){if(a.size!==b.size)return!1;for(let[path,v]of a){let other=b.get(path);if(!other||other.mtimeMs!==v.mtimeMs||other.completionId!==v.completionId||other.completionAt!==v.completionAt)return!1}return!0}function deserializeTask(s){return{id:toTaskId(s.id),title:s.title,repo:s.repo,branch:s.branch,worktreePath:s.worktreePath,kind:s.kind,...s.scratch?{scratch:!0}:{},...s.routine?{routine:s.routine}:{},status:s.status,pinned:s.pinned,vendor:s.vendor,command:s.command,prStatus:s.prStatus,modelEffort:s.modelEffort,model:s.model,tier:s.tier,groupId:s.groupId,observedLanguage:s.observedLanguage,deletion:s.deletion,quotaResume:s.quotaResume,linkedWorkItem:s.linkedWorkItem,dispatcher:s.dispatcher,requireReport:s.requireReport,prompt:s.prompt,baseRef:s.baseRef,worktreeName:s.worktreeName,report:s.report,createdAt:s.createdAt,updatedAt:s.updatedAt}}async function runReconnectLoop(deps){let delayMs=deps.spawnDaemon?Math.floor(Math.random()*400):500,attempt=0;while(!deps.isDisposed()){if(delayMs>0)await new Promise((r)=>setTimeout(r,delayMs));if(deps.isDisposed())break;attempt++;try{if(deps.spawnDaemon)await deps.ensureReachable();await deps.init(),logClient("orch",`reconnected and re-subscribed after ${attempt} attempt(s) \u2014 task list re-synced`);return}catch(err){if(isStaleInstallError(err)){logClientError("orch-reconnect-fatal",err),deps.onFatal?.(err);return}if(deps.shouldLogAttempt(attempt))logClientError("orch-reconnect",err);delayMs=delayMs===0?500:Math.min(delayMs*2,3000)}}}async function performInit(client,opts,signals){let hello=await client.request("hello",{protocolVersion:DAEMON_PROTOCOL_VERSION,minProtocolVersion:MIN_COMPATIBLE_PROTOCOL_VERSION}),daemonVersion=typeof hello.protocolVersion==="number"?hello.protocolVersion:DAEMON_PROTOCOL_VERSION,daemonMin=typeof hello.minProtocolVersion==="number"?hello.minProtocolVersion:daemonVersion;if(!isProtocolCompatible({localVersion:DAEMON_PROTOCOL_VERSION,localMin:MIN_COMPATIBLE_PROTOCOL_VERSION,remoteVersion:daemonVersion,remoteMin:daemonMin}))throw Error(`Rove daemon is protocol v${daemonVersion} (min v${daemonMin}); this client is v${DAEMON_PROTOCOL_VERSION} (min v${MIN_COMPATIBLE_PROTOCOL_VERSION}). Restart the daemon (\`rove daemon restart\`) or upgrade Rove.`);let clientHome=homeDir();if(!opts.expectForeignHome&&isForeignDaemonHome(hello.homeDir,clientHome))throw Error(`Rove daemon on this socket serves ${hello.homeDir}, but this client uses ${clientHome}. A sandbox or dev daemon has taken the production socket \u2014 stop it (\`rove daemon stop\`), or unset ROVE_DAEMON_SOCKET_PATH / ROVE_DAEMON_SOCKET_PATH before starting it.`);if(signals.setDaemonVersionSig(typeof hello.roveVersion==="string"?hello.roveVersion:null),opts.onPeerIdentity?.({hostname:typeof hello.hostname==="string"?hello.hostname:"",homeDir:typeof hello.homeDir==="string"?hello.homeDir:"",daemonPid:typeof hello.daemonPid==="number"?hello.daemonPid:0,roveVersion:typeof hello.roveVersion==="string"?hello.roveVersion:""}),signals.setDaemonRestartingSig(!1),hello.tasks&&opts.subscribesTasks)signals.setTasks(hello.tasks.map(deserializeTask));if(await client.subscribe({role:opts.role,channels:opts.channels,cellPixelSize:opts.cellPixelSize}),hello.capabilities?.includes("worktree.changes")){if(signals.worktreeChangesAcc()===null)signals.setWorktreeChangesSig(new Map)}else signals.setWorktreeChangesSig(null);if(hello.capabilities?.includes("transcript.activity")){if(signals.transcriptActivityAcc()===null)signals.setTranscriptActivitySig(new Map)}else signals.setTranscriptActivitySig(null);signals.setConnectionState("online"),logClient("orch",`subscribed as ${opts.role} (${signals.tasksAcc().length} tasks)`)}function ordinalOf(tabId,fallback){let match=/^tab-(\d+)$/.exec(tabId);return match?Number(match[1]):fallback}function adoptTabs(state,tabIds){let known=new Set(state.tabs.map((tab)=>tab.id)),fresh=[];for(let id of tabIds){if(known.has(id))continue;known.add(id),fresh.push(id)}if(fresh.length===0)return state;let minted=state.nextOrdinal,adopted=fresh.map((id)=>({kind:"engine",id,title:null,ordinal:ordinalOf(id,minted++),spawned:!0}));adopted.sort((a,b)=>a.ordinal-b.ordinal);let tabs=[...state.tabs,...adopted],maxOrdinal=tabs.reduce((max,tab)=>Math.max(max,tab.ordinal),0);return{tabs,activeId:state.activeId,nextOrdinal:Math.max(state.nextOrdinal,maxOrdinal+1)}}function isAddedTab(raw){if(typeof raw!=="object"||raw===null)return!1;if(!("id"in raw)||typeof raw.id!=="string")return!1;if(!("ordinal"in raw)||typeof raw.ordinal!=="number")return!1;if(!("title"in raw)||raw.title!==null&&typeof raw.title!=="string")return!1;if(!("kind"in raw))return!1;if(raw.kind==="engine")return!0;return raw.kind==="command"&&"command"in raw&&Array.isArray(raw.command)}function absorbTab(state,tab){let nextOrdinal=Math.max(state.nextOrdinal,tab.ordinal+1),known=state.tabs.find((t)=>t.id===tab.id);if(known?.kind===tab.kind){if(Object.entries(tab).every(([key,value])=>JSON.stringify(Reflect.get(known,key))===JSON.stringify(value))&&nextOrdinal===state.nextOrdinal)return state}let merged=known?.kind===tab.kind?{...known,...tab,title:known.title}:tab,tabs=known?state.tabs.map((t)=>t===known?merged:t):[...state.tabs,merged];return{...state,tabs,nextOrdinal}}var MAP_CHANNELS={"usage.snapshot":{what:"usage payload",parse:parseUsageSnapshotPayload,same:sameUsageSnapshotMap,read:(signals)=>signals.usageSnapshotAcc(),write:(signals,next)=>signals.setUsageSnapshotSig(next)},"usage.context":{what:"context payload",parse:parseContextUsagePayload,same:sameContextUsageMap,read:(signals)=>signals.contextUsageAcc(),write:(signals,next)=>signals.setContextUsageSig(next)},"worktree.changes":{what:"changes payload",parse:parseWorktreeChangesPayload,same:sameWorktreeChangesMap,read:(signals)=>signals.worktreeChangesAcc(),write:(signals,next)=>signals.setWorktreeChangesSig(next)},"transcript.activity":{what:"activity payload",parse:parseTranscriptActivityPayload,same:sameTranscriptActivityMap,read:(signals)=>signals.transcriptActivityAcc(),write:(signals,next)=>signals.setTranscriptActivitySig(next)},"mod.ui":{what:"mod pane list",parse:parseModUiPayload,same:(a,b)=>JSON.stringify(a)===JSON.stringify(b),read:(signals)=>signals.modPanesAcc(),write:(signals,next)=>signals.setModPanesSig(next)},"task.tokens":{what:"token map",parse:parseRowTokensPayload,same:sameRowTokenMap,read:(signals)=>signals.rowTokensAcc(),write:(signals,next)=>signals.setRowTokensSig(next)}};function handleMapChannel(name,payload,signals){let channel=MAP_CHANNELS[name];if(!channel)return!1;let next=channel.parse(payload);if(!next)return logClientError("orch",`dropped ${name} event: malformed ${channel.what} (${describePayload(payload)})`),!0;let current=channel.read(signals);if(current&&channel.same(current,next))return!0;return channel.write(signals,next),!0}function writeGraphicsToStdout(data){if(!process.stdout.isTTY)return;process.stdout.write(data)}function pruneEngineState(tasks,signals){let live=new Set(tasks.map((t)=>t.id)),current=signals.engineStateAcc();if(current.size>0){let next=null;for(let key of current.keys()){if(live.has(key))continue;if(!next)next=new Map(current);next.delete(key)}if(next)signals.setEngineStateSig(next)}let tabs=signals.engineTabStateAcc();if(tabs.size>0){let nextTabs=null;for(let key of tabs.keys()){if(live.has(key))continue;if(!nextTabs)nextTabs=new Map(tabs);nextTabs.delete(key)}if(nextTabs)signals.setEngineTabStateSig(nextTabs)}let lifecycle=signals.engineLifecycleAcc();if(lifecycle.size>0){let nextLifecycle=null;for(let key of lifecycle.keys()){if(live.has(key))continue;if(!nextLifecycle)nextLifecycle=new Map(lifecycle);nextLifecycle.delete(key)}if(nextLifecycle)signals.setEngineLifecycleSig(nextLifecycle)}}function pruneTaskJobs(tasks,signals){let current=signals.taskJobsAcc();if(current.size===0)return;let live=new Set(tasks.map((t)=>t.id)),next=null;for(let key of current.keys()){if(live.has(key))continue;if(!next)next=new Map(current);next.delete(key)}if(next)signals.setTaskJobsSig(next)}function handleOrchestratorEvent(name,payload,signals){if(name==="task.snapshot"){let value=payload?.tasks;if(Array.isArray(value))signals.setTasks(value.map(deserializeTask)),pruneEngineState(value,signals),pruneTaskJobs(value,signals);else logClientError("orch",`dropped task.snapshot event: tasks is not an array (got ${describePayload(value)})`);return}if(name==="daemon.stopping"){let p=payload;if(typeof p?.roveVersion==="string")signals.setDaemonVersionSig(p.roveVersion);if(parseDaemonStopReason(p?.reason)==="restart")signals.setDaemonRestartingSig(!0);return}if(name==="active-task"){let id=payload?.taskId;signals.setActiveTaskSig(typeof id==="string"?id:null);return}if(name==="update"){let info=payload?.info;signals.setUpdateSig(info??null);return}if(name==="engine-state"){let p=payload;if(typeof p?.taskId!=="string"||typeof p.state!=="string"){logClientError("orch",`dropped engine-state event: taskId/state must be strings (taskId=${describePayload(p?.taskId)}, state=${describePayload(p?.state)})`);return}let tabId=typeof p.tabId==="string"&&p.tabId?p.tabId:void 0,entry={state:p.state,detail:p.detail,...typeof p.sessionId==="string"&&p.sessionId?{sessionId:p.sessionId}:{},...typeof p.transcriptPath==="string"&&p.transcriptPath?{transcriptPath:p.transcriptPath}:{},...tabId?{tabId}:{},at:typeof p.at==="number"?p.at:0},prevTaskState=signals.engineStateAcc().get(p.taskId)?.state;if(!tabId){let next=new Map(signals.engineStateAcc());if(p.state==="idle")next.delete(p.taskId);else next.set(p.taskId,entry);signals.setEngineStateSig(next)}if((p.state==="idle"||p.state==="turn_complete"||p.state==="error"||p.state==="running"&&prevTaskState!=="running")&&signals.engineLifecycleAcc().has(p.taskId)){let lifecycle=new Map(signals.engineLifecycleAcc());lifecycle.delete(p.taskId),signals.setEngineLifecycleSig(lifecycle)}if(tabId){let nextTabs=new Map(signals.engineTabStateAcc()),tabs=new Map(nextTabs.get(p.taskId)??[]);tabs.set(tabId,entry),nextTabs.set(p.taskId,tabs),signals.setEngineTabStateSig(nextTabs)}return}if(name==="attention.inbox"){let items=payload?.items;if(!Array.isArray(items)){logClientError("orch",`dropped attention.inbox event: items is not an array (${describePayload(items)})`);return}let kept=items.filter((item)=>{if(!item||typeof item!=="object"||Array.isArray(item))return!1;let p=item;return(typeof p.taskId==="string"||p.taskId===null&&isRoutineInboxState(p.state))&&(p.tabId===null||typeof p.tabId==="string")&&isAttentionInboxState(p.state)&&(p.unread===void 0||typeof p.unread==="boolean")&&typeof p.at==="number"});if(kept.length!==items.length)logClientError("orch",`dropped ${items.length-kept.length} malformed attention.inbox item(s) of ${items.length} (${describePayload(items)})`);if(kept.length===0&&items.length>0)return;signals.setAttentionInboxSig(kept.map((item)=>({...item,unread:item.unread!==!1})));return}if(name==="gates"){let gates=payload?.gates;if(!Array.isArray(gates)){logClientError("orch",`dropped gates event: gates is not an array (${describePayload(gates)})`);return}let kept=gates.filter((g)=>{if(!g||typeof g!=="object"||Array.isArray(g))return!1;let p=g;return typeof p.id==="string"&&typeof p.taskId==="string"&&typeof p.question==="string"});if(kept.length===0&&gates.length>0)return;signals.setGatesSig(kept.map((g)=>({...g,options:Array.isArray(g.options)?g.options:[]})));return}if(name==="task.jobs"){let p=payload;if(typeof p?.taskId!=="string"||p.kind!=="ensureWorktree"){logClientError("orch",`dropped task.jobs event: expected string taskId + kind "ensureWorktree" (taskId=${describePayload(p?.taskId)}, kind=${describePayload(p?.kind)})`);return}let current=signals.taskJobsAcc();if(p.phase==="running"){let next=new Map(current);next.set(p.taskId,{kind:p.kind}),signals.setTaskJobsSig(next);return}if((p.phase==="done"||p.phase==="error")&¤t.has(p.taskId)){let next=new Map(current);next.delete(p.taskId),signals.setTaskJobsSig(next)}return}if(handleMapChannel(name,payload,signals))return;if(name==="tab.open"){let p=payload;if(typeof p?.taskId!=="string"||typeof p.at!=="number"||typeof p.title!=="string"||!Array.isArray(p.argv)){logClientError("orch",`dropped tab.open event: malformed payload (${describePayload(payload)})`);return}signals.setTabOpenSig(p);return}if(name==="tab.close"){let p=payload;if(!(p&&"kind"in p&&p.kind==="terminal-tab"?typeof p.taskId==="string"&&typeof p.tabId==="string"&&typeof p.requestId==="string"&&typeof p.at==="number":typeof p?.taskId==="string"&&typeof p.at==="number"&&("title"in p)&&typeof p.title==="string")){logClientError("orch",`dropped tab.close event: malformed payload (${describePayload(payload)})`);return}signals.setTabCloseSig(p);return}if(name==="tab.rename"){let p=payload;if(typeof p?.taskId!=="string"||typeof p.tabId!=="string"||typeof p.title!=="string"||typeof p.at!=="number"){logClientError("orch",`dropped tab.rename event: malformed payload (${describePayload(payload)})`);return}signals.setTabRenameSig(p);return}if(name==="tab.add"){let p=payload;if(typeof p?.taskId!=="string"||typeof p.at!=="number"||!isAddedTab(p.tab)){logClientError("orch",`dropped tab.add event: malformed payload (${describePayload(payload)})`);return}signals.setTabAddSig({taskId:p.taskId,tab:p.tab,at:p.at});return}if(name==="ui.prompt"){let p=payload;if(typeof p?.promptId!=="string"||typeof p.title!=="string"||typeof p.at!=="number"){logClientError("orch",`dropped ui.prompt event: malformed payload (${describePayload(payload)})`);return}signals.setUiPromptSig(p);return}if(name==="engine.lifecycle"){let p=payload;if(typeof p?.taskId!=="string"||typeof p.kind!=="string"){logClientError("orch",`dropped engine.lifecycle event: malformed payload (${describePayload(payload)})`);return}let prev=signals.engineLifecycleAcc(),cur=prev.get(p.taskId)??{subagents:0},entry=p.kind==="subagent-start"?{subagents:cur.subagents+1}:p.kind==="subagent-stop"?{subagents:Math.max(0,cur.subagents-1)}:cur;if(entry===cur&&!prev.has(p.taskId))return;let map=new Map(prev);if(entry.subagents===0)map.delete(p.taskId);else map.set(p.taskId,entry);signals.setEngineLifecycleSig(map);return}if(name==="graphics.write"){let p=payload;if(typeof p?.data!=="string"||typeof p.imageId!=="number"||typeof p.at!=="number"){logClientError("orch",`dropped graphics.write event: malformed payload (${describePayload(payload)})`);return}signals.writeGraphics(Buffer.from(p.data,"base64"));return}if(name==="notice.event"){let p=payload;if(typeof p?.title!=="string"||typeof p.at!=="number"||typeof p.kind!=="string"){logClientError("orch",`dropped notice.event: malformed payload (${describePayload(payload)})`);return}signals.setNoticeSig(p);return}if(name==="ui-prefs"){let decoded=decodeUiPrefsPayload(payload);if(!decoded){let theme=payload?.theme;logClientError("orch",`dropped ui-prefs event: theme must be a string (got ${describePayload(theme)})`);return}signals.setUiPrefsSig(decoded);return}if(name==="keybindings"){let p=payload;if(typeof p?.rev!=="number"){logClientError("orch",`dropped keybindings event: rev must be a number (got ${describePayload(p?.rev)})`);return}signals.setKeybindingsRevSig(p.rev)}}function subscribeTasksOp(tasks,listener){try{listener(tasks())}catch(err){console.error("[rove RemoteOrchestrator] task listener threw on subscribe:",err)}return tasks.subscribe(()=>{try{listener(tasks.get())}catch(err){console.error("[rove RemoteOrchestrator] task listener threw:",err)}})}async function createTaskOp(client,input){let{modelEffort,...rest}=input,res=await client.request("task.create",{...rest,effort:modelEffort});return deserializeTask(res.task)}async function ensureMainTaskOp(client,repo){let res=await client.request("task.ensureMain",{repo});return deserializeTask(res.task)}async function openDirectoryTaskOp(client,input){let res=await client.request("task.openDir",input);return deserializeTask(res.task)}async function adoptScratchRepoOp(client,id,repo){await client.request("task.adoptScratchRepo",{taskId:String(id),repo})}async function ensureWorktreeOp(client,id){return(await client.request("task.ensureWorktree",{taskId:String(id)})).worktreePath}async function forgetProjectOp(client,repo){await client.request("project.forget",{repo})}function reportEngineInterruptOp(client,taskId,tabId){client.request("engine.reportEvent",{kind:"turn-interrupted",taskId,tabId}).catch(()=>{})}async function setTitleOp(client,id,title){await client.request("task.rename",{taskId:String(id),title})}async function setBranchOp(client,id,branch){await client.request("task.setBranch",{taskId:String(id),branch})}async function setVendorOp(client,id,vendor,effort,model){await client.request("task.setVendor",{taskId:String(id),vendor,...effort!==void 0?{effort}:{},...model!==void 0?{model}:{}})}async function setCommandOp(client,id,command,vendor){await client.request("task.setCommand",{taskId:String(id),command,...vendor?{vendor}:{}})}async function setPinnedOp(client,id,pinned){await client.request("task.pin",{taskId:String(id),pinned})}async function moveTaskOp(client,id,delta){await client.request("task.move",{taskId:String(id),direction:delta<0?"up":"down"})}async function moveTaskToTopOp(client,id){await client.request("task.move",{taskId:String(id),direction:"top"})}async function setPromptOp(client,id,prompt){await client.request("task.setPrompt",{taskId:String(id),prompt})}async function setStatusOp(client,id,status){await client.request("task.status",{taskId:String(id),status})}async function deleteTaskOp(client,id,opts){await client.request("task.delete",{taskId:String(id),force:opts?.force,deleteBranch:opts?.deleteBranch})}async function dismissAttentionOp(client,taskId,tabId,at,deliveryId){return(await client.request("attention.dismiss",{taskId:String(taskId),...tabId!==null?{tabId}:{},at,...deliveryId!==void 0?{deliveryId}:{}})).deleted}async function dismissRoutineAttentionOp(client,automationId){return(await client.request("attention.dismissRoutine",{automationId})).deleted}async function answerGateOp(client,gateId,answer){return{delivered:(await client.request("gate.answer",{gateId,...answer,by:"tui"})).delivered}}async function withdrawGateOp(client,gateId){await client.request("gate.withdraw",{gateId})}async function markAttentionReadOp(client,taskId,tabId,at){return(await client.request("attention.read",{taskId:String(taskId),...tabId!==null?{tabId}:{},at})).updated}async function landPreflightOp(client,id){return(await client.request("task.landPreflight",{taskId:String(id)})).result}async function landTaskOp(client,id,opts){return(await client.request("task.land",{taskId:String(id),strategy:opts?.strategy,deleteBranch:opts?.deleteBranch,removeWorktree:opts?.removeWorktree,callerCwd:opts?.callerCwd})).result}async function discoverAdoptableWorktreesOp(client,repo){return(await client.request("worktree.discoverAdoptable",{repo})).worktrees}async function adoptWorktreeOp(client,input){let res=await client.request("worktree.adopt",input);return deserializeTask(res.task)}async function listWorktreesOp(client,opts){return(await client.request("worktree.list",{network:opts?.network!==!1})).projects}async function removeWorktreeOp(client,path,force){return(await client.request("worktree.remove",{path,force})).residue??null}async function syncBaseOp(client,taskId){return(await client.request("task.syncBase",{taskId})).result}async function failingChecksOp(client,taskId){let res=await client.request("pr.failingChecks",{taskId});return{checks:res.checks??[],totalFailing:res.totalFailing??0,...res.unavailable?{unavailable:res.unavailable}:{}}}async function rerunFailedChecksOp(client,taskId){let res=await client.request("pr.rerunFailedChecks",{taskId});return{rerunRuns:res.rerunRuns??0,external:res.external??0,...res.refused?{refused:res.refused}:{},...res.unavailable?{unavailable:res.unavailable}:{}}}async function listIssuesOp(client,repoRoot){return client.request("issue.list",{repoRoot})}async function listIssueReposOp(client){return(await client.request("issue.repos",{})).repos??[]}async function listFieldNotesOp(client,repo){return(await client.request("note.list",{repo})).notes??[]}async function deleteFieldNoteOp(client,repo,id){return(await client.request("note.delete",{repo,id})).deleted===!0}async function mutateIssueOp(client,repoRoot,op){return client.request("issue.mutate",{repoRoot,op})}async function listAutomationsOp(client){return client.request("automation.list",{})}async function createAutomationOp(client,input){return client.request("automation.create",input)}async function automationRunsOp(client,id){return client.request("automation.runs",{id})}async function setAutomationEnabledOp(client,id,enabled){return client.request("automation.update",{id,enabled})}async function runAutomationNowOp(client,id){return client.request("automation.runNow",{id})}async function deleteAutomationOp(client,id){return client.request("automation.delete",{id})}async function listWorkItemsOp(client,args){return client.request("workitem.list",args)}async function startWorkItemOp(client,args){return client.request("workitem.start",args)}async function setActiveTaskOp(client,id){await client.request("task.setActive",{taskId:id===null?null:String(id)})}function replyTabCloseOp(client,requestId,closed){client.request("terminalTab.closeReply",{requestId,closed}).catch(()=>{})}function replyPromptOp(client,promptId,value){client.request("ui.promptReply",{promptId,...value!==void 0?{value}:{}}).catch(()=>{})}function reportUiEventOp(client,kind,taskId,detail){client.request("ui.reportEvent",{kind,...taskId?{taskId}:{},...detail?{detail}:{}}).catch(()=>{})}function recentTaskEventsOp(client,id){return client.request("task.recentEvents",{taskId:String(id)})}class RemoteOrchestrator{client;tasksAcc=createStateCell([],"orchestrator.tasks");activeTaskAcc=createStateCell(null,"orchestrator.active-task");updateAcc=createStateCell(null);daemonVersionAcc=createStateCell(null);daemonRestartingAcc=createStateCell(!1);daemonStaleAcc=mapReadableState(this.daemonVersionAcc,(version)=>isDaemonVersionStale(version??void 0,CURRENT_VERSION));engineStateAcc=createStateCell(new Map);engineTabStateAcc=createStateCell(new Map);attentionInboxAcc=createStateCell([]);gatesAcc=createStateCell([]);taskJobsAcc=createStateCell(new Map);rowTokensAcc=createStateCell(new Map);modPanesAcc=createStateCell([]);worktreeChangesAcc=createStateCell(null);usageSnapshotAcc=createStateCell(null);contextUsageAcc=createStateCell(null);transcriptActivityAcc=createStateCell(null);noticeAcc=createStateCell(null);tabOpenAcc=createStateCell(null);tabCloseAcc=createStateCell(null);tabRenameAcc=createStateCell(null);tabAddAcc=createStateCell(null);uiPromptAcc=createStateCell(null);engineLifecycleAcc=createStateCell(new Map);uiPrefsAcc=createStateCell(null);keybindingsRevAcc=createStateCell(null);connectionStateAcc=createStateCell("online","orchestrator.connection");staleInstallAcc=createStateCell(null);ensureReachable;role;cellPixelSize;channels;subscribesTasks;expectForeignHome;onPeerIdentity;reconnectTask=null;signals;constructor(client,options={}){this.client=client;this.ensureReachable=options.ensureReachable??ensureDaemonReachable,this.role=options.role??"pane",this.cellPixelSize=options.cellPixelSize??null,this.channels=options.channels,this.subscribesTasks=!options.channels||options.channels.includes("task.snapshot"),this.expectForeignHome=options.expectForeignHome===!0,this.onPeerIdentity=options.onPeerIdentity,this.signals={writeGraphics:options.graphicsOut??(this.role==="gui"?writeGraphicsToStdout:()=>{}),tasksAcc:this.tasksAcc,setTasks:this.tasksAcc.set,setActiveTaskSig:this.activeTaskAcc.set,setUpdateSig:this.updateAcc.set,setDaemonVersionSig:this.daemonVersionAcc.set,setDaemonRestartingSig:this.daemonRestartingAcc.set,engineStateAcc:this.engineStateAcc,setEngineStateSig:this.engineStateAcc.set,engineTabStateAcc:this.engineTabStateAcc,setEngineTabStateSig:this.engineTabStateAcc.set,setAttentionInboxSig:this.attentionInboxAcc.set,setGatesSig:this.gatesAcc.set,taskJobsAcc:this.taskJobsAcc,setTaskJobsSig:this.taskJobsAcc.set,rowTokensAcc:this.rowTokensAcc,setRowTokensSig:this.rowTokensAcc.set,modPanesAcc:this.modPanesAcc,setModPanesSig:this.modPanesAcc.set,worktreeChangesAcc:this.worktreeChangesAcc,setWorktreeChangesSig:this.worktreeChangesAcc.set,usageSnapshotAcc:this.usageSnapshotAcc,setUsageSnapshotSig:this.usageSnapshotAcc.set,contextUsageAcc:this.contextUsageAcc,setContextUsageSig:this.contextUsageAcc.set,transcriptActivityAcc:this.transcriptActivityAcc,setTranscriptActivitySig:this.transcriptActivityAcc.set,setNoticeSig:this.noticeAcc.set,setTabOpenSig:this.tabOpenAcc.set,setTabCloseSig:this.tabCloseAcc.set,setTabRenameSig:this.tabRenameAcc.set,setTabAddSig:this.tabAddAcc.set,setUiPromptSig:this.uiPromptAcc.set,engineLifecycleAcc:this.engineLifecycleAcc,setEngineLifecycleSig:this.engineLifecycleAcc.set,setUiPrefsSig:this.uiPrefsAcc.set,setKeybindingsRevSig:this.keybindingsRevAcc.set,setConnectionState:this.connectionStateAcc.set},this.client.on("*",(frame)=>handleOrchestratorEvent(frame.name,frame.payload,this.signals)),this.client.onLifecycle("close",()=>{this.connectionStateAcc.set("disconnected");let spawnDaemon=this.role==="gui";logClient("orch",spawnDaemon?"daemon socket closed \u2014 starting silent spawning reconnect loop":"daemon socket closed \u2014 starting non-spawning reconnect loop"),this.reconnectLoop(spawnDaemon)})}reconnectLoop(spawnDaemon){if(this.reconnectTask)return this.reconnectTask;let task=runReconnectLoop({isDisposed:()=>this.client.isDisposed,spawnDaemon,ensureReachable:this.ensureReachable,init:()=>this.init(),shouldLogAttempt:shouldLogReconnectAttempt,onFatal:(err)=>this.staleInstallAcc.set(err instanceof Error?err.message:String(err))});this.reconnectTask=task;let clear=()=>{if(this.reconnectTask===task)this.reconnectTask=null};return task.then(clear,clear),task}writeGraphics(data){this.signals.writeGraphics(data)}async init(){await performInit(this.client,{role:this.role,cellPixelSize:this.cellPixelSize,channels:this.channels,subscribesTasks:this.subscribesTasks,expectForeignHome:this.expectForeignHome,onPeerIdentity:this.onPeerIdentity},this.signals)}connectionStateSignal(){return this.connectionStateAcc}staleInstallSignal(){return this.staleInstallAcc}async manualReconnect(){this.client.forceDisconnect(),await this.reconnectLoop(!0)}dispose(){this.client.close()}tasksSignal=()=>this.tasksAcc;activeTaskSignal=()=>this.activeTaskAcc;updateSignal=()=>this.updateAcc;daemonVersionSignal=()=>this.daemonVersionAcc;daemonStaleSignal=()=>this.daemonStaleAcc;daemonRestartingSignal=()=>this.daemonRestartingAcc;async restartDaemon(){await this.client.request("daemon.stop",{reason:"restart"}).catch(()=>{})}engineStateSignal=()=>this.engineStateAcc;engineTabStatesSignal=()=>this.engineTabStateAcc;attentionInboxSignal=()=>this.attentionInboxAcc;gatesSignal=()=>this.gatesAcc;taskJobsSignal=()=>this.taskJobsAcc;rowTokensSignal=()=>this.rowTokensAcc;modPanesSignal=()=>this.modPanesAcc;pressMod=(plugin,pane,key)=>this.client.request("mod.press",{plugin,pane,key});submitMod=(plugin,pane,key,value)=>this.client.request("mod.submit",{plugin,pane,key,value});worktreeChangesSignal=()=>this.worktreeChangesAcc;usageSnapshotSignal=()=>this.usageSnapshotAcc;contextUsageSignal=()=>this.contextUsageAcc;transcriptActivitySignal=()=>this.transcriptActivityAcc;transcriptActivityStore=()=>this.transcriptActivityAcc;noticeStore=()=>this.noticeAcc;tabOpenStore=()=>this.tabOpenAcc;tabCloseStore=()=>this.tabCloseAcc;tabRenameStore=()=>this.tabRenameAcc;tabAddStore=()=>this.tabAddAcc;rpc={request:(name,payload)=>this.client.request(name,payload)};replyTerminalTabClose=(requestId,closed)=>replyTabCloseOp(this.client,requestId,closed);uiPromptStore=()=>this.uiPromptAcc;replyPrompt=(promptId,value)=>replyPromptOp(this.client,promptId,value);engineLifecycleSignal=()=>this.engineLifecycleAcc;recentTaskEvents(id){return recentTaskEventsOp(this.client,id)}reportUiEvent=(kind,taskId,detail)=>reportUiEventOp(this.client,kind,taskId,detail);reportScreenInput=async(taskId,tabId,blocked)=>{await this.client.request("engine.reportEvent",{source:"screen",taskId,tabId,blocked})};reportEngineInterrupt=(taskId,tabId)=>reportEngineInterruptOp(this.client,String(taskId),tabId);uiPrefsSignal=()=>this.uiPrefsAcc;uiPrefsStore=()=>this.uiPrefsAcc;keybindingsRevSignal=()=>this.keybindingsRevAcc;keybindingsRevStore=()=>this.keybindingsRevAcc;listTasks=()=>this.tasksAcc();getTask=(id)=>this.tasksAcc().find((task)=>task.id===id);subscribeTasks(listener){return subscribeTasksOp(this.tasksAcc,listener)}createTask=(input)=>createTaskOp(this.client,input);ensureMainTask=(repo)=>ensureMainTaskOp(this.client,repo);openDirectoryTask=(input)=>openDirectoryTaskOp(this.client,input);adoptScratchRepo=(id,repo)=>adoptScratchRepoOp(this.client,id,repo);ensureWorktree=(id)=>ensureWorktreeOp(this.client,id);forgetProject=(repo)=>forgetProjectOp(this.client,repo);setTitle=(id,title)=>setTitleOp(this.client,id,title);setBranch=(id,branch)=>setBranchOp(this.client,id,branch);setVendor=(id,vendor,effort,model)=>setVendorOp(this.client,id,vendor,effort,model);setCommand=(id,command,vendor)=>setCommandOp(this.client,id,command,vendor);setPinned=(id,pinned)=>setPinnedOp(this.client,id,pinned);moveTask=(id,delta)=>moveTaskOp(this.client,id,delta);moveTaskToTop=(id)=>moveTaskToTopOp(this.client,id);setStatus=(id,status)=>setStatusOp(this.client,id,status);setPrompt=(id,prompt)=>setPromptOp(this.client,id,prompt);deleteTask=(id,opts)=>deleteTaskOp(this.client,id,opts);dismissAttention=(taskId,tabId,at,deliveryId)=>dismissAttentionOp(this.client,taskId,tabId,at,deliveryId);dismissRoutineAttention=(automationId)=>dismissRoutineAttentionOp(this.client,automationId);markAttentionRead=(taskId,tabId,at)=>markAttentionReadOp(this.client,taskId,tabId,at);answerGate=(gateId,answer)=>answerGateOp(this.client,gateId,answer);withdrawGate=(gateId)=>withdrawGateOp(this.client,gateId);landPreflight(id){return landPreflightOp(this.client,id)}landTask(id,opts){return landTaskOp(this.client,id,opts)}discoverAdoptableWorktrees(repo){return discoverAdoptableWorktreesOp(this.client,repo)}adoptWorktree(input){return adoptWorktreeOp(this.client,input)}listWorktrees(opts){return listWorktreesOp(this.client,opts)}listIssues(repoRoot){return listIssuesOp(this.client,repoRoot)}listIssueRepos(){return listIssueReposOp(this.client)}mutateIssue(repoRoot,op){return mutateIssueOp(this.client,repoRoot,op)}listAutomations=()=>listAutomationsOp(this.client);createAutomation=(i)=>createAutomationOp(this.client,i);automationRuns=(id)=>automationRunsOp(this.client,id);setAutomationEnabled=(id,on)=>setAutomationEnabledOp(this.client,id,on);runAutomationNow=(id)=>runAutomationNowOp(this.client,id);deleteAutomation=(id)=>deleteAutomationOp(this.client,id);listWorkItems=(a)=>listWorkItemsOp(this.client,a);listFieldNotes=(repo)=>listFieldNotesOp(this.client,repo);deleteFieldNote=(repo,id)=>deleteFieldNoteOp(this.client,repo,id);failingChecks=(taskId)=>failingChecksOp(this.client,taskId);rerunFailedChecks=(taskId)=>rerunFailedChecksOp(this.client,taskId);syncBase=(taskId)=>syncBaseOp(this.client,taskId);startWorkItem=(a)=>startWorkItemOp(this.client,a);removeWorktree(path,force){return removeWorktreeOp(this.client,path,force)}setActiveTask(id){return setActiveTaskOp(this.client,id)}}
|
|
3
|
-
export{liveRowTokens,adoptTabs,absorbTab,RemoteOrchestrator};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{machineTasks}from"./chunk-wg9w0xf4.js";import"./chunk-c0gvp57p.js";import{dedupeMachines,listMachines}from"./chunk-r3zkpbf5.js";import"./chunk-4pt3n7cg.js";import"./chunk-b7xjhgts.js";import"./chunk-x7r75e3p.js";import"./chunk-2brn8e1y.js";import"./chunk-7kysxgbq.js";import"./chunk-g4281a0g.js";import"./chunk-zh0c8yzw.js";import"./chunk-wqckm0k6.js";import"./chunk-prqeddy7.js";import"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-s0jbtyd9.js";import"./chunk-278sc87n.js";import"./chunk-gskbzgc3.js";import"./chunk-pn5ygqn6.js";import"./chunk-n0rtj4z7.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import"./chunk-91sykzqq.js";async function mergeTaskList(local){let machines=dedupeMachines(listMachines());if(machines.length===0)return local;let tasks=(local.tasks??[]).map((task)=>({...task,origin:{machineId:"local",hostLabel:"local"}}));for(let entry of machines){let remote=await machineTasks(entry);if(!remote)continue;let hostLabel=entry.alias;for(let task of remote)tasks.push({...task,origin:{machineId:entry.alias,hostLabel}})}return{tasks}}export{mergeTaskList};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{AUTO_MACHINE,LOCAL_MACHINE,forwardVerb,invokeRouted,machineDaemonSocket,machinePtySocket,machineTasks,pickMachine,requireMachine,routeTarget}from"./chunk-wg9w0xf4.js";import"./chunk-c0gvp57p.js";import"./chunk-r3zkpbf5.js";import"./chunk-4pt3n7cg.js";import"./chunk-b7xjhgts.js";import"./chunk-x7r75e3p.js";import"./chunk-2brn8e1y.js";import"./chunk-7kysxgbq.js";import"./chunk-g4281a0g.js";import"./chunk-zh0c8yzw.js";import"./chunk-wqckm0k6.js";import"./chunk-prqeddy7.js";import"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-s0jbtyd9.js";import"./chunk-278sc87n.js";import"./chunk-gskbzgc3.js";import"./chunk-pn5ygqn6.js";import"./chunk-n0rtj4z7.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import"./chunk-91sykzqq.js";export{routeTarget,requireMachine,pickMachine,machineTasks,machinePtySocket,machineDaemonSocket,invokeRouted,forwardVerb,LOCAL_MACHINE,AUTO_MACHINE};
|