Эта страница переведена с английской документации. Команды, идентификаторы и примеры не изменены. Среда выполнения 7.24.4 · SDK 2.6.7. Английский оригинал
Эксплуатация AX Code для долгой работы
Статус: активно Область: текущее состояние Последняя проверка: 2026-09-13 Владелец: сопровождающие AX Code
AX Code ограничивает один интерактивный запуск Super-Long 72 часами. Для работы на
дни или недели запускайте управляемый процесс ax-code serve и делите работу
на долговечные запланированные наступления. Супервизор перезапускает сервер; база
данных проекта сохраняет расписания и состояние очереди.
Постоянная интерактивная рабочая область
Для локальной работы, которая должна продолжаться после закрытия терминала, согласитесь на среду выполнения проекта:
ax-code runtime start --dir /absolute/path/project
ax-code runtime attach --dir /absolute/path/project --continue
ax-code runtime status --dir /absolute/path/project
ax-code runtime list # every managed runtime on this machine
ax-code runtime stop --dir /absolute/path/project
runtime attach тоже запускает среду выполнения, если её нет. Среда выполнения ключуется
каноническим каталогом проекта; одновременные запуски переиспользуют один процесс.
TUI показывает хост выполнения и действие Отключить. Отключение
закрывает клиента и оставляет принятую работу запущенной. runtime stop останавливает
среду выполнения этого проекта и прерывает его активную работу. Обычный ax-code
сохраняет существующий жизненный цикл переднего плана.
Принятые продолжения, отправленные, пока сессия занята, сохраняются на сервере.
По умолчанию они стартуют после конца текущего хода, поэтому посторонний запрос
не сбивает идущую работу. Чтобы вместо этого поправить текущий ход, нажмите
ctrl+s (input_submit_steer в keybinds) с черновиком только из текста: текст
допускается в активное порождение и записывается как сообщение пользователя на
следующей границе шага цикла, после того как вызовы инструментов в полёте улягутся и до
следующего запроса модели. Поправка, допущенная, пока ход заканчивается, продлевает
запуск на одну итерацию, а не отбрасывается. Управление — по возможности: если
порождение уже не активно, черновик уходит обычным путём;
если хук его отвергает, черновик остаётся в компоновщике с причиной. Черновики
с вложениями и команды с косой чертой всегда идут в очередь продолжений. Та же
доставка доступна другим клиентам через API управления, описанный в
управлении обвязкой.
Сохранённые продолжения тоже можно направить задним числом: нажатие ctrl+s при
пустом компоновщике продвигает управляемый префикс очереди по порядку и останавливается
на первой неуправляемой строке, а раздел продолжений на боковой панели и диалог
/queue предлагают то же действие «направить сейчас» для строки. Строки на паузе
управляемы на месте: прерывание хода ставит ожидающие продолжения на паузу, а
направление одного доставляет его текст, не возобновляя остальную очередь. Барьерами
служат только строки не-продолжений (поставленные в очередь команды с косой чертой и команды оболочки), строки
с вложениями, пустой или слишком большой текст и строки, которые уже выполняются или завершены.
Направленные строки отменяются со следом аудита steeredInto и остаются
видны в истории /queue. Когда порождение не активно, «направить сейчас» возвращается
к выносу строки в начало очереди — она всё равно стартует только
после конца хода.
Компоновщик очищается только после подтверждения. Снова присоединитесь к той же сессии
и используйте /queue, чтобы осмотреть, поставить на паузу, править, возобновить или отменить их. Правка сначала
ставит элемент на паузу и сохраняет вложения и выбор модели; сохранение не
возобновляет его. Одновременные устаревшие правки отвергаются. В /queue Ctrl+R включает
завершённую и отменённую историю. Узкие терминалы также показывают нажимаемый
заголовок Follow-ups. Отключённый вид кэширован и не может менять элементы.
Прерывание активного хода ставит ожидающие продолжения на паузу, чтобы они не начали
сразу ещё один ход. Возобновите их явно, когда будете готовы.
После перезапуска бэкенда принятые ожидающие продолжения могут возобновиться. Обычный запрос в полёте, прерванный этим перезапуском, помечается неудачным и требует осмотра перед повтором; восстановление записей очереди не восстанавливает выполняющийся процесс оболочки. Потерянное подтверждение можно повторить из неизменённого компоновщика с той же личностью запроса в этой клиентской сессии. Несохранённые черновики — не принятые задания, и это не гарантирует ровно однократных внешних эффектов.
Этот режим не ставит службу входа, не перезапускает упавший сервер автоматически и не выполняется, пока хост спит или выключен. После сбоя запустите или присоединитесь снова; для перезапусков сервера без присмотра используйте примеры управляемой службы ниже. Пользователям SSH следует запускать среду выполнения на бодрствующем удалённом хосте и присоединяться там. Не открывайте порт HTTP публично.
Обнаружение среды выполнения хранит частную возможность и журнал в каталоге
runtime/ состояния AX Code. Вывод статуса опускает возможность. Остановка
требует аутентифицированной совпадающей личности среды выполнения, а не только сохранённого PID.
Недоступный живой процесс, повреждённая запись или несовпадение версии требуют
осмотра; CLI отказывается убивать непроверенный процесс. Остановите здоровую
среду выполнения перед обновлением и перезапустите её новым исполняемым файлом.
Модель надёжности
| Событие | Поведение |
|---|---|
| Бэкенд выходит до фиксации подоспевшего наступления | Наступление остаётся подоспевшим |
| Бэкенд выходит после фиксации транзакции из расписания в очередь | Тот же элемент очереди возобновляется при старте |
| Бэкенд выходит после старта запроса | Прерванный элемент помечается неудачным и не воспроизводится автоматически |
| Хост пропускает несколько наступлений | run_once сливает их в один запуск; skip продвигает без запуска |
| Запуск очереди превышает свой срок | Исполнитель отменяет сессию и записывает неудачный элемент очереди |
| Супервизор видит выход сервера | Примеры ниже перезапускают его после короткой паузы |
Это восстановление, безопасное к дублям, а не доставка ровно один раз для произвольных внешних эффектов. Интеграции, которые пишут во внешние системы, всё ещё должны использовать собственные ключи идемпотентности.
Перед установкой службы
- Установите и проверьте исполняемый файл
ax-codeот имени того же пользователя, который будет запускать службу. - Выберите один абсолютный путь проекта. Задайте его как
AX_CODE_PROJECT, чтобы старт сервера прогрел этот проект и запустил его планировщик. - Держите сервер на
127.0.0.1; сервер AX Code только локальный. - Кладите учётные данные провайдера в защищённое окружение супервизора, а не в зафиксированный файл службы.
- Замените каждый заполнитель
/absolute/path/...в выбранном примере.
Примеры используют фиксированный порт, чтобы клиенты Desktop или SDK могли переподключиться:
ax-code serve --hostname=127.0.0.1 --port=4096
Служба пользователя systemd
Скопируйте пример systemd в
~/.config/systemd/user/ax-code.service, замените абсолютные пути и
по желанию положите учётные данные в ~/.config/ax-code/server.env.
chmod 600 ~/.config/ax-code/server.env
systemctl --user daemon-reload
systemctl --user enable --now ax-code.service
systemctl --user status ax-code.service
journalctl --user -u ax-code.service -f
Используйте loginctl enable-linger "$USER", только если политика операционной системы позволяет
службе пользователя работать, пока пользователь не вошёл.
Агент launchd
Скопируйте пример launchd в
~/Library/LaunchAgents/com.axcode.server.plist, замените абсолютные пути,
затем проверьте и загрузите:
plutil -lint ~/Library/LaunchAgents/com.axcode.server.plist
launchctl bootstrap "gui/$(id -u)" ~/Library/LaunchAgents/com.axcode.server.plist
launchctl kickstart -k "gui/$(id -u)/com.axcode.server"
launchd не раскрывает переменные оболочки в ProgramArguments. Используйте абсолютные
пути и передавайте нужные учётные данные через механизм, которым управляет оператор.
PM2
Скопируйте пример PM2, замените пути и запустите:
pm2 start docs/examples/ax-code-ecosystem.config.cjs
pm2 save
pm2 logs ax-code-server
Следуйте платформенным указаниям запуска PM2, если процесс должен вернуться после перезагрузки хоста.
Сроки, наверстывание и восстановление
Запланированные задачи по умолчанию равны catchUpPolicy: "run_once". После простоя AX Code
запускает одно слитное наступление, а не создаёт неограниченный задел.
Выбирайте "skip", когда запоздавшая работа была бы обманчивой или небезопасной.
Каждая запланированная задача может задать maxRunDurationMs от 1 секунды до 72 часов.
Иначе выполнение очереди задач использует потолок 72 часа. Активные элементы обновляют
метку пульса каждые 30 секунд, а терминальный статус и подробности ошибки
остаются в базе данных проекта.
Асинхронные конечные точки запроса, команды и оболочки возвращают долговечный элемент очереди в
ответе HTTP 202. Клиентам следует сохранить его id и опрашивать
GET /task-queue/:id, пока не будет completed, failed или cancelled; одного принятия
недостаточно для завершения.
При старте постоянный бэкенд AX Code возобновляет элементы очереди расписания и явно помеченные асинхронные элементы, которые были зафиксированы, но не начаты. Разовые команды CLI не берут эти элементы во владение. Уже начатая работа запроса помечается неудачной с объяснением перезапуска, чтобы оператор мог осмотреть побочные эффекты перед повтором.
Как видеть, что делают запланированные задачи
Каждое наступление запланированной задачи видно, пока оно происходит, и доступно для аудита потом:
- Старт, завершение, сбой, пропуск и автопауза при устойчивом сбое каждый поднимает уведомление в приложении с именем задачи.
- Команда TUI
/scheduleперечисляет каждую задачу со статусом, расписанием, временем следующего запуска и последней ошибкой и открывает историю недавних запусков. Оттуда можно поставить на паузу, возобновить, запустить сейчас, удалить (нажмитеctrl+dдважды для подтверждения) и перейти к сессии, которую породил запуск. Инструменты агентаlist_scheduled_tasksиlist_scheduled_task_runsотвечают на те же вопросы в разговоре. - Каждый запуск выполняется в новой сессии с заголовком задачи, поэтому результаты в одном шаге от списка сессий, даже если уведомление пропущено.
- Если запуск просит разрешение или ответ на вопрос, пока вы смотрите
другой разговор, предупреждение называет сессию, которой вы нужны;
/attentionперечисляет известные ожидающие запросы и открывает запрашивающую сессию. На запросы можно ответить в этой сессии или в виде загруженного предка, включая дочерние и внучатые сессии. Открытие запроса никогда не одобряет его автоматически. - Разовая задача отключается только после успешного запуска. Неудачное наступление повторяется с ограниченной паузой, а повторные сбои ставят задачу на паузу с уведомлением — напоминание больше не может исчезнуть молча.
Операционные проверки
- Следите за числом перезапусков супервизора и журналами сервера.
- Осмотрите неудачные элементы очереди задач и ошибки запланированных задач перед повтором.
- Убедитесь, что диску хватает места для базы SQLite проекта и журналов.
- После смены учётных данных, моделей или путей службы выполните ручной запуск сейчас.
- Останавливайте через супервизор, чтобы AX Code получил
SIGTERM; примеры дают до 90 секунд на корректное завершение.
/loop намеренно локален для процесса и не переживает перезапуск. Для долговечной работы без присмотра используйте
запланированные задачи.
Навигация по параллельным сессиям
При ширине терминала 146 столбцов и больше левая боковая панель навигации показывает сессии
текущей рабочей области и их загруженных дочерних агентов. Разверните строку её
элементом + и щёлкните заголовок, чтобы открыть. Закреплённые сессии сохраняют порядок и
номера сочетаний. Полные подписи активности отличают работу, повтор, одобрения
и вопросы; родители также отражают запросы потомков. Эти подписи не
означают, что задача прошла проверку. Существующая правая боковая панель хранит контекст и элементы управления
текущей сессии.
Заголовок проекта называет текущий каталог. Щёлкните его или используйте
/navigation-info, чтобы увидеть полный путь проекта и заголовок текущей сессии.
«Недавние» показывает загруженные сессии; «Активные» держит деревья работающих или ожидающих сессий
и дерево текущей сессии. Фильтр общий с выбором навигации
и запоминается. Переключайте его с клавиатуры через /navigation-filter. Во время
отключения он показывает кэшированные сессии, а не выводит, какие сессии
активны. Очистка (или /navigation-clear) просит подтверждения, затем скрывает
исторические строки только с левой рейки и из выбора навигации. Сессии она не
удаляет; /sessions их по-прежнему перечисляет. Дерево текущей сессии, закреплённые сессии и наблюдённые
работающие или ожидающие деревья остаются на рейке. Открытие сессии из /sessions
возвращает её в список.
Используйте /navigation-width или действие ширины навигации, чтобы выбрать 20, 24, 28, 30, 32, 36 или 40
столбцов (по умолчанию 28). У правой боковой панели сессии то же действие ширины и
/sidebar-width (по умолчанию 32). Оба предпочтения запоминаются и при необходимости сжимаются сами,
чтобы сохранить основное содержимое. Используйте /navigation, чтобы скрыть или вернуть левую
рейку навигации на широких терминалах. /sidebar так же скрывает или возвращает правую
боковую панель сессии. На более узких терминалах /navigation открывает выбор сессии и агента.
Видимая полоса сессий даёт то же действие, когда
рейки навигации нет. Её действие «Ожидает» появляется, когда известным запросам нужен ввод;
звёздочка помечает кэшированный счёт во время отключения. /sessions
по-прежнему открывает обычный выбор сессии. /attention доступен на любой
ширине. Во время отключения его список помечен как кэшированный; открыть кэшированные
записи всё ещё можно, но на запросы могли уже ответить в другом месте.
Действие известных запросов боковой панели открывает ожидающие запросы по известным
рабочим областям, а её дерево сессий остаётся в пределах текущего проекта.
Все эти виды ограничены подключённым экземпляром и загруженными данными сессий;
этот счёт — не полный инвентарь других серверов или незагруженных рабочих областей.
Неотправленные черновики изолированы по проекту и сессии внутри работающего TUI. Смена сессии сохраняет текст, вложения, позицию курсора и режим оболочки; возврат восстанавливает подходящий черновик. Эти черновики только в памяти и не переживают закрытие TUI.
Необязательное уведомление о завершении теперь говорит Session idle. Оно следует
наблюдённой работе в поддереве просматриваемой сессии и ждёт, пока наблюдённые активные
потомки станут явно простаивающими и не останется ожидающих запросов. Отключения,
повторная синхронизация, отсутствующее состояние, ошибки и отмена могут подавить уведомление. Это
уведомление жизненного цикла, а не свидетельство, что тесты прошли или цель завершена.
Новые задачи и настройка
Обычный старт открывает поверхность работы «Новая задача» с нижним компоновщиком и
навигацией по сессиям. Её открытие или набор черновика не создаёт сохранённую
сессию; сессия создаётся при отправке. Используйте /sessions или левую
навигацию, чтобы возобновить существующую работу. Явное поведение --session, --continue и
--prompt остаётся доступным; старт не включает автоматическое возобновление.
Настройка провайдера не открывается сама. Используйте видимое действие /connect
в рабочей области, когда провайдер не настроен. Если провайдер настроен,
но допустимая модель не выбрана,
действие меняется на /models. Неудачное обнаружение провайдера указывает на /status;
/connect и /providers остаются доступны, чтобы починить конфигурацию. Выбранная
модель — выбор конфигурации, а не проверка учётных данных или готовности среды выполнения.
Подсказки также появляются у вернувшихся пользователей, чьей конфигурации нужно внимание.