Skip to content

LexiQode 0.2.5

Choose a tag to compare

@KentoGasai KentoGasai released this 29 Oct 03:01
· 2 commits to main since this release

LexiQode 0.2.5

Скачайте LexiQode-0.2.5-win32-x64.zip, распакуйте куда угодно и запустите
LexiQode.exe. Ничего не устанавливается, права администратора не нужны. Сверьте
скачанное с файлом .sha256, приложенным рядом. Настройки и данные лежат вне папки
программы, поэтому распаковка поверх прежней версии их не трогает.

Это выпуск с новой возможностью и с исправлением того, что мешало работать:
ассистент теперь умеет спрашивать, а не догадываться, и перестал останавливаться
там, где он на самом деле работал.

Что нового

Ассистент спрашивает, когда решение за вами

Раньше у агента не было способа задать вопрос. Когда для задачи не хватало
решения, которое может принять только человек — какой из двух подходов выбрать,
какой файл имеется в виду, какое поведение считается правильным, — у него
оставалось два выхода: угадать или повторить вызов в надежде на другой результат.
Второе и выглядело как зацикливание.

  • Инструмент ask_user. Агент задаёт вопрос и ждёт ответа: ход
    останавливается и продолжается с вашим ответом, как с результатом вызова.
    Таймаута нет — вопрос не имеет безопасного ответа по умолчанию, а придумать
    ответ за вас значит вернуться к тому же угадыванию.
  • Варианты ответа — кнопки, как в Cursor. Один клик отвечает. Рядом — поле
    для своего ответа, если ни один вариант не подходит; Enter отправляет.
  • Вопрос виден в ленте чата отдельной карточкой, синей, а не жёлтой: жёлтая
    карточка — это запрос разрешения на действие, и путать их нельзя.
  • Инструмент выдан трём режимам: Agent, Plan и Debug. В Ask и Review его нет
    намеренно: эти режимы существуют, чтобы отвечать по прочитанному коду, и вопрос
    там был бы способом уйти от ответа.
  • Отмена хода освобождает ожидание. Раз таймаута нет, отмена — единственное,
    что может закончить ожидание, и она это делает.
  • Если пользователя нет — например, при запуске без окна — инструмент
    сообщает об этом как о результате, а не висит вечно.

Что исправлено

Ассистент останавливался там, где он работал

Детектор зацикливания считал одинаковые вызовы, даже когда между ними была
настоящая работа. Обычный ритм исправления — запустить тесты, поправить файл,
запустить тесты снова — выглядел для него как повтор, и ход обрывался на середине
у работающего агента. Это хуже, чем не замечать зацикливание вовсе.

  • Считаются только подряд идущие одинаковые вызовы. Любой другой вызов
    разрывает цепочку: «тесты → правка → тесты» — это работа, а «тесты → тесты →
    тесты» без ничего между ними — по-прежнему зацикливание.

Ассистент не знал, что его остановили

Сообщение «ход остановлен: агент повторил вызов» рисовалось в окне и не
попадало в разговор
. Модель не видела причины остановки, поэтому в следующем
ходу повторяла то же самое, и вы видели одно и то же сообщение снова и снова.

  • Причина остановки записывается в разговор. Модель читает, какой именно
    вызов повторился, сколько раз и что делать вместо этого.
  • Одно автоматическое продолжение. Получив объяснение, агент продолжает ход
    сам, без вашего участия, и может сменить подход.
  • Бюджет попыток — четыре на ход. Он считает попытки, а не неудачи: отличить
    вылеченный эпизод от невылеченного по одному вызову между ними невозможно, и
    притворяться, что можно, значит либо обрывать здоровый ход, либо позволить
    крутиться вечно. Четыре — достаточно, чтобы ход, который действительно
    исправлялся несколько раз, не обрывался рано, и мало, чтобы зацикливание
    закончилось, а не тянулось до предела шагов.
  • В окне видно, что происходит: «Агент повторил один и тот же вызов. Ему
    сказано об этом, и он пробует другой подход».

Карточка вопроса не помещалась в панель чата

  • Длинный текст распирал карточку. Карточка — это grid, а grid-элемент по
    умолчанию отказывается быть уже своего содержимого: один длинный путь в вопросе
    выталкивал карточку за край панели. Теперь перенос работает, и текст остаётся
    внутри.
  • Длинные варианты ответа переносятся, а не вылезают одной строкой: у кнопки
    по умолчанию запрещён перенос и фиксированная высота, и вариант с путём внутри
    ломал раскладку.
  • Текст на кнопке виден при наведении. Подсветка при наведении подменяла фон
    кнопки, а цвет текста оставался от другого правила — на карточке вопроса подпись
    варианта становилась нечитаемой.

Что ещё стоит знать

  • 226 тестов окна и 204 теста ядра.
  • Новые тесты ядра: test_ask.py (8) — вопрос блокирует ход, ответ доходит до
    модели, отмена освобождает ожидание, без пользователя инструмент не висит;
    test_repeat_recovery.py (8) — модель получает объяснение, автопродолжение
    работает, бюджет конечен; test_repeat_with_work.py (3) — работа между
    вызовами не считается зацикливанием; test_episode_budget.py (2) — вылеченные
    эпизоды не обрывают ход, но бюджет всё равно конечен.
  • Новые тесты окна: question-style.test.js (6) — карточку нельзя распереть
    текстом, вариант переносится, текст читается при наведении, все CSS-переменные
    определены; два теста в core-routes.test.js — имена полей /api/answer
    совпадают с тем, что читает ядро, и событие question_request действительно
    пересылается и обрабатывается.
  • Три теста в test_server.py проверяют вопрос через настоящий HTTP: вопрос
    блокирует ход, ответ доходит до модели, отмена освобождает ожидание.
  • Проверено на живом окне: вопрос задан, ход ждал ответа, ответ вернулся как
    результат инструмента, работа продолжилась. Детектор повторов проверен там же:
    три одинаковых вызова подряд останавливают ход, а шесть вызовов с чередованием —
    нет.