Repository navigation
LexiQode 0.2.2
LexiQode 0.2.2
Скачайте LexiQode-0.2.2-win32-x64.zip, распакуйте куда угодно и запустите
LexiQode.exe. Ничего не устанавливается, права администратора не нужны. Сверьте
скачанное с файлом .sha256, приложенным рядом. Настройки и данные лежат вне
папки программы, поэтому распаковка поверх прежней версии их не трогает.
Всё ниже измерено на работающем окне; ассистенту нужен Python 3.11 или новее в
PATH, редактор работает и без него.
Что внутри
Кнопка ▶ действительно запускает файл
- Панель терминала оставалась пустой, а запуск не делал ничего — и это была одна
ошибка.Terminal.open()в xterm 6 выходит сразу, если родитель уже в
документе: библиотека считает терминал открытым и не строит свой DOM. Код
вставлял<div class="terminal">в панель и только потом вызывалopen, поэтому
на экране оставалась пустая рамка, а вывод команды приходил в буфер терминала, у
которого не было ни одного узла. Замерprobe-run.cjsпоказывает это число в
число: до правки — 154-пиксельная рамка без.xterm-screenвнутри, после — текст
команды и её вывод на экране. - Кнопка в правом верхнем углу редактора (то же делает
F5и пункт меню «Запуск ▸
Запустить открытый файл…») сохраняет файл и отдаёт его в оболочку нижней панели,
которая открывается сама..js,.mjsи.cjs— черезnode,.py— через
python,.ps1,.bat,.cmdи.sh— своим интерпретатором. Для остальных
файлов запуска нет, и приложение говорит об этом, а не гадает.
Ассистент отвечает по шагам, и промежуточный ответ больше не исчезает
- Ядро работает шагами: подумал, ответил, вызвал инструменты, снова подумал, снова
ответил. Окно держало один блок на весь ход, поэтому полный текст второго шага
заменял собой ответ первого — ответ исчезал ровно тогда, когда модель продолжала
работу. Теперь у каждого шага свой блок, и «Думаю…» следующего шага идёт после
ответа предыдущего, а не переоткрывается над ним. - Действия шага — одна строка, раскрывающаяся в прокручиваемый список (не выше
320 px): шаг на дюжину вызовов больше не выталкивает остаток хода за пределы
панели, а список сам следит за новой строкой. - У завершённых шагов не остаётся крутилки «работаю», в том числе если шаг прервали
на середине.
Рассуждения выключаются кнопкой рядом с моделью
- У моделей, которые думают по умолчанию (реассонер DeepSeek, серия o), это одна
кнопка: включено — в запрос не добавляется ничего; выключено — уходит
reasoning_effort: "none", как и требует DeepSeek. Если прокси не знает этого
поля, клиент отбрасывает его и повторяет запрос: переключатель не может сломать
работающий адрес. Замерprobe-chat-window.cjsдоводит это до провода — видит
поле в запросе после нажатия и его отсутствие до него.
Ход, остановка и бюджет шагов
- «Шаг 12 из 12» приходило из формы настроек, а не из ядра. Поле «шагов не
более» подставляло 12, тогда как в ядре по умолчанию 40: форму открыли, числа от
ядра не дождались, сохранили 12 — и агент заканчивал каждый ход на двенадцатом
шаге, что читается как «модель останавливается сама». Форма больше не придумывает
числа, которыми владеет ядро. - Ход, израсходовавший запас шагов, говорит об этом в ленте и предлагает
«Продолжить»: это потолок, а не ошибка, и продолжение — одна кнопка. - «Остановить» стало видно. Кнопка сразу говорит «Останавливаю…» и становится
недоступной, пока ядро доходит до безопасного места; когда ход закончен, в ленте
появляется пометка «Остановлено вами», кнопка исчезает, а поле ввода снова
доступно. Раньше нажатие не меняло на экране ничего. - Кнопка «Остановить» появляется только во время хода: правило
[hidden]в таблице
стилей было слабее правил, задающихdisplay, и не работало ни для неё, ни для
крутилки.
Контекст: сжатие перестало срабатывать на каждом ходу
- Сжимало не окно модели, а потолок в 60 сообщений. Один ход агента пишет сообщение
на шаг плюс по одному на каждый вызов инструмента, то есть двенадцать шагов
расходуют больше сотни сообщений: запас срабатывал в конце почти каждого хода и
отбрасывал только что сделанную работу. Потолок поднят до 2000, и файл настроек с
прежним значением по умолчанию переносится в новое (версия настроек 2); число,
которое ввели вы сами, не трогается. - За один ход оплачивается не больше одной сводки: остальные сжатия просто
отбрасывают самые старые сообщения. Пометка в ленте теперь одна на ход и считает,
сколько раз сжимали и сколько сообщений ушло.
Открыть файл — не значит отправить его ассистенту
- Контекст сообщения — ровно то, что вы положили туда сами: кнопка над полем ввода
добавляет открытый файл, меню дерева — любой другой, крестик на чипе убирает.
Раньше открытый файл попадал в следующее сообщение сам.
scripts\run-app.ps1: запуск без сборки наконец работает
- Скрипт предпочитал старую сборку из
dist\, поэтому правки в исходниках он не
показывал: выглядело так, будто изменение не применилось. Теперь по умолчанию
запускаются исходники;-Bundleзапускает собранную папку,-Deployкладёт её
в%LOCALAPPDATA%\Programs\LexiQodeи запускает уже оттуда. - Запуск без папки падал:
Start-Process -ArgumentList @()не проходит проверку
параметров Windows PowerShell. Список аргументов теперь передаётся только когда он
не пуст. - Скрипт не возвращал управление: Electron вызывался оператором
&, который ждёт
закрытия окна. Процесс запускается, а скрипт сразу возвращается.
Проверка обновлений ведёт на страницу выпуска
- Если выпуск новее, окно называет его номер, показывает заметки и даёт одну
кнопку — «Страница выпуска». Она открывается в браузере, и архив с его
контрольной суммой лежит там же.
Приложение перестало обновлять себя само
- Это исправление, а не упрощение. Прежняя версия скачивала архив в
%APPDATA%\LexiQode\updates, распаковывала его целиком и передавала
apply-update.ps1замену папки приложения после исчезновения процесса. На живом
окне это выглядело как «нажал „Закрыть и установить“, и ничего не произошло»:
приложение, запущенное из исходников, заменять себя отказывается, а сообщение об
отказе показывалось строкой, которую легко пропустить. - Вместе с механизмом удалены и его следы: скрипт
apply-update.ps1, каналы
update:downloadиupdate:install, полоса загрузки и обе кнопки. Тест читает
update-service.jsи проверяет, что в нём не осталось ни запуска процессов, ни
записи на диск. - Обновиться — значит закрыть приложение и распаковать новый архив на место текущей
папки.
Версия объявлена в одном месте
- Она записана дважды — в
app/package.jsonи вcore/lexiqode/version.py, — и эти
два места расходились дважды, оба раза незаметно. Теперь сборка с расхождением
падает: 0.2.2 в обоих файлах, и тест это сверяет.
Подсказки при написании кода
- Языковая служба Monaco заработала по-настоящему: для JavaScript, TypeScript, JSON,
CSS и HTML — члены, сигнатуры, подсказки параметров и подчёркнутые ошибки; для
остальных языков — слова из открытого файла. Прежняя версия задавала адрес
воркера, которого в этой сборке Monaco нет, и служба падала через раз, ничего об
этом не сообщая.
Что ещё стоит знать
- У версии 0.2.1 архив приложен позже, чем поставлен тег, и контрольной суммы рядом
с ним нет; 0.2.2 — первый выпуск, где к архиву приложен ещё и.sha256. - 194 теста окна и 170 тестов ядра. Замер
probe-chat-window.cjsпроверяет
ассистента в живом окне: два шага как два блока, «Думаю…» второго после ответа
первого, дюжину действий в прокручиваемом списке, пометку о пределе шагов с
кнопкой продолжения, остановку хода и переключатель рассуждений до самого
запроса. Замерprobe-run.cjsпроверяет, что вывод запущенного файла не только
доходит, но и нарисован. Замеры с окнами запускайте по одному: два окна
перекрывают друг друга, и кадры в фоне тормозятся.