Три вещи, которых не хватало по сравнению с пультом DeepShim, — теперь
здесь, и DeepShim можно закрывать.
1. Выключатель инструментов. Снят — приставка, дерево папки и напоминание
про NEED/LIST/FIND не едут вовсе, круг ровно один: обычное "спросил
по этим файлам, получил ответ". Замер на одной задаче: 229 символов
вопроса против 1886. В консоли это флаг --no-tools.
2. Помощь с git: ряд всплывает, только если в папке нет репозитория или
в .gitignore не хватает строк. Главная - backup/, куда ложатся прежние
версии файлов перед записью. Перенесено из пульта DeepShim.
3. "Помнить прошлый ответ": галочка, по которой прошлый ответ уезжает
вместе со следующим вопросом. Разговор из нескольких вопросов, которого
раньше не было: стенограмма велась внутри одного вопроса и на этом всё.
Попутно два дефекта, оба найдены при проверке:
- Разбор флагов съедал аргумент после булева флага: "deepwork --apply вопрос"
превращался в apply="вопрос", а вопрос пропадал. Молчало, пока булев флаг
стоял последним. Та же грабля уже ловилась в ask.mjs; добавлен BOOL_FLAGS.
- Блок-запрос вплотную к прозе не распознавался. DeepSeek регулярно пишет
"Запрашиваю поиск константы.=== FIND: MAGIC ===" одной строкой, разбор
требовал начала строки, и круг уходил впустую. Якорь начала снят, якорь
конца оставлен: упоминание формата посреди фразы запросом не считается.
От запросов внутри === FILE: === бережёт вырезание этих блоков, а не якорь.
Проверено вживую: без инструментов - 229 символов, один круг, верный ответ;
с инструментами - FIND распознан, два круга, верный ответ; git - repo:false
и пять недостающих строк, после кнопки repo:true и missing пуст; память -
"удвой это число" вернуло 80834 против бессмыслицы без галочки.
--selftest дополнен двумя случаями на разбор запросов.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
README переписан под человека, который видит проект впервые: что это вообще
такое (схемой), что понадобится, установка по шагам с проверкой на каждом,
как пользоваться пультом и консолью, чего ожидать по времени, таблица
"если не работает" на десять строк и отдельный раздел про безопасность.
Замеры и выводы прошлых прогонов сохранены — это самое ценное, что тут есть,
но убраны под "Что проверено вживую", а не вперемешку с инструкцией.
Поправлено попутно:
- start-deepwork.cmd стучался в порт 9333 и советовал запустить start-browser.cmd
в ollama_orchestro; теперь проверяет deepseek-api на 11500. Заодно батник
снова стал чисто ASCII, как ему и положено;
- в USAGE --timeout и --check ссылались на мост, --chat не знал про vision;
- добавлена LICENSE (MIT), на которую README ссылается, и .gitattributes:
без него start-deepwork.cmd уехал бы в репозиторий с LF.
Раздел про обрезанные ответы поправлен по существу: обе поломки лечатся
в deepseek-api (отрисовка и кнопка Continue живут в его browser.mjs),
а не в ollama_orchestro, как было написано.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Транспорт: был дочерний процесс ask.mjs из ollama_orchestro с обменом через
временные файлы, стал POST /api/chat к сервису deepseek-api. Он держит вкладку
браузера и отдаёт наружу протокол Ollama, поэтому здесь про браузер больше
не знают: ушли проверка существования моста, временные файлы шагов вместе
с флагом --keep-temp и четыре осиротевших импорта.
Главное не в транспорте. Раньше шаги 2..N уходили с флагом --new, и ход
разговора помнил сам чат DeepSeek. Сервис памяти не имеет принципиально:
каждый запрос он кладёт в чат целиком, затирая прошлый. Поэтому стенограмму
ведём здесь — growTranscript подклеивает к отправленному тексту прошлый ответ
модели между метками === ТВОЙ ПРЕДЫДУЩИЙ ОТВЕТ === и === END ===, и следующим
шагом уезжает всё сразу.
Так надёжнее, чем было: видно в одном месте, что именно уедет модели, а чужой
потребитель, вклинившийся между нашими шагами, ничего не портит — мы всё
приносим заново. Плата — вопрос растёт на длину прошлого ответа.
--check теперь различает три состояния: сервис отвечает и браузер поднят;
сервис жив, но браузера ещё нет; сервис не запущен. Плашка в ui.html тоже.
Настройки: bridge/chat/cdpPort заменены на deepseekHost и deepseekModel.
Проверено живым многошаговым прогоном: шаг 1 — 2094 символа, ответ
NEED: deepwork.mjs; шаг 2 — 28 447 символов стенограммы, ответ дословно верный
и по вопросу из ПЕРВОГО сообщения, то есть память шагов работает. Два шага
за 17 с. --selftest пройден, --check зелёный.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Мост сам жмёт Retry, но попытки там не бесконечны. Если текст про занятость
всё же доехал, разбирать его как ответ нельзя: блоков-запросов в нём нет, и
цикл решил бы, что запросов не поступило, и молча закончил работу.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
DeepSeek через веб-чат видит только то, что человек положил в вопрос. Здесь
у него появляется обратное направление: он возвращает блок-запрос, программа
исполняет его и досылает результат следующим сообщением в тот же чат. Обычный
агентский цикл, только транспорт — текст.
Инструменты (только чтение, только внутри рабочей папки):
=== NEED: путь, путь === прислать файлы целиком
=== LIST: **/*.mjs === список файлов по маске
=== FIND: текст === где встречается, с номерами строк
Запуска команд намеренно нет: исполнять строки из ответа, пришедшего из
интернета, без белого списка и подтверждения нельзя.
Мост ollama_orchestro/ask.mjs не импортируется и не копируется — он разбирает
process.argv и исполняет команду на верхнем уровне, поэтому import немедленно
запустил бы её. Вызывается подпроцессом теми флагами, которые у него уже есть:
шаг 1 без --new (правка первого сообщения), шаги 2..N с --new, иначе DeepSeek
не помнит предыдущий шаг. Взамен orchestro не меняется ни на строку, а его
правки прилетают сюда даром.
Два урока, каждый стоил живого прогона и вписан в код:
- инструкция в начале сообщения не работает. 22 КБ файла между приставкой и
вопросом — и блоки-запросы игнорируются. Помогает дословное напоминание
вплотную к вопросу;
- дерево папки надо давать сразу. Без него DeepSeek угадывает имена файлов и
тратит два круга по минуте на LIST.
Есть веб-пульт (start-deepwork.cmd, бросить папку): файлы галочками, журнал
шагов по ходу, запись правок с копией в backup/.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>