tmux-ide 2.0.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dashboard/out/404/index.html +1 -0
- package/dashboard/out/404.html +1 -0
- package/dashboard/out/__next.__PAGE__.txt +9 -0
- package/dashboard/out/__next._full.txt +21 -0
- package/dashboard/out/__next._head.txt +5 -0
- package/dashboard/out/__next._index.txt +7 -0
- package/dashboard/out/__next._tree.txt +4 -0
- package/dashboard/out/_next/static/chunks/048e2449530877e2.js +1 -0
- package/dashboard/out/_next/static/chunks/053c57bda6abb959.js +1 -0
- package/dashboard/out/_next/static/chunks/056760c6c2dd9172.js +1 -0
- package/dashboard/out/_next/static/chunks/06ab47357b6d3e35.js +1 -0
- package/dashboard/out/_next/static/chunks/0921cbe5dfd6738e.js +1 -0
- package/dashboard/out/_next/static/chunks/0b2599bf468cf5ea.js +1 -0
- package/dashboard/out/_next/static/chunks/0c012eac08ef2c4f.js +1 -0
- package/dashboard/out/_next/static/chunks/0c29e87fcdcffac3.js +1 -0
- package/dashboard/out/_next/static/chunks/0e1e98854430c693.js +1 -0
- package/dashboard/out/_next/static/chunks/0e24498976a88976.js +1 -0
- package/dashboard/out/_next/static/chunks/0e5bf11ff0b9ab90.js +1 -0
- package/dashboard/out/_next/static/chunks/0eae0a45ab8416c8.js +1 -0
- package/dashboard/out/_next/static/chunks/104797400d9d38ad.js +1 -0
- package/dashboard/out/_next/static/chunks/10cfcfce475f9d2d.js +1 -0
- package/dashboard/out/_next/static/chunks/11bac38e7cfb4ecc.js +1 -0
- package/dashboard/out/_next/static/chunks/120c5f6501ec3529.js +1 -0
- package/dashboard/out/_next/static/chunks/121fceb2b1dcd79f.js +1 -0
- package/dashboard/out/_next/static/chunks/13726b63e1be6b98.js +1 -0
- package/dashboard/out/_next/static/chunks/140c6ce631514660.js +1 -0
- package/dashboard/out/_next/static/chunks/1435ee3a51174c97.js +1 -0
- package/dashboard/out/_next/static/chunks/14dc927d2e2cca91.js +1 -0
- package/dashboard/out/_next/static/chunks/179c3031b292d98e.js +1 -0
- package/dashboard/out/_next/static/chunks/181e88957c47e5c1.js +1 -0
- package/dashboard/out/_next/static/chunks/18f70ba23873c432.js +1 -0
- package/dashboard/out/_next/static/chunks/1b58303b027fd135.js +1 -0
- package/dashboard/out/_next/static/chunks/1b5f49a358dcc71e.js +1 -0
- package/dashboard/out/_next/static/chunks/1bba44b81585099a.js +1 -0
- package/dashboard/out/_next/static/chunks/1bea8dee19a3e9ae.js +1 -0
- package/dashboard/out/_next/static/chunks/1cfad21646fc250e.js +1 -0
- package/dashboard/out/_next/static/chunks/1d053dc9e1e428ef.js +1 -0
- package/dashboard/out/_next/static/chunks/1e7d7639c6f0ee5e.js +1 -0
- package/dashboard/out/_next/static/chunks/1f42504ca81463f1.js +1 -0
- package/dashboard/out/_next/static/chunks/20c92047399305b4.js +1 -0
- package/dashboard/out/_next/static/chunks/214560e9514a9a4d.js +1 -0
- package/dashboard/out/_next/static/chunks/21d4ef106914e997.js +1 -0
- package/dashboard/out/_next/static/chunks/2586e83fc3dc2588.js +1 -0
- package/dashboard/out/_next/static/chunks/267136a09e94f5c2.js +1 -0
- package/dashboard/out/_next/static/chunks/271c50b329917c10.js +1 -0
- package/dashboard/out/_next/static/chunks/27fccecefffd88b5.js +1 -0
- package/dashboard/out/_next/static/chunks/28f058ed331315b6.js +1 -0
- package/dashboard/out/_next/static/chunks/28f704f2cc5713eb.js +1 -0
- package/dashboard/out/_next/static/chunks/290f67a6cd150a98.js +1 -0
- package/dashboard/out/_next/static/chunks/2ad12f4dcc30d30a.js +1 -0
- package/dashboard/out/_next/static/chunks/2b650b172078ab92.js +1 -0
- package/dashboard/out/_next/static/chunks/2bd91076019a6453.js +1 -0
- package/dashboard/out/_next/static/chunks/2e1278563a8e26be.js +1 -0
- package/dashboard/out/_next/static/chunks/309eb70780a3d67d.js +1 -0
- package/dashboard/out/_next/static/chunks/30f71950992e2307.js +1 -0
- package/dashboard/out/_next/static/chunks/31191873c2075784.js +1 -0
- package/dashboard/out/_next/static/chunks/31a790921a0c035e.js +1 -0
- package/dashboard/out/_next/static/chunks/34f8d7a5a06e8e32.js +1 -0
- package/dashboard/out/_next/static/chunks/36b3716436d9bc9d.js +1 -0
- package/dashboard/out/_next/static/chunks/3770b7d0ff004de3.js +1 -0
- package/dashboard/out/_next/static/chunks/381ab3bd4cffbf4d.js +1 -0
- package/dashboard/out/_next/static/chunks/38aa4eada5dcd1a4.js +1 -0
- package/dashboard/out/_next/static/chunks/39723132b78cb77e.js +1 -0
- package/dashboard/out/_next/static/chunks/399efdcc3fe56e09.js +1 -0
- package/dashboard/out/_next/static/chunks/3a8431a9221b0706.js +1 -0
- package/dashboard/out/_next/static/chunks/3a9b40810ce88cbf.js +1 -0
- package/dashboard/out/_next/static/chunks/3b322e3e9476ecdf.js +1 -0
- package/dashboard/out/_next/static/chunks/3bb14befeeb08c28.js +1 -0
- package/dashboard/out/_next/static/chunks/3c99637ebd462b20.js +1 -0
- package/dashboard/out/_next/static/chunks/3cbb9217d56459d8.js +1 -0
- package/dashboard/out/_next/static/chunks/3d438e0929a762f7.js +1 -0
- package/dashboard/out/_next/static/chunks/3e6d4834e0752f76.js +2 -0
- package/dashboard/out/_next/static/chunks/3e6f8cedaad4e89b.js +1 -0
- package/dashboard/out/_next/static/chunks/3e701259ce1b53e3.js +1 -0
- package/dashboard/out/_next/static/chunks/41562f7ab7c033eb.js +1 -0
- package/dashboard/out/_next/static/chunks/418fadd8a94e2fd7.js +1 -0
- package/dashboard/out/_next/static/chunks/422e1bb4d41ce5ba.js +193 -0
- package/dashboard/out/_next/static/chunks/42345437bb922e9c.js +1 -0
- package/dashboard/out/_next/static/chunks/434b6bd78c97b668.js +1 -0
- package/dashboard/out/_next/static/chunks/434febe897d33e2d.js +1 -0
- package/dashboard/out/_next/static/chunks/45d28707dd8ce1c1.js +1 -0
- package/dashboard/out/_next/static/chunks/4620a640e88cb1b7.js +1 -0
- package/dashboard/out/_next/static/chunks/468f8eb604502ea4.js +1 -0
- package/dashboard/out/_next/static/chunks/495f5cedf8afe823.js +1 -0
- package/dashboard/out/_next/static/chunks/49a89d1704d27740.js +1 -0
- package/dashboard/out/_next/static/chunks/49e5c37d15f63def.js +1 -0
- package/dashboard/out/_next/static/chunks/4a46ad186a8587ee.css +2 -0
- package/dashboard/out/_next/static/chunks/4a5c728574935d50.js +1 -0
- package/dashboard/out/_next/static/chunks/4b27ebd4d9304d8f.js +1 -0
- package/dashboard/out/_next/static/chunks/4b965aa320a9b358.js +1 -0
- package/dashboard/out/_next/static/chunks/4bb2da90bbe5794f.js +1 -0
- package/dashboard/out/_next/static/chunks/4d2f1c6f631e4b85.js +1 -0
- package/dashboard/out/_next/static/chunks/4d696d5a64dab42e.js +1 -0
- package/dashboard/out/_next/static/chunks/4f660dadb3f1e9e2.js +1 -0
- package/dashboard/out/_next/static/chunks/507b50d47f949333.js +1 -0
- package/dashboard/out/_next/static/chunks/50b1b7063bb044e2.js +1 -0
- package/dashboard/out/_next/static/chunks/50c0c2e3c4f02508.js +1 -0
- package/dashboard/out/_next/static/chunks/50d7ba9803e65b02.js +1 -0
- package/dashboard/out/_next/static/chunks/51535a6d4c98c7a4.js +1 -0
- package/dashboard/out/_next/static/chunks/526de6cc16c7dd2f.js +1 -0
- package/dashboard/out/_next/static/chunks/5307604f8632b3fd.js +1 -0
- package/dashboard/out/_next/static/chunks/5480bd722260f231.js +1 -0
- package/dashboard/out/_next/static/chunks/54c61c82e5f1dca5.js +1 -0
- package/dashboard/out/_next/static/chunks/555de6ac6bb9034c.js +1 -0
- package/dashboard/out/_next/static/chunks/562b89ee76a4b90c.js +1 -0
- package/dashboard/out/_next/static/chunks/5747f9a32edff429.js +1 -0
- package/dashboard/out/_next/static/chunks/57ee141430b4c05c.js +1 -0
- package/dashboard/out/_next/static/chunks/584c066a0837dd9a.js +1 -0
- package/dashboard/out/_next/static/chunks/5856aed4670a6253.js +1 -0
- package/dashboard/out/_next/static/chunks/58fe563414726511.js +1 -0
- package/dashboard/out/_next/static/chunks/5948196b2729b18c.js +1 -0
- package/dashboard/out/_next/static/chunks/5ab77c69e7306f97.js +1 -0
- package/dashboard/out/_next/static/chunks/5b3fa4c99d61611c.js +1 -0
- package/dashboard/out/_next/static/chunks/5cc87abaef616661.js +1 -0
- package/dashboard/out/_next/static/chunks/5dfa7913f99bb966.js +1 -0
- package/dashboard/out/_next/static/chunks/5e49b008432770f1.js +1 -0
- package/dashboard/out/_next/static/chunks/5e5a33dd81c45c47.js +1 -0
- package/dashboard/out/_next/static/chunks/5ee61bed638eb8a8.js +1 -0
- package/dashboard/out/_next/static/chunks/5eed557b9f45ae4a.js +1 -0
- package/dashboard/out/_next/static/chunks/60446823a7d30c1b.js +1 -0
- package/dashboard/out/_next/static/chunks/605150c490861442.js +1 -0
- package/dashboard/out/_next/static/chunks/609056d51c0bf332.js +1 -0
- package/dashboard/out/_next/static/chunks/60ec91dfeb50071b.js +1 -0
- package/dashboard/out/_next/static/chunks/61bc7be0bba6a33f.js +1 -0
- package/dashboard/out/_next/static/chunks/61f4a5c9ce23e55e.js +1 -0
- package/dashboard/out/_next/static/chunks/63aae3585be04e65.js +1 -0
- package/dashboard/out/_next/static/chunks/64e0e1ee7ef4f01b.js +1 -0
- package/dashboard/out/_next/static/chunks/66e9b4c26ff1aaaf.js +1 -0
- package/dashboard/out/_next/static/chunks/67068847aa1b5e98.js +1 -0
- package/dashboard/out/_next/static/chunks/68d7de1f2e202c26.js +1 -0
- package/dashboard/out/_next/static/chunks/698ca3ea1937ba4f.js +1 -0
- package/dashboard/out/_next/static/chunks/69eb97c24b5b6b9d.js +1 -0
- package/dashboard/out/_next/static/chunks/6b1ac098c228a479.js +1 -0
- package/dashboard/out/_next/static/chunks/6bb8020cb796bcc1.js +1 -0
- package/dashboard/out/_next/static/chunks/6cf8b1db17f2a155.js +1 -0
- package/dashboard/out/_next/static/chunks/6e7613643906ea88.js +1 -0
- package/dashboard/out/_next/static/chunks/6ea27ceb2e6feae5.js +1 -0
- package/dashboard/out/_next/static/chunks/6f95a8dbcf23dded.js +1 -0
- package/dashboard/out/_next/static/chunks/6fd44e759d82f64e.js +1 -0
- package/dashboard/out/_next/static/chunks/716ec29c268c38f6.js +1 -0
- package/dashboard/out/_next/static/chunks/717b399dfcf7c02c.js +1 -0
- package/dashboard/out/_next/static/chunks/72badd90e1c91348.js +1 -0
- package/dashboard/out/_next/static/chunks/72f9296dbb7ae3c4.js +1 -0
- package/dashboard/out/_next/static/chunks/73aa31e1144d8191.js +1 -0
- package/dashboard/out/_next/static/chunks/73f98ded8fe2e879.js +1 -0
- package/dashboard/out/_next/static/chunks/740a2e8ace15e13b.js +1 -0
- package/dashboard/out/_next/static/chunks/74e57c16e7304b6b.js +1 -0
- package/dashboard/out/_next/static/chunks/7628dead4d113df2.js +1 -0
- package/dashboard/out/_next/static/chunks/7717c88c07ed96e6.js +1 -0
- package/dashboard/out/_next/static/chunks/775581f7956d9a27.js +1 -0
- package/dashboard/out/_next/static/chunks/77d3b6661befdb98.js +1 -0
- package/dashboard/out/_next/static/chunks/78435c0e1c77fea7.js +1 -0
- package/dashboard/out/_next/static/chunks/791336748b9c9393.js +1 -0
- package/dashboard/out/_next/static/chunks/79ea68dfae65ef2f.js +1 -0
- package/dashboard/out/_next/static/chunks/7bae777a472eb13c.js +1 -0
- package/dashboard/out/_next/static/chunks/7fd847f47237a35c.js +1 -0
- package/dashboard/out/_next/static/chunks/804d718be0370058.css +1 -0
- package/dashboard/out/_next/static/chunks/807cb3c1923995ab.js +1 -0
- package/dashboard/out/_next/static/chunks/8286b39407d94447.js +1 -0
- package/dashboard/out/_next/static/chunks/84e4305b8dc830ed.js +1 -0
- package/dashboard/out/_next/static/chunks/850f99dbfabb53e0.js +1 -0
- package/dashboard/out/_next/static/chunks/85594127e66b6b7f.js +1 -0
- package/dashboard/out/_next/static/chunks/858c11169c183c9c.js +1 -0
- package/dashboard/out/_next/static/chunks/85e27005dfe4c3e3.js +1 -0
- package/dashboard/out/_next/static/chunks/8707bd3d8ddc1f1c.js +1 -0
- package/dashboard/out/_next/static/chunks/8851e5d7ef894973.js +1 -0
- package/dashboard/out/_next/static/chunks/88ba3782cc614989.js +1 -0
- package/dashboard/out/_next/static/chunks/8a0c9a181784c2ef.js +1 -0
- package/dashboard/out/_next/static/chunks/8ad01ae355a6e7f6.js +1 -0
- package/dashboard/out/_next/static/chunks/8d2ed93b0d0a4b4f.js +1 -0
- package/dashboard/out/_next/static/chunks/8dc352ebd5310d3c.js +1 -0
- package/dashboard/out/_next/static/chunks/8dd1d722c8c1a22c.js +1 -0
- package/dashboard/out/_next/static/chunks/8e60fe307e3e4986.js +1 -0
- package/dashboard/out/_next/static/chunks/8eea4dd71e25f32a.js +1 -0
- package/dashboard/out/_next/static/chunks/8f468a65bac34eaa.js +1 -0
- package/dashboard/out/_next/static/chunks/9057e5382d6a5059.js +1 -0
- package/dashboard/out/_next/static/chunks/931d056437805ecb.js +1 -0
- package/dashboard/out/_next/static/chunks/954eb11648dd8cff.js +1 -0
- package/dashboard/out/_next/static/chunks/955034d876d14bb3.js +1 -0
- package/dashboard/out/_next/static/chunks/966c4895773249f6.js +1 -0
- package/dashboard/out/_next/static/chunks/96aff410a6ab106c.js +1 -0
- package/dashboard/out/_next/static/chunks/99b396c821c1dd2d.js +1 -0
- package/dashboard/out/_next/static/chunks/9a255fd2cf4922ae.js +1 -0
- package/dashboard/out/_next/static/chunks/9b1f6aa73bc864b2.js +1 -0
- package/dashboard/out/_next/static/chunks/9b9ce582c533aa79.js +1 -0
- package/dashboard/out/_next/static/chunks/9c19bd3c773c6611.js +1 -0
- package/dashboard/out/_next/static/chunks/9ceeaa847eb15ca2.js +1 -0
- package/dashboard/out/_next/static/chunks/9d2e6e7b8b65f845.js +1 -0
- package/dashboard/out/_next/static/chunks/9de23802066128ff.js +1 -0
- package/dashboard/out/_next/static/chunks/9e327f94b3701170.js +1 -0
- package/dashboard/out/_next/static/chunks/9e7818421c2d455a.js +1 -0
- package/dashboard/out/_next/static/chunks/9e935acbcf2fb519.js +1 -0
- package/dashboard/out/_next/static/chunks/9ed9f68340343b51.js +1 -0
- package/dashboard/out/_next/static/chunks/9f94a0242455fc20.js +1 -0
- package/dashboard/out/_next/static/chunks/9fff46b5aaecf47e.js +1 -0
- package/dashboard/out/_next/static/chunks/a06d267a5c557657.js +1 -0
- package/dashboard/out/_next/static/chunks/a0eb8c81c54722fe.js +1 -0
- package/dashboard/out/_next/static/chunks/a16808e83106427d.js +1 -0
- package/dashboard/out/_next/static/chunks/a2215e2bc72739ef.js +1 -0
- package/dashboard/out/_next/static/chunks/a2de9e6696eb9c17.js +1 -0
- package/dashboard/out/_next/static/chunks/a33420b8c14090d6.js +1 -0
- package/dashboard/out/_next/static/chunks/a360bffef39d818b.js +1 -0
- package/dashboard/out/_next/static/chunks/a42852fdf5287cf5.js +1 -0
- package/dashboard/out/_next/static/chunks/a4efc88488322b67.js +1 -0
- package/dashboard/out/_next/static/chunks/a696a91d14101bdb.js +1 -0
- package/dashboard/out/_next/static/chunks/a6dad97d9634a72d.js +1 -0
- package/dashboard/out/_next/static/chunks/a6dad97d9634a72d.js.map +1 -0
- package/dashboard/out/_next/static/chunks/a705c7261712bd8e.js +1 -0
- package/dashboard/out/_next/static/chunks/a7d1e4b067ace180.js +1 -0
- package/dashboard/out/_next/static/chunks/a8590c121a7efaa5.js +1 -0
- package/dashboard/out/_next/static/chunks/a95953a83a6df6cf.js +1 -0
- package/dashboard/out/_next/static/chunks/a9d0a757d3b4afed.js +1 -0
- package/dashboard/out/_next/static/chunks/a9dc35514619c872.js +1 -0
- package/dashboard/out/_next/static/chunks/ab1821552066a74d.js +1 -0
- package/dashboard/out/_next/static/chunks/ac96bc0eccebe15a.js +1 -0
- package/dashboard/out/_next/static/chunks/acc03cfaaf6bb30f.js +1 -0
- package/dashboard/out/_next/static/chunks/acc298ae059b9fe4.js +1 -0
- package/dashboard/out/_next/static/chunks/ad076b6e996d250c.js +1 -0
- package/dashboard/out/_next/static/chunks/ae53b64af7ba16d5.js +1 -0
- package/dashboard/out/_next/static/chunks/ae5da7fa4bc5fa95.js +1 -0
- package/dashboard/out/_next/static/chunks/aefcf0eb033a155e.js +1 -0
- package/dashboard/out/_next/static/chunks/b12d43100ee10526.js +1 -0
- package/dashboard/out/_next/static/chunks/b137952dd5566a41.js +1 -0
- package/dashboard/out/_next/static/chunks/b2832d8a2d332a47.js +1 -0
- package/dashboard/out/_next/static/chunks/b417aa09c15f63c6.js +1 -0
- package/dashboard/out/_next/static/chunks/b48e152ba7bf6caf.js +1 -0
- package/dashboard/out/_next/static/chunks/b4cbef8e4714bf92.js +1 -0
- package/dashboard/out/_next/static/chunks/b568ff8383a37f53.js +1 -0
- package/dashboard/out/_next/static/chunks/b6e1495dd89a39e3.js +1 -0
- package/dashboard/out/_next/static/chunks/b73a21bd67528440.js +1 -0
- package/dashboard/out/_next/static/chunks/b77ee62bc71dcec7.js +1 -0
- package/dashboard/out/_next/static/chunks/b7f454615c11d4eb.js +1 -0
- package/dashboard/out/_next/static/chunks/b818ea32a839590f.js +1 -0
- package/dashboard/out/_next/static/chunks/b901ce78c1c65d66.js +1 -0
- package/dashboard/out/_next/static/chunks/b93d647b803be9fa.js +1 -0
- package/dashboard/out/_next/static/chunks/b960b09ff1ecd6bb.js +1 -0
- package/dashboard/out/_next/static/chunks/ba717c7779a778fc.js +1 -0
- package/dashboard/out/_next/static/chunks/bacb0ae7458d18b6.js +1 -0
- package/dashboard/out/_next/static/chunks/bb51f68b27346852.js +1 -0
- package/dashboard/out/_next/static/chunks/bb67f22e1ab632ae.js +1 -0
- package/dashboard/out/_next/static/chunks/bbae97ec58d1bb9d.js +1 -0
- package/dashboard/out/_next/static/chunks/bbaf38ee90307765.js +1 -0
- package/dashboard/out/_next/static/chunks/be01598fe1fce5db.js +1 -0
- package/dashboard/out/_next/static/chunks/bf4cbbc095987fec.js +1 -0
- package/dashboard/out/_next/static/chunks/c18f823797d57446.js +1 -0
- package/dashboard/out/_next/static/chunks/c1bcece34ec5b295.js +1 -0
- package/dashboard/out/_next/static/chunks/c1ccbc3a51adaf0a.js +1 -0
- package/dashboard/out/_next/static/chunks/c1f54a628f27791c.js +1 -0
- package/dashboard/out/_next/static/chunks/c21916bf5d232151.js +1 -0
- package/dashboard/out/_next/static/chunks/c27e570f0fc2f78b.js +1 -0
- package/dashboard/out/_next/static/chunks/c322b8005eebc0d8.js +1 -0
- package/dashboard/out/_next/static/chunks/c3900ac2b009b764.js +1 -0
- package/dashboard/out/_next/static/chunks/c3c597c8eb77ad6b.js +1 -0
- package/dashboard/out/_next/static/chunks/c58d45c1d88e208c.js +1 -0
- package/dashboard/out/_next/static/chunks/c63875998d7a655f.js +1 -0
- package/dashboard/out/_next/static/chunks/c6eaa7c8e7209c8e.js +1 -0
- package/dashboard/out/_next/static/chunks/c6f820f71162a59a.js +1 -0
- package/dashboard/out/_next/static/chunks/c7ce0941d1dfe7ed.js +1 -0
- package/dashboard/out/_next/static/chunks/c877259f784ec8e5.js +1 -0
- package/dashboard/out/_next/static/chunks/cb8057e86aaa1c68.js +1 -0
- package/dashboard/out/_next/static/chunks/ccb4e306ee4859b1.js +1 -0
- package/dashboard/out/_next/static/chunks/ccde62b0fa8112eb.js +1 -0
- package/dashboard/out/_next/static/chunks/cd421f0971c63c31.js +1 -0
- package/dashboard/out/_next/static/chunks/cde0317494d4adb7.js +1 -0
- package/dashboard/out/_next/static/chunks/cfae64434b92b8b6.js +1 -0
- package/dashboard/out/_next/static/chunks/cfc0e19310ec0a36.js +1 -0
- package/dashboard/out/_next/static/chunks/d0f344c7d0bcb59a.js +1 -0
- package/dashboard/out/_next/static/chunks/d1871c73e74e1f50.js +1 -0
- package/dashboard/out/_next/static/chunks/d18f658850711061.js +1 -0
- package/dashboard/out/_next/static/chunks/d25d9c48880697f6.js +1 -0
- package/dashboard/out/_next/static/chunks/d3f0a72bbc3060b0.js +1 -0
- package/dashboard/out/_next/static/chunks/d5fca429bc89060b.js +1 -0
- package/dashboard/out/_next/static/chunks/d6a6c75c9a4bef49.js +1 -0
- package/dashboard/out/_next/static/chunks/d6a8f93aa8f1e345.js +1 -0
- package/dashboard/out/_next/static/chunks/d7deab676b19ba0e.js +1 -0
- package/dashboard/out/_next/static/chunks/d80030dde88cec85.js +1 -0
- package/dashboard/out/_next/static/chunks/da84f9774c076ff1.js +1 -0
- package/dashboard/out/_next/static/chunks/da98ecc6b9b0ceb2.js +1 -0
- package/dashboard/out/_next/static/chunks/db550aabce60b912.js +4 -0
- package/dashboard/out/_next/static/chunks/dc87f77fcc029482.js +1 -0
- package/dashboard/out/_next/static/chunks/dd05f30acdb63a53.js +1 -0
- package/dashboard/out/_next/static/chunks/dea150155499b903.js +1 -0
- package/dashboard/out/_next/static/chunks/df4358754ff1d5e8.js +1 -0
- package/dashboard/out/_next/static/chunks/df8b21ff12d23b0e.js +1 -0
- package/dashboard/out/_next/static/chunks/df8fc68d77debf2c.js +1 -0
- package/dashboard/out/_next/static/chunks/df9ed1ffec90589f.js +1 -0
- package/dashboard/out/_next/static/chunks/dfa65ece1598f934.js +1 -0
- package/dashboard/out/_next/static/chunks/dfaab5cdd41a20d9.js +1 -0
- package/dashboard/out/_next/static/chunks/e00c03c942b5ae3e.js +1 -0
- package/dashboard/out/_next/static/chunks/e02d27cf679bece1.js +1 -0
- package/dashboard/out/_next/static/chunks/e0b747585f78513a.js +1 -0
- package/dashboard/out/_next/static/chunks/e19b71ca23fd7df0.js +1 -0
- package/dashboard/out/_next/static/chunks/e21cbe89d0cda120.js +1 -0
- package/dashboard/out/_next/static/chunks/e2a0386930edd34f.js +1 -0
- package/dashboard/out/_next/static/chunks/e375de19a36e2f38.js +1 -0
- package/dashboard/out/_next/static/chunks/e5241b4a6496a9e0.js +1 -0
- package/dashboard/out/_next/static/chunks/e569dd07c96eb4dd.js +1 -0
- package/dashboard/out/_next/static/chunks/e61c3ea91233f948.js +1 -0
- package/dashboard/out/_next/static/chunks/e73b42c5d34c4c28.js +1 -0
- package/dashboard/out/_next/static/chunks/e7c5b2105f651e87.js +1 -0
- package/dashboard/out/_next/static/chunks/e878e58a69bb01b6.js +1 -0
- package/dashboard/out/_next/static/chunks/e8f090a4dc571062.js +1 -0
- package/dashboard/out/_next/static/chunks/e98dc34dac91cdad.js +1 -0
- package/dashboard/out/_next/static/chunks/ea67cf7a0c5e7233.js +1 -0
- package/dashboard/out/_next/static/chunks/eacc98a1e3512fa9.js +1 -0
- package/dashboard/out/_next/static/chunks/eae9cd74d9bbed8b.js +1 -0
- package/dashboard/out/_next/static/chunks/eb187fd345852b34.js +1 -0
- package/dashboard/out/_next/static/chunks/ecea46df7a40b427.js +1 -0
- package/dashboard/out/_next/static/chunks/ecf48b83f4245d9c.js +1 -0
- package/dashboard/out/_next/static/chunks/eda41732bf966c6d.js +1 -0
- package/dashboard/out/_next/static/chunks/ee174a433049f43a.js +1 -0
- package/dashboard/out/_next/static/chunks/ee66b2d3b76de72e.js +1 -0
- package/dashboard/out/_next/static/chunks/ef058d3041c3d8ab.js +1 -0
- package/dashboard/out/_next/static/chunks/f3544b800b0d4969.js +1 -0
- package/dashboard/out/_next/static/chunks/f3b280e604b97509.js +1 -0
- package/dashboard/out/_next/static/chunks/f42e1d3693232993.js +1 -0
- package/dashboard/out/_next/static/chunks/f5a5fdd80166d304.js +1 -0
- package/dashboard/out/_next/static/chunks/f60adc5dd6169316.js +1 -0
- package/dashboard/out/_next/static/chunks/f6255bc2e6c68ce8.js +1 -0
- package/dashboard/out/_next/static/chunks/f6bb677d2d8840db.js +1 -0
- package/dashboard/out/_next/static/chunks/f6f3bf016239c33a.js +1 -0
- package/dashboard/out/_next/static/chunks/f6f57a46cd074bfe.js +1 -0
- package/dashboard/out/_next/static/chunks/f7feb9c1199e8cf6.js +1 -0
- package/dashboard/out/_next/static/chunks/f831087bf964cc3d.js +1 -0
- package/dashboard/out/_next/static/chunks/fa5a2f7244935aa2.js +1 -0
- package/dashboard/out/_next/static/chunks/fa73f36df4c38fa0.js +1 -0
- package/dashboard/out/_next/static/chunks/faa1461722d6a88d.js +1 -0
- package/dashboard/out/_next/static/chunks/fbf706b9a0edb7e6.js +1 -0
- package/dashboard/out/_next/static/chunks/fc2b8c8b7446bbc2.js +1 -0
- package/dashboard/out/_next/static/chunks/fd516f3930c128c1.js +1 -0
- package/dashboard/out/_next/static/chunks/fd663e7ff8de4887.js +1 -0
- package/dashboard/out/_next/static/chunks/fe5b656cc9bdd60e.js +1 -0
- package/dashboard/out/_next/static/chunks/turbopack-2f5dec4a537c0ee7.js +4 -0
- package/dashboard/out/_next/static/media/02263ebadd758ea4-s.8da66e7f.woff2 +0 -0
- package/dashboard/out/_next/static/media/2fe89d53234c61d4-s.cb53f04b.woff2 +0 -0
- package/dashboard/out/_next/static/media/59b15b4bcd7b1eb5-s.afa48be3.woff2 +0 -0
- package/dashboard/out/_next/static/media/5e05ae5b48faa55e-s.6b5ea6af.woff2 +0 -0
- package/dashboard/out/_next/static/media/68757d6cddeff913-s.e6cd1753.woff2 +0 -0
- package/dashboard/out/_next/static/media/99e609270109b47d-s.p.64b9304e.woff2 +0 -0
- package/dashboard/out/_next/static/media/a7afbb44bec2bb18-s.1dcddae6.woff2 +0 -0
- package/dashboard/out/_next/static/media/e390973e931a41c5-s.a82ecf4e.woff2 +0 -0
- package/dashboard/out/_next/static/media/e532fa1b9921e1cd-s.764b43eb.woff2 +0 -0
- package/dashboard/out/_next/static/media/effe91970fc4db64-s.p.19510058.woff2 +0 -0
- package/dashboard/out/_next/static/r0IG2GxFq9iYyuAJE8YMs/_buildManifest.js +11 -0
- package/dashboard/out/_next/static/r0IG2GxFq9iYyuAJE8YMs/_clientMiddlewareManifest.json +1 -0
- package/dashboard/out/_next/static/r0IG2GxFq9iYyuAJE8YMs/_ssgManifest.js +1 -0
- package/dashboard/out/_not-found/__next._full.txt +15 -0
- package/dashboard/out/_not-found/__next._head.txt +5 -0
- package/dashboard/out/_not-found/__next._index.txt +7 -0
- package/dashboard/out/_not-found/__next._not-found.__PAGE__.txt +5 -0
- package/dashboard/out/_not-found/__next._not-found.txt +4 -0
- package/dashboard/out/_not-found/__next._tree.txt +2 -0
- package/dashboard/out/_not-found/index.html +1 -0
- package/dashboard/out/_not-found/index.txt +15 -0
- package/dashboard/out/index.html +1 -0
- package/dashboard/out/index.txt +21 -0
- package/dashboard/out/project/__fallback/__next._full.txt +19 -0
- package/dashboard/out/project/__fallback/__next._head.txt +5 -0
- package/dashboard/out/project/__fallback/__next._index.txt +7 -0
- package/dashboard/out/project/__fallback/__next._tree.txt +5 -0
- package/dashboard/out/project/__fallback/__next.project.$d$name.__PAGE__.txt +7 -0
- package/dashboard/out/project/__fallback/__next.project.$d$name.txt +4 -0
- package/dashboard/out/project/__fallback/__next.project.txt +4 -0
- package/dashboard/out/project/__fallback/index.html +1 -0
- package/dashboard/out/project/__fallback/index.txt +19 -0
- package/package.json +5 -2
- package/src/command-center/server.test.ts +3 -7
- package/src/command-center/server.ts +4 -9
- package/src/command-center/static.test.ts +105 -0
- package/src/command-center/static.ts +122 -0
- package/src/launch.test.ts +1 -74
- package/src/launch.ts +49 -68
- package/src/lib/daemon.ts +23 -1
- package/src/lib/orchestrator.ts +9 -11
- package/src/stop.test.ts +1 -26
- package/src/stop.ts +1 -20
- package/src/widgets/lib/pane-comms.ts +15 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<!DOCTYPE html><!--r0IG2GxFq9iYyuAJE8YMs--><html lang="en" class="ibm_plex_mono_3af83e03-module__xSMCQa__variable"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/99e609270109b47d-s.p.64b9304e.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/effe91970fc4db64-s.p.19510058.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/chunks/4a46ad186a8587ee.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/b417aa09c15f63c6.js"/><script src="/_next/static/chunks/4b965aa320a9b358.js" async=""></script><script src="/_next/static/chunks/3e6d4834e0752f76.js" async=""></script><script src="/_next/static/chunks/96aff410a6ab106c.js" async=""></script><script src="/_next/static/chunks/db550aabce60b912.js" async=""></script><script src="/_next/static/chunks/turbopack-2f5dec4a537c0ee7.js" async=""></script><script src="/_next/static/chunks/d6a6c75c9a4bef49.js" async=""></script><script src="/_next/static/chunks/c322b8005eebc0d8.js" async=""></script><script src="/_next/static/chunks/5e49b008432770f1.js" async=""></script><script src="/_next/static/chunks/c6f820f71162a59a.js" async=""></script><meta name="next-size-adjust" content=""/><title>tmux-ide</title><meta name="description" content="Command center for tmux-ide"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="min-h-screen bg-[var(--bg)] text-[var(--fg)] antialiased text-[13px] leading-[1.5]" style="font-family:var(--font-mono), ui-monospace, monospace"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("data-theme","theme","dark",null,["light","dark"],null,true,true)</script><div class="h-6 flex items-center px-3 bg-[var(--bg-weak)] border-b text-[11px] sticky top-0 z-30"><span class="text-[var(--accent)] font-medium">tmux-ide</span><span class="flex-1"></span><span class="w-4"></span><span class="text-[var(--dim)] ml-3"></span></div><div class="h-screen flex flex-col"><div class="flex items-center justify-between px-4 h-7 bg-[var(--surface)] border-b border-[var(--border)] shrink-0"><span class="text-[var(--accent)]">tmux-ide command center</span><div class="flex items-center gap-2"><span class="inline-block w-[6px] h-[6px] bg-[var(--green)]"></span><span class="text-[var(--dim)]">0 sessions</span></div></div><div class="flex-1 overflow-auto"><div class="px-4 py-8 text-[var(--dim)]">no tmux-ide sessions running</div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/b417aa09c15f63c6.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[77198,[\"/_next/static/chunks/d6a6c75c9a4bef49.js\"],\"Providers\"]\n3:I[49429,[\"/_next/static/chunks/d6a6c75c9a4bef49.js\"],\"TopBar\"]\n4:I[76277,[\"/_next/static/chunks/c322b8005eebc0d8.js\",\"/_next/static/chunks/5e49b008432770f1.js\"],\"default\"]\n5:I[92511,[\"/_next/static/chunks/c322b8005eebc0d8.js\",\"/_next/static/chunks/5e49b008432770f1.js\"],\"default\"]\n6:I[94575,[\"/_next/static/chunks/c322b8005eebc0d8.js\",\"/_next/static/chunks/5e49b008432770f1.js\"],\"ClientPageRoot\"]\n7:I[77851,[\"/_next/static/chunks/d6a6c75c9a4bef49.js\",\"/_next/static/chunks/c6f820f71162a59a.js\"],\"default\"]\na:I[13013,[\"/_next/static/chunks/c322b8005eebc0d8.js\",\"/_next/static/chunks/5e49b008432770f1.js\"],\"OutletBoundary\"]\nb:\"$Sreact.suspense\"\nd:I[13013,[\"/_next/static/chunks/c322b8005eebc0d8.js\",\"/_next/static/chunks/5e49b008432770f1.js\"],\"ViewportBoundary\"]\nf:I[13013,[\"/_next/static/chunks/c322b8005eebc0d8.js\",\"/_next/static/chunks/5e49b008432770f1.js\"],\"MetadataBoundary\"]\n11:I[38848,[\"/_next/static/chunks/c322b8005eebc0d8.js\",\"/_next/static/chunks/5e49b008432770f1.js\"],\"default\"]\n:HL[\"/_next/static/chunks/4a46ad186a8587ee.css\",\"style\"]\n:HL[\"/_next/static/media/99e609270109b47d-s.p.64b9304e.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/effe91970fc4db64-s.p.19510058.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"r0IG2GxFq9iYyuAJE8YMs\",\"c\":[\"\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/4a46ad186a8587ee.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/d6a6c75c9a4bef49.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"ibm_plex_mono_3af83e03-module__xSMCQa__variable\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"min-h-screen bg-[var(--bg)] text-[var(--fg)] antialiased text-[13px] leading-[1.5]\",\"style\":{\"fontFamily\":\"var(--font-mono), ui-monospace, monospace\"},\"children\":[\"$\",\"$L2\",null,{\"children\":[[\"$\",\"$L3\",null,{}],[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L6\",null,{\"Component\":\"$7\",\"serverProvidedParams\":{\"searchParams\":{},\"params\":{},\"promises\":[\"$@8\",\"$@9\"]}}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/c6f820f71162a59a.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$La\",null,{\"children\":[\"$\",\"$b\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@c\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Ld\",null,{\"children\":\"$Le\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lf\",null,{\"children\":[\"$\",\"$b\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L10\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$11\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:{}\n9:\"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params\"\n"])</script><script>self.__next_f.push([1,"e:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"c:null\n10:[[\"$\",\"title\",\"0\",{\"children\":\"tmux-ide\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Command center for tmux-ide\"}]]\n"])</script></body></html>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
1:"$Sreact.fragment"
|
|
2
|
+
2:I[77198,["/_next/static/chunks/d6a6c75c9a4bef49.js"],"Providers"]
|
|
3
|
+
3:I[49429,["/_next/static/chunks/d6a6c75c9a4bef49.js"],"TopBar"]
|
|
4
|
+
4:I[76277,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"default"]
|
|
5
|
+
5:I[92511,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"default"]
|
|
6
|
+
6:I[94575,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"ClientPageRoot"]
|
|
7
|
+
7:I[77851,["/_next/static/chunks/d6a6c75c9a4bef49.js","/_next/static/chunks/c6f820f71162a59a.js"],"default"]
|
|
8
|
+
a:I[13013,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"OutletBoundary"]
|
|
9
|
+
b:"$Sreact.suspense"
|
|
10
|
+
d:I[13013,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"ViewportBoundary"]
|
|
11
|
+
f:I[13013,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"MetadataBoundary"]
|
|
12
|
+
11:I[38848,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"default"]
|
|
13
|
+
:HL["/_next/static/chunks/4a46ad186a8587ee.css","style"]
|
|
14
|
+
:HL["/_next/static/media/99e609270109b47d-s.p.64b9304e.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
15
|
+
:HL["/_next/static/media/effe91970fc4db64-s.p.19510058.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
16
|
+
0:{"P":null,"b":"r0IG2GxFq9iYyuAJE8YMs","c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/4a46ad186a8587ee.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/d6a6c75c9a4bef49.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"ibm_plex_mono_3af83e03-module__xSMCQa__variable","suppressHydrationWarning":true,"children":["$","body",null,{"className":"min-h-screen bg-[var(--bg)] text-[var(--fg)] antialiased text-[13px] leading-[1.5]","style":{"fontFamily":"var(--font-mono), ui-monospace, monospace"},"children":["$","$L2",null,{"children":[["$","$L3",null,{}],["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]]}]}]}]]}],{"children":[["$","$1","c",{"children":[["$","$L6",null,{"Component":"$7","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@8","$@9"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/c6f820f71162a59a.js","async":true,"nonce":"$undefined"}]],["$","$La",null,{"children":["$","$b",null,{"name":"Next.MetadataOutlet","children":"$@c"}]}]]}],{},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$Ld",null,{"children":"$Le"}],["$","div",null,{"hidden":true,"children":["$","$Lf",null,{"children":["$","$b",null,{"name":"Next.Metadata","children":"$L10"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$11",[]],"S":true}
|
|
17
|
+
8:{}
|
|
18
|
+
9:"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params"
|
|
19
|
+
e:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
20
|
+
c:null
|
|
21
|
+
10:[["$","title","0",{"children":"tmux-ide"}],["$","meta","1",{"name":"description","content":"Command center for tmux-ide"}]]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
1:"$Sreact.fragment"
|
|
2
|
+
2:I[77198,["/_next/static/chunks/d6a6c75c9a4bef49.js"],"Providers"]
|
|
3
|
+
3:I[49429,["/_next/static/chunks/d6a6c75c9a4bef49.js"],"TopBar"]
|
|
4
|
+
4:I[76277,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"default"]
|
|
5
|
+
5:I[92511,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"default"]
|
|
6
|
+
6:I[36508,["/_next/static/chunks/d6a6c75c9a4bef49.js","/_next/static/chunks/bbaf38ee90307765.js","/_next/static/chunks/422e1bb4d41ce5ba.js"],"default",1]
|
|
7
|
+
7:I[13013,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"OutletBoundary"]
|
|
8
|
+
8:"$Sreact.suspense"
|
|
9
|
+
a:I[13013,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"ViewportBoundary"]
|
|
10
|
+
c:I[13013,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"MetadataBoundary"]
|
|
11
|
+
e:I[38848,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"default"]
|
|
12
|
+
:HL["/_next/static/chunks/4a46ad186a8587ee.css","style"]
|
|
13
|
+
:HL["/_next/static/media/99e609270109b47d-s.p.64b9304e.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
14
|
+
:HL["/_next/static/media/effe91970fc4db64-s.p.19510058.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
15
|
+
:HL["/_next/static/chunks/804d718be0370058.css","style"]
|
|
16
|
+
0:{"P":null,"b":"r0IG2GxFq9iYyuAJE8YMs","c":["","project","__fallback",""],"q":"","i":false,"f":[[["",{"children":["project",{"children":[["name","__fallback","d"],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/4a46ad186a8587ee.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/d6a6c75c9a4bef49.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"ibm_plex_mono_3af83e03-module__xSMCQa__variable","suppressHydrationWarning":true,"children":["$","body",null,{"className":"min-h-screen bg-[var(--bg)] text-[var(--fg)] antialiased text-[13px] leading-[1.5]","style":{"fontFamily":"var(--font-mono), ui-monospace, monospace"},"children":["$","$L2",null,{"children":[["$","$L3",null,{}],["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]]}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L6",null,{}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/804d718be0370058.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/bbaf38ee90307765.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/422e1bb4d41ce5ba.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"children":["$","$8",null,{"name":"Next.MetadataOutlet","children":"$@9"}]}]]}],{},null,false,false]},null,false,false]},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$La",null,{"children":"$Lb"}],["$","div",null,{"hidden":true,"children":["$","$Lc",null,{"children":["$","$8",null,{"name":"Next.Metadata","children":"$Ld"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$e",[]],"S":true}
|
|
17
|
+
b:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
18
|
+
9:null
|
|
19
|
+
d:[["$","title","0",{"children":"tmux-ide"}],["$","meta","1",{"name":"description","content":"Command center for tmux-ide"}]]
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
1:"$Sreact.fragment"
|
|
2
|
+
2:I[13013,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"ViewportBoundary"]
|
|
3
|
+
3:I[13013,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"MetadataBoundary"]
|
|
4
|
+
4:"$Sreact.suspense"
|
|
5
|
+
0:{"buildId":"r0IG2GxFq9iYyuAJE8YMs","rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"tmux-ide"}],["$","meta","1",{"name":"description","content":"Command center for tmux-ide"}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"loading":null,"isPartial":false}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
1:"$Sreact.fragment"
|
|
2
|
+
2:I[77198,["/_next/static/chunks/d6a6c75c9a4bef49.js"],"Providers"]
|
|
3
|
+
3:I[49429,["/_next/static/chunks/d6a6c75c9a4bef49.js"],"TopBar"]
|
|
4
|
+
4:I[76277,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"default"]
|
|
5
|
+
5:I[92511,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"default"]
|
|
6
|
+
:HL["/_next/static/chunks/4a46ad186a8587ee.css","style"]
|
|
7
|
+
0:{"buildId":"r0IG2GxFq9iYyuAJE8YMs","rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/4a46ad186a8587ee.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/d6a6c75c9a4bef49.js","async":true}]],["$","html",null,{"lang":"en","className":"ibm_plex_mono_3af83e03-module__xSMCQa__variable","suppressHydrationWarning":true,"children":["$","body",null,{"className":"min-h-screen bg-[var(--bg)] text-[var(--fg)] antialiased text-[13px] leading-[1.5]","style":{"fontFamily":"var(--font-mono), ui-monospace, monospace"},"children":["$","$L2",null,{"children":[["$","$L3",null,{}],["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]]}]}]}]]}],"loading":null,"isPartial":false}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
:HL["/_next/static/chunks/4a46ad186a8587ee.css","style"]
|
|
2
|
+
:HL["/_next/static/media/99e609270109b47d-s.p.64b9304e.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
3
|
+
:HL["/_next/static/media/effe91970fc4db64-s.p.19510058.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
4
|
+
:HL["/_next/static/chunks/804d718be0370058.css","style"]
|
|
5
|
+
0:{"buildId":"r0IG2GxFq9iYyuAJE8YMs","tree":{"name":"","paramType":null,"paramKey":"","hasRuntimePrefetch":false,"slots":{"children":{"name":"project","paramType":null,"paramKey":"project","hasRuntimePrefetch":false,"slots":{"children":{"name":"name","paramType":"d","paramKey":"__fallback","hasRuntimePrefetch":false,"slots":{"children":{"name":"__PAGE__","paramType":null,"paramKey":"__PAGE__","hasRuntimePrefetch":false,"slots":null,"isRootLayout":false}},"isRootLayout":false}},"isRootLayout":false}},"isRootLayout":true},"staleTime":300}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
1:"$Sreact.fragment"
|
|
2
|
+
2:I[36508,["/_next/static/chunks/d6a6c75c9a4bef49.js","/_next/static/chunks/bbaf38ee90307765.js","/_next/static/chunks/422e1bb4d41ce5ba.js"],"default",1]
|
|
3
|
+
3:I[13013,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"OutletBoundary"]
|
|
4
|
+
4:"$Sreact.suspense"
|
|
5
|
+
:HL["/_next/static/chunks/804d718be0370058.css","style"]
|
|
6
|
+
0:{"buildId":"r0IG2GxFq9iYyuAJE8YMs","rsc":["$","$1","c",{"children":[["$","$L2",null,{}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/804d718be0370058.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/bbaf38ee90307765.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/422e1bb4d41ce5ba.js","async":true}]],["$","$L3",null,{"children":["$","$4",null,{"name":"Next.MetadataOutlet","children":"$@5"}]}]]}],"loading":null,"isPartial":false}
|
|
7
|
+
5:null
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
1:"$Sreact.fragment"
|
|
2
|
+
2:I[76277,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"default"]
|
|
3
|
+
3:I[92511,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"default"]
|
|
4
|
+
0:{"buildId":"r0IG2GxFq9iYyuAJE8YMs","rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"loading":null,"isPartial":false}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
1:"$Sreact.fragment"
|
|
2
|
+
2:I[76277,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"default"]
|
|
3
|
+
3:I[92511,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"default"]
|
|
4
|
+
0:{"buildId":"r0IG2GxFq9iYyuAJE8YMs","rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"loading":null,"isPartial":false}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<!DOCTYPE html><!--r0IG2GxFq9iYyuAJE8YMs--><html lang="en" class="ibm_plex_mono_3af83e03-module__xSMCQa__variable"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/99e609270109b47d-s.p.64b9304e.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/effe91970fc4db64-s.p.19510058.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/chunks/4a46ad186a8587ee.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/chunks/804d718be0370058.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/b417aa09c15f63c6.js"/><script src="/_next/static/chunks/4b965aa320a9b358.js" async=""></script><script src="/_next/static/chunks/3e6d4834e0752f76.js" async=""></script><script src="/_next/static/chunks/96aff410a6ab106c.js" async=""></script><script src="/_next/static/chunks/db550aabce60b912.js" async=""></script><script src="/_next/static/chunks/turbopack-2f5dec4a537c0ee7.js" async=""></script><script src="/_next/static/chunks/d6a6c75c9a4bef49.js" async=""></script><script src="/_next/static/chunks/c322b8005eebc0d8.js" async=""></script><script src="/_next/static/chunks/5e49b008432770f1.js" async=""></script><script src="/_next/static/chunks/bbaf38ee90307765.js" async=""></script><script src="/_next/static/chunks/422e1bb4d41ce5ba.js" async=""></script><meta name="next-size-adjust" content=""/><title>tmux-ide</title><meta name="description" content="Command center for tmux-ide"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="min-h-screen bg-[var(--bg)] text-[var(--fg)] antialiased text-[13px] leading-[1.5]" style="font-family:var(--font-mono), ui-monospace, monospace"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("data-theme","theme","dark",null,["light","dark"],null,true,true)</script><div class="h-6 flex items-center px-3 bg-[var(--bg-weak)] border-b text-[11px] sticky top-0 z-30"><span class="text-[var(--accent)] font-medium">tmux-ide</span><span class="flex-1"></span><span class="w-4"></span><span class="text-[var(--dim)] ml-3"></span></div><div class="h-screen flex items-center justify-center text-[var(--dim)]">loading...</div><!--$--><!--/$--><script src="/_next/static/chunks/b417aa09c15f63c6.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[77198,[\"/_next/static/chunks/d6a6c75c9a4bef49.js\"],\"Providers\"]\n3:I[49429,[\"/_next/static/chunks/d6a6c75c9a4bef49.js\"],\"TopBar\"]\n4:I[76277,[\"/_next/static/chunks/c322b8005eebc0d8.js\",\"/_next/static/chunks/5e49b008432770f1.js\"],\"default\"]\n5:I[92511,[\"/_next/static/chunks/c322b8005eebc0d8.js\",\"/_next/static/chunks/5e49b008432770f1.js\"],\"default\"]\n6:I[36508,[\"/_next/static/chunks/d6a6c75c9a4bef49.js\",\"/_next/static/chunks/bbaf38ee90307765.js\",\"/_next/static/chunks/422e1bb4d41ce5ba.js\"],\"default\",1]\n7:I[13013,[\"/_next/static/chunks/c322b8005eebc0d8.js\",\"/_next/static/chunks/5e49b008432770f1.js\"],\"OutletBoundary\"]\n8:\"$Sreact.suspense\"\na:I[13013,[\"/_next/static/chunks/c322b8005eebc0d8.js\",\"/_next/static/chunks/5e49b008432770f1.js\"],\"ViewportBoundary\"]\nc:I[13013,[\"/_next/static/chunks/c322b8005eebc0d8.js\",\"/_next/static/chunks/5e49b008432770f1.js\"],\"MetadataBoundary\"]\ne:I[38848,[\"/_next/static/chunks/c322b8005eebc0d8.js\",\"/_next/static/chunks/5e49b008432770f1.js\"],\"default\"]\n:HL[\"/_next/static/chunks/4a46ad186a8587ee.css\",\"style\"]\n:HL[\"/_next/static/media/99e609270109b47d-s.p.64b9304e.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/effe91970fc4db64-s.p.19510058.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/chunks/804d718be0370058.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"r0IG2GxFq9iYyuAJE8YMs\",\"c\":[\"\",\"project\",\"__fallback\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"project\",{\"children\":[[\"name\",\"__fallback\",\"d\"],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/4a46ad186a8587ee.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/d6a6c75c9a4bef49.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"ibm_plex_mono_3af83e03-module__xSMCQa__variable\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"min-h-screen bg-[var(--bg)] text-[var(--fg)] antialiased text-[13px] leading-[1.5]\",\"style\":{\"fontFamily\":\"var(--font-mono), ui-monospace, monospace\"},\"children\":[\"$\",\"$L2\",null,{\"children\":[[\"$\",\"$L3\",null,{}],[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L6\",null,{}],[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/804d718be0370058.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/bbaf38ee90307765.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/422e1bb4d41ce5ba.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@9\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"9:null\nd:[[\"$\",\"title\",\"0\",{\"children\":\"tmux-ide\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Command center for tmux-ide\"}]]\n"])</script></body></html>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
1:"$Sreact.fragment"
|
|
2
|
+
2:I[77198,["/_next/static/chunks/d6a6c75c9a4bef49.js"],"Providers"]
|
|
3
|
+
3:I[49429,["/_next/static/chunks/d6a6c75c9a4bef49.js"],"TopBar"]
|
|
4
|
+
4:I[76277,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"default"]
|
|
5
|
+
5:I[92511,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"default"]
|
|
6
|
+
6:I[36508,["/_next/static/chunks/d6a6c75c9a4bef49.js","/_next/static/chunks/bbaf38ee90307765.js","/_next/static/chunks/422e1bb4d41ce5ba.js"],"default",1]
|
|
7
|
+
7:I[13013,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"OutletBoundary"]
|
|
8
|
+
8:"$Sreact.suspense"
|
|
9
|
+
a:I[13013,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"ViewportBoundary"]
|
|
10
|
+
c:I[13013,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"MetadataBoundary"]
|
|
11
|
+
e:I[38848,["/_next/static/chunks/c322b8005eebc0d8.js","/_next/static/chunks/5e49b008432770f1.js"],"default"]
|
|
12
|
+
:HL["/_next/static/chunks/4a46ad186a8587ee.css","style"]
|
|
13
|
+
:HL["/_next/static/media/99e609270109b47d-s.p.64b9304e.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
14
|
+
:HL["/_next/static/media/effe91970fc4db64-s.p.19510058.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
15
|
+
:HL["/_next/static/chunks/804d718be0370058.css","style"]
|
|
16
|
+
0:{"P":null,"b":"r0IG2GxFq9iYyuAJE8YMs","c":["","project","__fallback",""],"q":"","i":false,"f":[[["",{"children":["project",{"children":[["name","__fallback","d"],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/4a46ad186a8587ee.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/d6a6c75c9a4bef49.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"ibm_plex_mono_3af83e03-module__xSMCQa__variable","suppressHydrationWarning":true,"children":["$","body",null,{"className":"min-h-screen bg-[var(--bg)] text-[var(--fg)] antialiased text-[13px] leading-[1.5]","style":{"fontFamily":"var(--font-mono), ui-monospace, monospace"},"children":["$","$L2",null,{"children":[["$","$L3",null,{}],["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]]}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L6",null,{}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/804d718be0370058.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/bbaf38ee90307765.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/422e1bb4d41ce5ba.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"children":["$","$8",null,{"name":"Next.MetadataOutlet","children":"$@9"}]}]]}],{},null,false,false]},null,false,false]},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$La",null,{"children":"$Lb"}],["$","div",null,{"hidden":true,"children":["$","$Lc",null,{"children":["$","$8",null,{"name":"Next.Metadata","children":"$Ld"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$e",[]],"S":true}
|
|
17
|
+
b:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
18
|
+
9:null
|
|
19
|
+
d:[["$","title","0",{"children":"tmux-ide"}],["$","meta","1",{"name":"description","content":"Command center for tmux-ide"}]]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tmux-ide",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "Turn any project into a tmux-powered terminal IDE with a simple ide.yml",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -11,10 +11,13 @@
|
|
|
11
11
|
"src",
|
|
12
12
|
"scripts",
|
|
13
13
|
"skill",
|
|
14
|
-
"templates"
|
|
14
|
+
"templates",
|
|
15
|
+
"dashboard/out"
|
|
15
16
|
],
|
|
16
17
|
"scripts": {
|
|
17
18
|
"build": "tsc --noEmit",
|
|
19
|
+
"build:dashboard": "cd dashboard && npx next build",
|
|
20
|
+
"prepublishOnly": "npm run build:dashboard",
|
|
18
21
|
"typecheck": "tsc --noEmit",
|
|
19
22
|
"dev": "bun bin/cli.ts",
|
|
20
23
|
"test": "bun test",
|
|
@@ -490,15 +490,11 @@ describe("GET /api/events (SSE)", () => {
|
|
|
490
490
|
});
|
|
491
491
|
|
|
492
492
|
describe("GET /", () => {
|
|
493
|
-
it("returns
|
|
493
|
+
it("returns a response for root path", async () => {
|
|
494
494
|
const app = createApp();
|
|
495
495
|
const res = await app.request("/");
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
const body = (await res.json()) as { status: string; message: string; docs: string };
|
|
499
|
-
expect(body.status).toBe("ok");
|
|
500
|
-
expect(body.message).toBe("tmux-ide command center API");
|
|
501
|
-
expect(body.docs).toBe("/api/sessions");
|
|
496
|
+
// With dashboard/out: serves HTML (200). Without: middleware falls through (404).
|
|
497
|
+
expect([200, 404]).toContain(res.status);
|
|
502
498
|
});
|
|
503
499
|
});
|
|
504
500
|
|
|
@@ -79,6 +79,7 @@ import { TunnelManager } from "../lib/tunnels/manager.ts";
|
|
|
79
79
|
import { RemoteRegistry } from "../lib/hq/registry.ts";
|
|
80
80
|
import { RegistrationPayloadSchema } from "../lib/hq/types.ts";
|
|
81
81
|
import { dispatchResearch, loadResearchState } from "../lib/research.ts";
|
|
82
|
+
import { serveDashboard } from "./static.ts";
|
|
82
83
|
|
|
83
84
|
export interface CreateAppOptions {
|
|
84
85
|
authService?: AuthService;
|
|
@@ -1409,18 +1410,12 @@ export function createApp(options: CreateAppOptions = {}): Hono {
|
|
|
1409
1410
|
return c.json({
|
|
1410
1411
|
ok: true,
|
|
1411
1412
|
uptime: Math.round(process.uptime()),
|
|
1412
|
-
version: "2.
|
|
1413
|
+
version: "2.1.0",
|
|
1413
1414
|
});
|
|
1414
1415
|
});
|
|
1415
1416
|
|
|
1416
|
-
//
|
|
1417
|
-
app.
|
|
1418
|
-
return c.json({
|
|
1419
|
-
status: "ok",
|
|
1420
|
-
message: "tmux-ide command center API",
|
|
1421
|
-
docs: "/api/sessions",
|
|
1422
|
-
});
|
|
1423
|
-
});
|
|
1417
|
+
// Serve the Next.js static dashboard for all non-API routes
|
|
1418
|
+
app.use("*", serveDashboard());
|
|
1424
1419
|
|
|
1425
1420
|
return app;
|
|
1426
1421
|
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { describe, it, expect } from "bun:test";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { resolve, dirname, join } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { Hono } from "hono";
|
|
6
|
+
import { serveDashboard } from "./static.ts";
|
|
7
|
+
|
|
8
|
+
const pkgRoot = resolve(dirname(fileURLToPath(import.meta.url)), "../..");
|
|
9
|
+
const outDir = join(pkgRoot, "dashboard", "out");
|
|
10
|
+
const hasDashboardBuild = existsSync(join(outDir, "index.html"));
|
|
11
|
+
|
|
12
|
+
describe("serveDashboard", () => {
|
|
13
|
+
it("serves index.html for root path", async () => {
|
|
14
|
+
if (!hasDashboardBuild) return; // skip in CI where dashboard isn't built
|
|
15
|
+
|
|
16
|
+
const app = new Hono();
|
|
17
|
+
app.get("/api/test", (c) => c.json({ ok: true }));
|
|
18
|
+
app.use("*", serveDashboard());
|
|
19
|
+
|
|
20
|
+
const res = await app.request("/");
|
|
21
|
+
expect(res.status).toBe(200);
|
|
22
|
+
const contentType = res.headers.get("content-type");
|
|
23
|
+
expect(contentType).toContain("text/html");
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it("does not intercept /api routes", async () => {
|
|
27
|
+
const app = new Hono();
|
|
28
|
+
app.get("/api/test", (c) => c.json({ ok: true }));
|
|
29
|
+
app.use("*", serveDashboard());
|
|
30
|
+
|
|
31
|
+
const res = await app.request("/api/test");
|
|
32
|
+
expect(res.status).toBe(200);
|
|
33
|
+
const body = await res.json();
|
|
34
|
+
expect(body).toEqual({ ok: true });
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it("does not intercept /health", async () => {
|
|
38
|
+
const app = new Hono();
|
|
39
|
+
app.get("/health", (c) => c.json({ ok: true }));
|
|
40
|
+
app.use("*", serveDashboard());
|
|
41
|
+
|
|
42
|
+
const res = await app.request("/health");
|
|
43
|
+
expect(res.status).toBe(200);
|
|
44
|
+
const body = await res.json();
|
|
45
|
+
expect(body).toEqual({ ok: true });
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it("serves fallback HTML for /project/any-name/", async () => {
|
|
49
|
+
if (!hasDashboardBuild) return; // skip in CI where dashboard isn't built
|
|
50
|
+
|
|
51
|
+
const app = new Hono();
|
|
52
|
+
app.use("*", serveDashboard());
|
|
53
|
+
|
|
54
|
+
const res = await app.request("/project/my-project/");
|
|
55
|
+
expect(res.status).toBe(200);
|
|
56
|
+
const contentType = res.headers.get("content-type");
|
|
57
|
+
expect(contentType).toContain("text/html");
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it("sets immutable cache for _next/static assets", async () => {
|
|
61
|
+
if (!hasDashboardBuild) return; // skip in CI where dashboard isn't built
|
|
62
|
+
|
|
63
|
+
const app = new Hono();
|
|
64
|
+
app.use("*", serveDashboard());
|
|
65
|
+
|
|
66
|
+
const { readdirSync } = await import("node:fs");
|
|
67
|
+
|
|
68
|
+
const staticDir = join(outDir, "_next", "static");
|
|
69
|
+
if (!existsSync(staticDir)) return;
|
|
70
|
+
|
|
71
|
+
const findFile = (dir: string): string | null => {
|
|
72
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
73
|
+
if (entry.isFile() && entry.name.endsWith(".js")) {
|
|
74
|
+
return `/_next/static/${dir.slice(staticDir.length + 1)}/${entry.name}`.replace(
|
|
75
|
+
/\/+/g,
|
|
76
|
+
"/",
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
if (entry.isDirectory()) {
|
|
80
|
+
const found = findFile(join(dir, entry.name));
|
|
81
|
+
if (found) return found;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const jsFile = findFile(staticDir);
|
|
88
|
+
if (jsFile) {
|
|
89
|
+
const res = await app.request(jsFile);
|
|
90
|
+
expect(res.status).toBe(200);
|
|
91
|
+
const cacheControl = res.headers.get("cache-control");
|
|
92
|
+
expect(cacheControl).toContain("immutable");
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
it("falls through when dashboard is not built", async () => {
|
|
97
|
+
// Simulate no dashboard by using a middleware that won't find files
|
|
98
|
+
const app = new Hono();
|
|
99
|
+
app.use("*", serveDashboard());
|
|
100
|
+
app.all("*", (c) => c.json({ fallback: true }, 200));
|
|
101
|
+
|
|
102
|
+
const res = await app.request("/nonexistent-path");
|
|
103
|
+
expect(res.status).toBe(200);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
2
|
+
import { resolve, dirname, join, extname } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import type { MiddlewareHandler } from "hono";
|
|
5
|
+
|
|
6
|
+
const MIME_TYPES: Record<string, string> = {
|
|
7
|
+
".html": "text/html; charset=utf-8",
|
|
8
|
+
".js": "application/javascript; charset=utf-8",
|
|
9
|
+
".css": "text/css; charset=utf-8",
|
|
10
|
+
".json": "application/json; charset=utf-8",
|
|
11
|
+
".svg": "image/svg+xml",
|
|
12
|
+
".png": "image/png",
|
|
13
|
+
".ico": "image/x-icon",
|
|
14
|
+
".woff2": "font/woff2",
|
|
15
|
+
".txt": "text/plain; charset=utf-8",
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/** File read cache: path -> { content, mimeType } */
|
|
19
|
+
const fileCache = new Map<string, { content: Uint8Array; mimeType: string }>();
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Resolve the dashboard `out/` directory.
|
|
23
|
+
* Works both in development (running from source) and after npm install.
|
|
24
|
+
*/
|
|
25
|
+
function resolveDashboardOut(): string | null {
|
|
26
|
+
const pkgRoot = resolve(dirname(fileURLToPath(import.meta.url)), "../..");
|
|
27
|
+
const outDir = join(pkgRoot, "dashboard", "out");
|
|
28
|
+
if (existsSync(outDir)) return outDir;
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Read a file from the out directory, returning cached result if available.
|
|
34
|
+
*/
|
|
35
|
+
function readCached(filePath: string): { content: Uint8Array; mimeType: string } | null {
|
|
36
|
+
const cached = fileCache.get(filePath);
|
|
37
|
+
if (cached) return cached;
|
|
38
|
+
|
|
39
|
+
if (!existsSync(filePath) || !statSync(filePath).isFile()) return null;
|
|
40
|
+
|
|
41
|
+
const ext = extname(filePath);
|
|
42
|
+
const mimeType = MIME_TYPES[ext] ?? "application/octet-stream";
|
|
43
|
+
const content = new Uint8Array(readFileSync(filePath));
|
|
44
|
+
const entry = { content, mimeType };
|
|
45
|
+
fileCache.set(filePath, entry);
|
|
46
|
+
return entry;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Determine the Cache-Control header for a given URL path.
|
|
51
|
+
*/
|
|
52
|
+
function cacheControl(urlPath: string, mimeType: string): string {
|
|
53
|
+
if (urlPath.startsWith("/_next/static/")) {
|
|
54
|
+
return "public, max-age=31536000, immutable";
|
|
55
|
+
}
|
|
56
|
+
if (mimeType.startsWith("text/html")) {
|
|
57
|
+
return "no-cache";
|
|
58
|
+
}
|
|
59
|
+
return "public, max-age=3600";
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Hono middleware that serves the Next.js static export from dashboard/out/.
|
|
64
|
+
* Gracefully no-ops if the out/ directory does not exist.
|
|
65
|
+
*/
|
|
66
|
+
export function serveDashboard(): MiddlewareHandler {
|
|
67
|
+
const outDir = resolveDashboardOut();
|
|
68
|
+
|
|
69
|
+
// If no out/ directory, return a no-op middleware
|
|
70
|
+
if (!outDir) {
|
|
71
|
+
return async (_c, next) => {
|
|
72
|
+
await next();
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return async (c, next) => {
|
|
77
|
+
const path = new URL(c.req.url).pathname;
|
|
78
|
+
|
|
79
|
+
// Skip API, WebSocket, and health routes — let them fall through
|
|
80
|
+
if (path.startsWith("/api/") || path.startsWith("/ws/") || path === "/health") {
|
|
81
|
+
await next();
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Normalize: strip trailing slash (except for root "/")
|
|
86
|
+
const normalized = path !== "/" && path.endsWith("/") ? path.slice(0, -1) : path;
|
|
87
|
+
|
|
88
|
+
const serve = (file: { content: Uint8Array; mimeType: string }): Response =>
|
|
89
|
+
new Response(new Uint8Array(file.content) as Uint8Array<ArrayBuffer>, {
|
|
90
|
+
status: 200,
|
|
91
|
+
headers: {
|
|
92
|
+
"Content-Type": file.mimeType,
|
|
93
|
+
"Cache-Control": cacheControl(path, file.mimeType),
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
// 1. Try exact file match (e.g. /_next/static/chunks/abc.js)
|
|
98
|
+
const exactPath = join(outDir, normalized);
|
|
99
|
+
const exactFile = readCached(exactPath);
|
|
100
|
+
if (exactFile) return serve(exactFile);
|
|
101
|
+
|
|
102
|
+
// 2. Try index.html inside directory (e.g. /foo/ -> out/foo/index.html)
|
|
103
|
+
const indexPath = join(outDir, normalized, "index.html");
|
|
104
|
+
const indexFile = readCached(indexPath);
|
|
105
|
+
if (indexFile) return serve(indexFile);
|
|
106
|
+
|
|
107
|
+
// 3. SPA fallback for /project/* dynamic routes
|
|
108
|
+
if (normalized.startsWith("/project/")) {
|
|
109
|
+
const fallbackPath = join(outDir, "project", "__fallback", "index.html");
|
|
110
|
+
const fallbackFile = readCached(fallbackPath);
|
|
111
|
+
if (fallbackFile) return serve(fallbackFile);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// 4. General SPA fallback — serve out/index.html for client-side routing
|
|
115
|
+
const rootIndex = join(outDir, "index.html");
|
|
116
|
+
const rootFile = readCached(rootIndex);
|
|
117
|
+
if (rootFile) return serve(rootFile);
|
|
118
|
+
|
|
119
|
+
// Nothing found; let other handlers take over
|
|
120
|
+
await next();
|
|
121
|
+
};
|
|
122
|
+
}
|
package/src/launch.test.ts
CHANGED
|
@@ -2,13 +2,7 @@ import { describe, it, beforeEach, afterEach, expect } from "bun:test";
|
|
|
2
2
|
import { mkdtempSync, rmSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
3
|
import { tmpdir } from "node:os";
|
|
4
4
|
import { join } from "node:path";
|
|
5
|
-
import {
|
|
6
|
-
buildPaneMap,
|
|
7
|
-
waitForPaneCommand,
|
|
8
|
-
ensureTaskDocs,
|
|
9
|
-
resolveDashboardDir,
|
|
10
|
-
startDashboard,
|
|
11
|
-
} from "./launch.ts";
|
|
5
|
+
import { buildPaneMap, waitForPaneCommand, ensureTaskDocs } from "./launch.ts";
|
|
12
6
|
|
|
13
7
|
describe("buildPaneMap", () => {
|
|
14
8
|
it("uses returned pane ids instead of assuming sequential numbering", () => {
|
|
@@ -153,70 +147,3 @@ describe("ensureTaskDocs", () => {
|
|
|
153
147
|
expect(first).toBe(second);
|
|
154
148
|
});
|
|
155
149
|
});
|
|
156
|
-
|
|
157
|
-
describe("dashboard helpers", () => {
|
|
158
|
-
it("detects a dashboard directory from the package root", () => {
|
|
159
|
-
const root = join(import.meta.dir, "..");
|
|
160
|
-
expect(resolveDashboardDir(root)).toBe(join(root, "dashboard"));
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
it("returns null when the dashboard directory is missing", () => {
|
|
164
|
-
expect(resolveDashboardDir("/definitely/missing-root")).toBe(null);
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
it("starts the dashboard and stores pid and url", () => {
|
|
168
|
-
const sessionVars: Array<{ name: string; value: string }> = [];
|
|
169
|
-
let spawned: {
|
|
170
|
-
command: string;
|
|
171
|
-
args: readonly string[];
|
|
172
|
-
envValue: string | undefined;
|
|
173
|
-
cwd?: string;
|
|
174
|
-
} | null = null;
|
|
175
|
-
|
|
176
|
-
const url = startDashboard("proj", 6060, {
|
|
177
|
-
dashboardPort: 6061,
|
|
178
|
-
dashboardDir: "/workspace/dashboard",
|
|
179
|
-
spawnFn: (command, args, options) => {
|
|
180
|
-
spawned = {
|
|
181
|
-
command,
|
|
182
|
-
args,
|
|
183
|
-
envValue: options.env?.NEXT_PUBLIC_API_URL,
|
|
184
|
-
cwd: options.cwd,
|
|
185
|
-
};
|
|
186
|
-
return { pid: 4321, unref: () => {} };
|
|
187
|
-
},
|
|
188
|
-
setVar: (_session, name, value) => {
|
|
189
|
-
sessionVars.push({ name, value });
|
|
190
|
-
},
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
expect(url).toBe("http://localhost:6061");
|
|
194
|
-
expect(spawned).toEqual({
|
|
195
|
-
command: "pnpm",
|
|
196
|
-
args: ["dev", "--port", "6061"],
|
|
197
|
-
envValue: "http://localhost:6060",
|
|
198
|
-
cwd: "/workspace/dashboard",
|
|
199
|
-
});
|
|
200
|
-
expect(sessionVars).toEqual([
|
|
201
|
-
{ name: "@dashboard_pid", value: "4321" },
|
|
202
|
-
{ name: "@dashboard_url", value: "http://localhost:6061" },
|
|
203
|
-
]);
|
|
204
|
-
});
|
|
205
|
-
|
|
206
|
-
it("supports overriding the dashboard port", () => {
|
|
207
|
-
let args: readonly string[] | null = null;
|
|
208
|
-
|
|
209
|
-
const url = startDashboard("proj", 6060, {
|
|
210
|
-
dashboardPort: 7777,
|
|
211
|
-
dashboardDir: "/workspace/dashboard",
|
|
212
|
-
spawnFn: (_command, spawnArgs) => {
|
|
213
|
-
args = spawnArgs;
|
|
214
|
-
return { pid: 99, unref: () => {} };
|
|
215
|
-
},
|
|
216
|
-
setVar: () => {},
|
|
217
|
-
});
|
|
218
|
-
|
|
219
|
-
expect(url).toBe("http://localhost:7777");
|
|
220
|
-
expect(args).toEqual(["dev", "--port", "7777"]);
|
|
221
|
-
});
|
|
222
|
-
});
|