Нотатки до релізів
Історія оновлень та покращень Pyroom.
- Додано AI Assistant як експериментальну функцію для пояснення коду та підтримки перекладу, з покращеними fallback-сценаріями завантаження моделей і зрозумілішими підказками щодо runtime-помилок.
- Додано аналітику з пріоритетом приватності та явною згодою користувача: діалог згоди та окрему панель Налаштування -> Аналітика, включно з ручною синхронізацією та мобільним режимом «лише Wi-Fi».
- Реалізовано повний аналітичний конвеєр (черга подій на клієнті, фонову синхронізацію через service worker, API прийому, схему бази даних і CLI-звіти) для аналітики якості продукту.
- Розширено покриття аналітики для навчальних сценаріїв і стабільності: старти сесій, результати та тривалість запусків коду, імпортовані пакети, класи Python-помилок, завантаження прикладів, використання функцій і зміни налаштувань.
- Покращено спостережуваність runtime: структуровані класи Python-помилок тепер надсилаються і з main-thread, і з worker-сценаріїв виконання, що дає безпечніший моніторинг без збору коду користувача.
- Додано Reading Comfort Setup як повноцінний покроковий майстер і інтегровано швидкі точки входу прямо в Onboarding та Release Notes, з автоматичним поверненням у попередній сценарій після закриття.
- Впроваджено поведінку кастомної теми читання в Preferences: верхній перемикач теми тепер керується налаштуваннями Reading Comfort, має окрему кнопку Custom і повертає режим Auto після відновлення стандартних параметрів.
- Розширено типографіку Reading Comfort на елементи інтерфейсу: пункти меню, діалоги меню, заголовки панелей, плейсхолдери введення в консолі та кнопки Send/toolbar тепер наслідують шрифт і міжрядкові параметри профілю.
- Покращено візуальну узгодженість і доступність оверлеїв та елементів керування: картки release/onboarding тепер поважають кастомні light/warm/high-contrast теми, меню підтримує прокрутку для довгого контенту, а кнопки дій preview мають узгоджені заокруглення.
- Додано інтеграцію fallback-шрифтів для pygame canvas у профілях Reading Comfort: у рантайм додано шрифтові assets (TTF/OTF) з автоматичним застосуванням, коли приклади використовують стандартні pygame-шрифти.
- Поліпшено мобільний досвід Reading Comfort завдяки налаштуванню компактного layout майстра: покращено відступи, адаптивну сітку карток, нижні елементи керування та зменшено накладання/обрізання на малих екранах.
- Виправлено завантаження прикладу Mini Tetris: тепер при виборі прикладу вміст редактора Monaco надійно оновлюється перед запуском.
- Покращено керування Mini Tetris у різних браузерах завдяки точнішій обробці клавіш (включно з Linux/Firefox), щоб поворот і рух працювали стабільно.
- Покращено фокус SDL-canvas і очищення обробників клавіатури після виходу з гри, що зменшує залипання клавіш і небажаний скрол сторінки після закриття прикладів.
- Додано повільнішу стандартну швидкість анімації turtle та плавніший видимий рух у прев’ю, щоб кроки малювання було легше відстежувати в реальному часі.
- Виправлено проблеми виконання Python runtime у Firefox і Safari для асинхронних скриптів ігрового типу (включно з прикладами pygame).
- Покращено повідомлення про runtime-помилки з чіткою підказкою, коли Safari має обмеження WebAssembly stack-switching (використовуйте top-level await замість asyncio.run(...)).
- Оновлено інтерфейс Playground: додано окремі стилі сторінки, покращено адаптивні макети для десктопу та мобайлу, а також відшліфовано керування консоллю, прев’ю та панеллю дій.
- Перероблено структуру меню з чіткими секціями (Дії, Додатково, Параметри), підменю для Поширення/Ресурсів/Налаштувань і покращеною поведінкою мобільного debug-меню.
- Розширено мовну підтримку інтерфейсу: додано й уточнено локалізовані підписи в меню, поширенні та сценаріях роботи із завданнями для англійської, української, іспанської, німецької та французької мов.
- Покращено UX поширення: додано зрозумілі підказки для офлайн/онлайн режимів, оновлено підписи копіювання повних посилань і додано генерацію QR для коротких онлайн-посилань.
- Покращено модель захисту завдань: додано явні стани блокування (Редагується/Заблоковано/PIN-захист), швидші дії блокування/розблокування та зрозуміліші перемикачі режимів teacher/student.
- Додано перемикач синхронізації назви завдання у модальному вікні поширення: можна тримати назву синхронізованою з панеллю завдань або задати разову назву лише для поточного поширення, із підказкою щодо PIN між пристроями.
- Розширено метадані історії та узгодженість відновлення: тепер в історії та метаданих payload поширення зберігаються стан блокування/захисту завдання та інформація про автора.
- Розширено сумісність Turtle API для інтерактивних занять: додано Screen().textinput(), Screen().numinput(), обробники кліків (onscreenclick/onclick), таймерні колбеки через ontimer() та клавіатурні псевдоніми onkeypress()/onkeyrelease() з підтримкою у worker і main-thread runtime.
- Додано інтерактивний режим налагодження для запусків Python: увімкніть дебаг, ставте брейкпоінти прямо в полі Monaco та зупиняйте виконання на вибраних рядках.
- Додано елементи керування налагодженням Continue і Step Over для десктопу та мобільного інтерфейсу, включно з окремими діями в тулбарі/меню та швидкими мобільними кнопками.
- Додано панель змінних під час паузи: переглядайте поточні локальні змінні, фільтруйте «усі» або лише змінні з вашого коду та розгортайте вкладені значення для зручнішого аналізу.
- Покращено точність крокування в дебагері: додано відстеження на рівні opcode, облік глибини викликів для коректного step-over та стабільну синхронізацію поточного рядка в редакторі.
- Локалізовано підписи й дії дебагера для багатомовного сценарію роботи, а також очищено знімки змінних — службові константи фреймворку приховано з перегляду локальних.
- Розширено сумісність Turtle runtime для інтерактивних програм: реалізовано Screen().tracer(), Screen().update(), Screen().listen() і Screen().onkey(), додано опитування подій клавіатури та покращено проксування методів у worker plugin-shim для повного набору Turtle.
- Додано живий рендер Turtle-спрайтів у Preview: об'єкти turtle тепер відображаються як видимі фігури (включно з shape/color/shapesize, напрямком, видимістю та рухом), тож ігрові цикли з ручним оновленням кадру відображаються коректно.
- Додано функцію Завдань: створюйте навчальні завдання з назвою, описом та стартовим кодом. Опис підтримує редагування у режимах WYSIWYG, Markdown і Перегляд.
- Завдання можна захистити PIN-кодом: PIN блокує назву та опис завдання, але залишає редактор коду доступним — учні можуть виконувати завдання, не змінюючи його умов.
- Завдання повністю інтегровані з поширенням: метадані завдання та стан захисту зберігаються при поширенні через посилання або QR-код — отримувач одразу бачить готове завдання.
- Оновлено панель Історії: записи тепер показують більші прев'ю коду та чіткіші дії Відновити / Видалити. Завдання та їх стан захисту зберігаються в історії разом із кодом і коректно відновлюються.
- Історія тепер автоматично зберігає знімок щоразу, коли ви запускаєте код, — можна повернутися до будь-якої попередньої версії без ручного збереження.
- Функція input() тепер працює в консолі: коли програма викликає input(), рядок введення підсвічується жовтим і чекає на відповідь — без спливаючих діалогових вікон браузера.
- Введені дані в консолі тепер правильно передаються програмі, що очікує на введення, замість виконання як нового виразу Python.
- Покращено поведінку введення в консолі: автоматичні текстові виправлення вимкнено, щоб введення команд було стабільнішим на різних пристроях і мовних розкладках.
- Додано онлайн-поширення через збережені на сервері payload: поділіться проєктом за 8-символьним кодом або коротким посиланням (pyroom.app/s/…), яке відкривається прямо в playground.
- Оновлено діалог поширення з вкладками «Офлайн (QR)» та «Онлайн» — QR-поширення повністю працює без інтернету, онлайн-поширення підтримує payload до 20 КБ.
- Додано налаштування терміну дії для онлайн-поширення: від 1 години до 1 року; спільні проєкти автоматично видаляються після закінчення терміну.
- Додано пункт меню «Введіть код доступу», який відкриває окремий діалог для імпорту проєкту за 8-символьним кодом.
- Короткі посилання (pyroom.app/s/…) автоматично переспрямовують до playground і відкривають діалог підтвердження імпорту з метаданими проєкту.
- Виправлено проблему редактора на Windows, коли під час введення пробілу символи могли вставлятися на кілька позицій далі від видимого курсора в Monaco.
- Оновлено параметри рендерингу тексту та введення в Monaco для Windows, щоб покращити вирівнювання курсора і точність набору при дробному масштабуванні екрана.
- Ізольовано приховане textarea-введення Monaco від глобальних стилів форм, щоб побічні CSS-ефекти не впливали на поведінку курсора.
- Розширено навігацію в англійській та українській версіях, включно з підтримкою мобільного меню та швидкими посиланнями для аудиторій і сценаріїв роботи.
- Покращено взаємодію з інтерфейсом: оновлено активні стани кнопок, анімації інтерактивних елементів і поведінку виділення тексту Monaco на мобільних пристроях.
- Додано підказки мови для українських користувачів і покращено видимість у пошуку завдяки оновленому sitemap та очищенню метаданих robots.txt.
- Виправлено витік пам'яті PyProxy: persistCallback() тепер відстежує кожен .copy() для кнопок, прапорців, перемикачів, bind() і команд меню кожного віджета; destroy() та reset() викликають .destroy() для всіх відстежених копій.
- Розширено парсинг індексів Text: parseTextIndex() тепер підтримує 'end-1c', 'end+Nc', 'end-Nl' (зсув рядків), 'insert' (позиція курсора), 'sel.first', 'sel.last' та складені індекси на зразок '1.0+2c'. textGet/textInsert/textDelete/textTagAdd/textTagRemove передають живий контекст курсора та виділення.
- Функціональний Scrollbar: декоративний div замінено на стилізований віджет із доріжкою та повзунком. Параметр command викликає Python-callback із часткою прокрутки при перетягуванні. Додано Scrollbar.set(first, last) для переміщення повзунка при прокрутці пов'язаного віджета.
- Замінено window.alert/window.confirm у messagebox на власний асинхронний DOM-модал: стилізоване накладення із заголовком, іконкою, текстом повідомлення та кнопками OK/Скасувати. Усі функції messagebox тепер async def і повертають awaitable результати. Клавіші Enter/Escape працюють коректно.
- Виправлено автоматичне розміщення grid: grid() тепер оновлює grid-template-columns та grid-template-rows на батьківському елементі після кожного розміщення, автоматично розширюючи 'auto'-доріжки на нову комірку з урахуванням span та наявних налаштувань columnconfigure/rowconfigure.
- Виправлено витік пам'яті змінних: gcVariableIfUnbound() видаляє значення змінної з мапи variables, коли видаляється остання прив'язка (entry, text, scale, listbox, check, radio) та всі трасування, запобігаючи необмеженому зростанню в тривалих сесіях.
- Додано віджет LabelFrame: контейнер із заголовком і рамкою, реалізований через <fieldset>/<legend>, підтримує розміщення дочірніх віджетів, параметри bg/fg/font/relief та компонування grid/pack.
- Додано віджет OptionMenu: стандартний випадаючий список tkinter із двостороннім зв'язуванням зі StringVar/Variable — вибір оновлює змінну, а зміна змінної оновлює відображений варіант.
- Додано віджет ttk.Notebook з методами add(), select(), index() та tabs(): підтримує кілька панелей вкладок із клікабельною панеллю вкладок і коректним перемиканням показу/приховування.
- Додано віджет ttk.Treeview з повним API insert/delete/heading/column/item/set/selection, відображеним як HTML-таблиця з підтримкою вкладених дочірніх елементів, ширини стовпців і вибору рядків.
- Додано columnconfigure() та rowconfigure() з параметром weight на Frame, Tk та всіх віджетах: зважені стовпці/рядки розширюються через CSS fr-одиниці, minsize відображається на minmax().
- Додано after_idle() на Tk та всіх віджетах: планує виклик на наступному циклі простою через requestIdleCallback (з резервним setTimeout(0)), відповідно до стандартної семантики Tkinter.
- Додано winfo_children(), winfo_exists() та winfo_parent() для програмної інтроспекції дерева віджетів — winfo_exists() повертає False після destroy(), winfo_children() повертає лише прямих нащадків.
- Додано підтримку configure() для relief (sunken/raised/ridge/groove/solid/flat), bd/borderwidth, cursor (з відображенням імен курсорів Tkinter→CSS), justify, anchor та wraplength на всіх віджетах.
- Додано state='readonly' для Entry та Text: встановлює HTML-атрибут readOnly (дозволяє виділення та копіювання тексту, але забороняє редагування), відрізняється від state='disabled'.
- Додано систему тегів для Text: tag_add(), tag_config()/tag_configure(), tag_remove() та tag_delete() — теги відображаються через прозорий накладний div із кольоровими/стилізованими span поруч із textarea.
- Додано псевдонім ttk.LabelFrame у підмодулі ttk. Розширено набір тестів Tkinter shim з 159 до 225, що охоплюють усі нові віджети та API.
- Виправлено збереження координат елементів полотна: create_line, create_rectangle, create_oval, create_arc, create_polygon і create_text тепер зберігають координати при створенні, тому canvas.coords(), canvas.move(), canvas.bbox() та canvas.find_overlapping() повертають правильні результати.
- Виправлено canvas.itemconfigure(): зміни fill, outline, width та інших візуальних параметрів тепер застосовуються при наступному перемалюванні, а не ігноруються.
- Виправлено систему тегів полотна: теги, задані через параметр tags при створенні, тепер зберігаються і доступні для пошуку. Додано canvas.addtag_withtag(), canvas.addtag_all(), canvas.dtag(), canvas.gettags() та підтримку find_withtag('all').
- Виправлено pack(side=LEFT/RIGHT/TOP/BOTTOM): віджети з side= тепер коректно розміщуються горизонтально (LEFT/RIGHT) або вертикально (TOP/BOTTOM) через flexbox-напрямок батьківського контейнера.
- Виправлено прив'язку подій: <FocusIn>, <FocusOut>, <MouseWheel>, <Configure> та <Button-3> тепер відповідають правильним DOM-подіям. Payload події тепер містить поля widget, state (бітова маска модифікаторів), delta (прокрутка), button, char, x_root, y_root та width/height.
- Розширено відображення keysym: F1–F12, Home, End, Delete, BackSpace, Escape, Tab, Return, PageUp, PageDown, Insert, пробіл і клавіші стрілок тепер перетворюються на правильні рядки keysym Tkinter. Прив'язки конкретних клавіш на кшталт <Key-a> тепер фільтруються коректно.
- Додано variable.trace_add(), trace_remove(), trace_info() та застарілі псевдоніми trace() і trace_variable() — стандартний патерн для реактивних UI тепер працює без опитування.
- Розширено набір тестів Tkinter shim з 88 до 159, що охоплюють координати полотна, систему тегів, pack side, відображення подій, повний payload події, трансляцію keysym та трасування змінних.
- Розширено прив'язку змінних Tkinter між віджетами: Entry, Label, Text, Scale, Checkbutton, Radiobutton і Listbox тепер коректно синхронізуються зі StringVar/IntVar/DoubleVar/BooleanVar.
- Додано виправлення сумісності Tkinter у браузерному runtime: експортовано tk.Variable, нормалізовано аргументи RPC у воркері та усунуто DataCloneError при передачі змінних/списків в опціях віджетів.
- Покращено поведінку Tkinter API: Text підтримує індекси рядок.стовпець і 'end', опції pack() тепер застосовуються (padding/fill/expand), а обробка подій точніша для <Return> та <B1-Motion>.
- Додано ширше покриття тестами для Tkinter shim, щоб зафіксувати поведінку та запобігти регресіям у синхронізації змінних, подіях, опціях розкладки й операціях з текстом/списками.
- Видалено застарілі посилання на маніфест з HTML-файлів для очищення застарілих посилань PWA.
- Додано логування інформації про збірку в консоль: номер версії, хеш коміту та часова мітка збірки для спрощеного налагодження.
- Покращено стратегію кешування фонового обробника з обробкою помилок та резервною логікою для повної підтримки офлайн-режиму.
- Додано багаторівневе завантаження для Pyodide та Monaco Editor з автоматичним перемиканням (основний сервер → локальний кеш → резервна мережа доставки).
- Додано кнопку завантаження результатів перегляду на мобільних пристроях із покращеним відображенням візуального вмісту, наприклад графіків Matplotlib.
- Розширено кешування у фоновому обробнику для підтримки піддоменів ресурсів, що забезпечує повний доступ до Pyodide та Monaco Editor без з'єднання з інтернетом.
- Додано панель керування бібліотеками Python із встановленням одним кліком, оновленням та очищенням кешу для пакетів на зразок NumPy, Matplotlib і Pandas.
- Додано систему звітів про помилки на вебсайті pyroom.app з автоматичним створенням GitHub issues для відстеження відгуків користувачів та запитів функцій.
- Додано функцію підписки на email на pyroom.app для сповіщень про релізи, що дозволяє користувачам слідкувати за новими версіями.
- Додано кнопку Оновити (клавіша F5) для швидкого перезавантаження сторінки та скидання сесії виконання Python.
- Розширено навчальний посібник покроковими інструкціями для дії Оновити на комп'ютері та мобільному пристрої.
- Покращено панель перегляду: тепер розширюється на всю доступну висоту на комп'ютері, додано повноекранний режим для кращого перегляду вмісту.
- Розділено примітки до випусків і навчальний посібник на незалежні вікна з окремим відстеженням переглядів.
- Розширено навчальний посібник покроковими інструкціями для різних пристроїв, керуванням меню, діями скасування та повтору.
- Перероблено мобільний інтерфейс: панель дій унизу, перемикання між редактором та результатами, покращена поведінка панелі виводу.
- Покращено відображення приміток до випусків: хронологічна прокрутка та позначки версій із типом випуску (великий/малий).
- Додано адаптивні розміри шрифтів для введення та виведення в консолі на мобільних пристроях для кращої читабельності.
- Додано кнопку «Відновити типові» в налаштуваннях для швидкого скидання всіх параметрів до початкових значень.
- Покращено оформлення світлої теми для кнопок дій та підсвічування навчального посібника.
- Перероблено мобільне розташування з окремими екранами редактора та результатів для зрозумілішого робочого процесу.
- Додано панель дій на мобільному пристрої для швидкого перемикання екранів і запуску коду.
- Виправлено обробку переповнення та проблеми відображення на пристроях Apple і малих екранах.
- Додано режим вбудовування через iframe з налаштовуваною видимістю інтерфейсу та опціями тільки для читання при поширенні коду.
- Розширено поширення коду: додано підтримку власних метаданих і покращено поведінку відкриття посилань.
- Оновлено панель «Про програму» та відображення приміток до випусків для чіткішої інформації про продукт.
- Додано інтерактивний навчальний посібник із покроковим підсвічуванням функцій редактора та середовища виконання.
- Замінено текстові кнопки у заголовку на піктограми для меню, скасування, повтору та запуску дій.
- Покращено розташування панелей перегляду та консолі з узгодженими розмірами на комп'ютері та мобільному пристрої.
- Додано режим теми «Авто», який автоматично слідує системним налаштуванням світлої/темної теми.
- Покращено стабільність перегляду Tkinter та обробку середовища виконання на мобільних пристроях.
- Додано сповіщення про нові версії всередині застосунку з автоматичним оновленням фонового обробника.
- Розширено підтримку роботи без підключення до інтернету через кешування файлів маніфесту та піктограм.
- Додано підтримку прогресивного вебзастосунку з маніфестом та фоновим обробником для можливості встановлення.
- Додано можливості поширення коду та елементи керування скасуванням і повтором у редакторі.
- Покращено стабільність розташування на iOS і мобільних пристроях, оновлено відображення піктограм.
- Додано налаштування застосунку з вибором мови (англійська/українська) та базовим налаштуванням інтерфейсу.
- Додано можливість імпорту та експорту файлів коду Python (.py).
- Додано клікабельні посилання на помилки у виведенні консолі та покращено скрипти збірки.
- Початковий випуск: браузерне середовище Python із редактором коду Monaco та середовищем виконання Pyodide.
- Додано рівень підтримки Tkinter для створення графічних інтерфейсів безпосередньо в браузері.
- Створено основну архітектуру: редактор коду, введення та виведення консолі, панель візуального перегляду.