repositories / pi-ext
pi-ext
bugabingas pi extensions
owned by admin
extensions/masks/assets/demo.cast
Raw{"version":2,"width":100,"height":24,"timestamp":1791151111,"title":"masks","env":{"TERM":"xterm-256color"}}
[0.05,"o","\u001b[?2004h"]
[0.051,"o","\u001b[>7u\u001b[?u\u001b[c"]
[0.051,"o","\u001b[?25l"]
[0.051,"o","\u001b[16t"]
[0.065,"o","\u001b]0;π - masks\u0007"]
[0.069,"o","\u001b[?2026h\u001b[0m\u001b]8;;\u0007\r\r\n \u001b[1m\u001b[38;2;138;190;183mpi\u001b[39m\u001b[22m\u001b[38;2;102;102;102m v0.87.1\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n \u001b[38;2;102;102;102mescape\u001b[39m\u001b[38;2;128;128;128m interrupt\u001b[39m\u001b[38;2;128;128;128m · \u001b[39m\u001b[38;2;102;102;102mctrl+c/ctrl+d\u001b[39m\u001b[38;2;128;128;128m clear/exit\u001b[39m\u001b[38;2;128;128;128m · \u001b[39m\u001b[38;2;102;102;102m/\u001b[39m\u001b[38;2;128;128;128m commands\u001b[39m\u001b[38;2;128;128;128m · \u001b[39m\u001b[38;2;102;102;102m!\u001b[39m\u001b[38;2;128;128;128m bash\u001b[39m\u001b[38;2;128;128;128m · \u001b[39m\u001b[38;2;102;102;102mctrl+o\u001b[39m\u001b[38;2;128;128;128m more\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n \u001b[38;2;102;102;102mPress ctrl+o to show full startup help and loaded resources.\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n \u001b[0m\u001b]8;;\u0007\r\r\n \u001b[38;2;102;102;102mPi can explain its own features and look up its docs. Ask it how to use or extend Pi.\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[38;2;240;198;116m[Extensions]\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[38;2;102;102;102m demo-provider, footer, masks, model-info\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[38;2;80;80;80m────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[39m\u001b[0m\u001b]8;;\u0007\r\r\n"]
[0.069,"o","\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[38;2;80;80;80m────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[39m\u001b[0m\u001b]8;;\u0007\r\r\n \u001b[0m\u001b]8;;\u0007\r\r\n \u001b[38;2;102;102;102mdemo\u001b[39m \u001b[38;2;86;156;214mdemo-model:off\u001b[39m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[0.069,"o","\u001b[3A\u001b[1G"]
[0.069,"o","\u001b[?25l"]
[0.091,"o","\u001b[1G"]
[0.091,"o","\u001b[?25l"]
[6.097,"o","\u001b[1G"]
[6.097,"o","\u001b[?25l"]
[6.114,"o","\u001b[?2026h\u001b[1A\r\u001b[2K\u001b[38;2;178;148;187m────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[39m\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[38;2;178;148;187m────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[39m\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K \u001b[38;2;102;102;102mdemo\u001b[39m \u001b[38;2;86;156;214mdemo-deep:high\u001b[39m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[6.114,"o","\u001b[3A\u001b[1G\u001b[?25l"]
[16.168,"o","\u001b[?2026h\r\u001b[2K/\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[16.168,"o","\u001b[2G\u001b[?25l"]
[16.224,"o","\u001b[?2026h\r\u001b[2K/m\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[38;2;178;148;187m────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[39m\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[38;2;138;190;183m→ settings Open settings menu\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K model\u001b[38;2;128;128;128m <provider/model> — Select model (opens selector UI)\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K tree\u001b[38;2;128;128;128m Navigate session tree (switch branches)\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K thinking\u001b[38;2;128;128;128m <level> — Set thinking level\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K scoped-models\u001b[38;2;128;128;128m Enable/disable models for Ctrl+P cycling\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[38;2;128;128;128m (1/28)\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K \u001b[38;2;102;102;102mdemo\u001b[39m \u001b[38;2;86;156;214mdemo-deep:high\u001b[39m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[16.224,"o","\u001b[9A\u001b[3G\u001b[?25l"]
[16.28,"o","\u001b[?2026h\r\u001b[2K/ma\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[38;2;178;148;187m────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[39m\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[38;2;138;190;183m→ model <provider/model> — Select model (opens selector UI)\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K masks-cancel\u001b[38;2;128;128;128m [t] Cancel deferred masked prompts without interrupting the current run\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K masks\u001b[38;2;128;128;128m [t] Switch model and thinking mask\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K scoped-models\u001b[38;2;128;128;128m Enable/disable models for Ctrl+P cycling\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K import\u001b[38;2;128;128;128m Import and resume a session from a JSONL file\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[38;2;128;128;128m (1/9)\u001b[39m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[16.28,"o","\u001b[7A\u001b[4G\u001b[?25l"]
[16.337,"o","\u001b[?2026h\r\u001b[2K/mas\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[38;2;178;148;187m────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[39m\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[38;2;138;190;183m→ masks-cancel [t] Cancel deferred masked prompts without interrupting the current run\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K masks\u001b[38;2;128;128;128m [t] Switch model and thinking mask\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K llama\u001b[38;2;128;128;128m [t] Manage llama.cpp router models\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K compact\u001b[38;2;128;128;128m Manually compact the session context\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K \u001b[38;2;102;102;102mdemo\u001b[39m \u001b[38;2;86;156;214mdemo-deep:high\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\r\r\n\u001b[2K\u001b[2A\u001b[?2026l"]
[16.337,"o","\u001b[7A\u001b[5G\u001b[?25l"]
[16.393,"o","\u001b[?2026h\r\u001b[2K/mask\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[38;2;178;148;187m────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[39m\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[38;2;138;190;183m→ masks-cancel [t] Cancel deferred masked prompts without interrupting the current run\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K masks\u001b[38;2;128;128;128m [t] Switch model and thinking mask\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K \u001b[38;2;102;102;102mdemo\u001b[39m \u001b[38;2;86;156;214mdemo-deep:high\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\r\r\n\u001b[2K\u001b[2A\u001b[?2026l"]
[16.393,"o","\u001b[5A\u001b[6G\u001b[?25l"]
[16.45,"o","\u001b[?2026h\r\u001b[2K/masks\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[16.45,"o","\u001b[7G\u001b[?25l"]
[16.508,"o","\u001b[?2026h\r\u001b[2K/masks \u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[38;2;178;148;187m────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[39m\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[38;2;138;190;183m→ masks [t] Switch model and thinking mask\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K masks-cancel\u001b[38;2;128;128;128m [t] Cancel deferred masked prompts without interrupting the current run\u001b[39m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[16.508,"o","\u001b[3A\u001b[8G\u001b[?25l"]
[16.565,"o","\u001b[?2026h\r\u001b[2K/masks p\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[38;2;178;148;187m────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[39m\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K \u001b[38;2;102;102;102mdemo\u001b[39m \u001b[38;2;86;156;214mdemo-deep:high\u001b[39m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\r\r\n\u001b[2K\u001b[2A\u001b[?2026l"]
[16.565,"o","\u001b[3A\u001b[9G\u001b[?25l"]
[16.621,"o","\u001b[?2026h\r\u001b[2K/masks pl\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l\u001b[10G"]
[16.621,"o","\u001b[?25l"]
[16.679,"o","\u001b[?2026h\r\u001b[2K/masks pla\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l\u001b[11G"]
[16.679,"o","\u001b[?25l"]
[16.735,"o","\u001b[?2026h\r\u001b[2K/masks plan\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[16.735,"o","\u001b[12G\u001b[?25l"]
[24.793,"o","\u001b[?2026h\r\u001b[2K\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[24.793,"o","\u001b[1G\u001b[?25l"]
[24.795,"o","\u001b[?2026h\r\u001b[2Ka\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[24.795,"o","\u001b[2G\u001b[?25l"]
[24.851,"o","\u001b[?2026h\r\u001b[2Kad\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l\u001b[3G\u001b[?25l"]
[24.908,"o","\u001b[?2026h\r\u001b[2Kadd\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l\u001b[4G"]
[24.908,"o","\u001b[?25l"]
[24.965,"o","\u001b[?2026h\r\u001b[2Kadd \u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l\u001b[5G"]
[24.965,"o","\u001b[?25l"]
[25.021,"o","\u001b[?2026h\r\u001b[2Kadd r\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[25.021,"o","\u001b[6G\u001b[?25l"]
[25.079,"o","\u001b[?2026h\r\u001b[2Kadd re\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[25.079,"o","\u001b[7G\u001b[?25l"]
[25.135,"o","\u001b[?2026h\r\u001b[2Kadd ret\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[25.135,"o","\u001b[8G\u001b[?25l"]
[25.193,"o","\u001b[?2026h\r\u001b[2Kadd retr\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l\u001b[9G"]
[25.193,"o","\u001b[?25l"]
[25.249,"o","\u001b[?2026h\r\u001b[2Kadd retri\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[25.249,"o","\u001b[10G\u001b[?25l"]
[25.307,"o","\u001b[?2026h\r\u001b[2Kadd retrie\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[25.307,"o","\u001b[11G\u001b[?25l"]
[25.363,"o","\u001b[?2026h\r\u001b[2Kadd retries\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[25.363,"o","\u001b[12G\u001b[?25l"]
[25.421,"o","\u001b[?2026h\r\u001b[2Kadd retries \u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[25.421,"o","\u001b[13G\u001b[?25l"]
[25.477,"o","\u001b[?2026h\r\u001b[2Kadd retries t\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[25.477,"o","\u001b[14G\u001b[?25l"]
[25.534,"o","\u001b[?2026h\r\u001b[2Kadd retries to\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[25.534,"o","\u001b[15G\u001b[?25l"]
[25.592,"o","\u001b[?2026h\r\u001b[2Kadd retries to \u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[25.592,"o","\u001b[16G\u001b[?25l"]
[25.648,"o","\u001b[?2026h\r\u001b[2Kadd retries to t\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l\u001b[17G"]
[25.648,"o","\u001b[?25l"]
[25.705,"o","\u001b[?2026h\r\u001b[2Kadd retries to th\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[25.705,"o","\u001b[18G\u001b[?25l"]
[25.762,"o","\u001b[?2026h\r\u001b[2Kadd retries to the\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[25.762,"o","\u001b[19G\u001b[?25l"]
[25.819,"o","\u001b[?2026h\r\u001b[2Kadd retries to the \u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[25.819,"o","\u001b[20G\u001b[?25l"]
[25.877,"o","\u001b[?2026h\r\u001b[2Kadd retries to the u\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l\u001b[21G\u001b[?25l"]
[25.933,"o","\u001b[?2026h\r\u001b[2Kadd retries to the up\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[25.933,"o","\u001b[22G\u001b[?25l"]
[25.99,"o","\u001b[?2026h\r\u001b[2Kadd retries to the upl\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[25.991,"o","\u001b[23G\u001b[?25l"]
[26.047,"o","\u001b[?2026h\r\u001b[2Kadd retries to the uplo\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l\u001b[24G\u001b[?25l"]
[26.104,"o","\u001b[?2026h\r\u001b[2Kadd retries to the uploa\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l\u001b[25G\u001b[?25l"]
[26.161,"o","\u001b[?2026h\r\u001b[2Kadd retries to the upload\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[26.161,"o","\u001b[26G\u001b[?25l"]
[26.218,"o","\u001b[?2026h\r\u001b[2Kadd retries to the upload \u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[26.218,"o","\u001b[27G\u001b[?25l"]
[26.276,"o","\u001b[?2026h\r\u001b[2Kadd retries to the upload p\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l\u001b[28G\u001b[?25l"]
[26.332,"o","\u001b[?2026h\r\u001b[2Kadd retries to the upload pa\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[26.332,"o","\u001b[29G\u001b[?25l"]
[26.39,"o","\u001b[?2026h\r\u001b[2Kadd retries to the upload pat\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[26.39,"o","\u001b[30G\u001b[?25l"]
[26.446,"o","\u001b[?2026h\r\u001b[2Kadd retries to the upload path\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[26.446,"o","\u001b[31G\u001b[?25l"]
[26.459,"o","\u001b[?2026h\r\u001b[2K\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[26.459,"o","\u001b[1G\u001b[?25l"]
[26.487,"o","\u001b[?2026h\u001b[2A\r\u001b[2K\u001b]133;A\u0007\u001b[48;2;52;53;65m \u001b[49m\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[48;2;52;53;65m \u001b[38;2;212;212;212madd retries to the upload path\u001b[39m \u001b[49m\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b]133;B\u0007\u001b]133;C\u0007\u001b[48;2;52;53;65m \u001b[49m\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b]133;A\u0007\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K Plan, no edits: \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K \u001b[38;2;138;190;183m1. \u001b[39mAdd withRetry(run) in src/retry.ts with exponential backoff capped at 2 s. \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K \u001b[38;2;138;190;183m2. \u001b[39mWrap send() in src/upload.ts with withRetry. \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b]133;B\u0007\u001b]133;C\u0007 \u001b[38;2;138;190;183m3. \u001b[39mCover three timeouts then success, and a 400 that never retries, in src/retry.test.ts. \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[38;2;178;148;187m────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[39m\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[38;2;178;148;187m────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[39m\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K \u001b[38;2;102;102;102mdemo\u001b[39m \u001b[38;2;86;156;214mdemo-deep:high\u001b[39m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[26.487,"o","\u001b[3A\u001b[1G\u001b[?25l"]
[40.51,"o","\u001b[1G"]
[40.51,"o","\u001b[?25l"]
[40.526,"o","\u001b[?2026h\u001b[1A\r\u001b[2K\u001b[38;2;80;80;80m────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[39m\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[7m \u001b[0m \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K\u001b[38;2;80;80;80m────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[39m\u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K \u001b[0m\u001b]8;;\u0007\r\r\n\u001b[2K \u001b[38;2;102;102;102mdemo\u001b[39m \u001b[38;2;86;156;214mdemo-model:off\u001b[39m \u001b[0m\u001b]8;;\u0007\u001b[?2026l"]
[40.526,"o","\u001b[3A\u001b[1G\u001b[?25l"]
[50.835,"o","\u001b[1G"]
[50.835,"o","\u001b[?25l"]
[50.836,"o","\u001b[<u"]
[50.836,"o","\u001b[1G\u001b[?25l"]
[50.886,"o"," "]
[50.886,"o","\u001b[4B\r\r\n\u001b[?25h\u001b[?2004l"]
[50.888,"o","\u001b]0;π - masks\u0007"]