English · العربية · Español · Français · 日本語 · 한국어 · Tiếng Việt · 中文 (简体) · 中文(繁體) · Deutsch · Русский
Scratch-like PWA + Tornado backend для управления автоматизированным пайплайном написания романов (и разработки приложений).
В этом репозитории также используется AutoAppDev/ как submodule (повторно используемые скрипты auto-development).
Tip
README.md — базовый канонический документ. Локализованные версии находятся в i18n/ и подключаются через единственную строку выбора языка наверху.
| Кратко | Подробности |
|---|---|
| Основной стек | Python + backend Tornado, frontend PWA в браузере |
| Базовый UX | Редактор скрипта и блоков на одной общей источнике правды |
| Режим выполнения | Возобновляемый runner с сохраненным курсором и результатами действий |
| Realtime | WebSocket endpoint по адресу /ws |
| Изменяемый runtime- root | autonovelwriter/runtime/ (игнорируется git) |
| Что использовать прямо сейчас | Команда / URL |
|---|---|
| Открыть локальную PWA | http://127.0.0.1:8787/ |
| Подключить live-обновления | ws://127.0.0.1:8787/ws |
| Быстрый старт backend | python3 autonovelwriter/backend/server.py --host 127.0.0.1 --port 8787 |
| Скриптный setup + start | scripts/setup_and_run_autonovelwriter.sh --env autonovelwriter --kill |
Tip
Самый быстрый локальный старт:
scripts/setup_and_run_autonovelwriter.sh --env autonovelwriter --kill- Откройте
http://127.0.0.1:8787/ - Подключите WebSocket-обновления:
ws://127.0.0.1:8787/ws
| Значение запуска по умолчанию | Значение |
|---|---|
| PWA URL | http://127.0.0.1:8787/ |
| WebSocket URL | ws://127.0.0.1:8787/ws |
| Backend host/port | 127.0.0.1:8787 |
- Обзор
- Возможности
- Архитектура с первого взгляда
- Структура проекта
- At-a-Glance Navigation
- Требования
- Установка
- Использование
- Конфигурация
- Ключевые backend API
- Пути runtime
- Pipeline script (канонический артефакт)
- Runner outputs (черновик)
- Runner tasks (batch-черновик)
- Настройки агента / Codex Gate
- PWA I18N (язык интерфейса)
- Настройки романа (отдельно от UI)
- Примеры
- Заметки по разработке
- Заметки по тестированию
- Содержимое репозитория
- Устранение неполадок
- Roadmap
- Как внести вклад
- Support
- Лицензия
AutoNovelWriter предоставляет локальный orchestration-уровень для:
- Редактирования канонического пайплайн-скрипта (
pipeline.script) через текст и блоки. - Запуска возобновляемого исполнения в backend с сохранением курсора и результатов действий.
- Управления проектами, материалами, выводами, пакетами задач и шаблонами действий.
- Трансляции live-обновлений через WebSocket (
/ws) в PWA.
Канонический изменяемый runtime — autonovelwriter/runtime/ (содержимое игнорируется Git).
| Область | Назначение |
|---|---|
| Редактирование pipeline | Редактирование канонического скрипта + вложенного UI блоков из одного источника истины |
| Выполнение | Возобновляемый runner с сохраненным курсором и результатами действий |
| Работа с проектами | Материалы проекта, outputs, настройки и активация задач batch |
| Realtime UX | События /ws для обновлений статуса, логов, outputs, tasks и действий |
- Scratch-like редактор pipeline на основе канонического скрипта + parser/AST.
- API управления runner (
start/pause/resume/stop) с возобновляемым состоянием. - Control-flow контейнеры:
LOOP,ROUND,FOREACH_TASK,FOREACH_ACTION,IF/ELSE. - Библиотека действий с шаблонами по умолчанию + пользовательскими override по модели copy-on-edit.
- Проектные override-настройки романа с семантикой наследования.
- Поток генерации/индекса/деталей/активации batch для
FOREACH_TASK. - Индексация outputs и endpoint предпросмотра последнего PDF романа.
- Встроенные словари i18n для PWA (
en,zh-Hans,zh-Hant,ja,ko,vi,ar,fr,es,ru,de). - Скрипты tmux и возобновляемый Codex auto-dev драйвер.
Browser (PWA)
├─ pipeline editor (скрипт + blocks)
├─ panels: settings / projects / actions / tasks / outputs
└─ WebSocket client (/ws)
│
▼
Tornado backend (autonovelwriter/backend/server.py)
├─ REST APIs (/api/*)
├─ WebSocket broadcast hub
├─ parser + AST + persistence канонического скрипта
├─ resumable runner + журнал коммитов action-result
└─ runtime bootstrap (dirs + defaults)
│
▼
autonovelwriter/runtime/ (mutable, local-first)
├─ state/ (pipeline, settings, runner, chat)
├─ projects/<id>/ (materials, outputs, project settings)
├─ tasks/ (active list + generated batches)
├─ actions/ (defaults + user overrides)
└─ logs/ (runner.log)
AutoNovelWriter/
├── README.md
├── .github/
│ └── FUNDING.yml
├── .gitmodules # AutoAppDev submodule declaration
├── autonovelwriter/
│ ├── backend/
│ │ ├── server.py # main backend entrypoint + API/WS handlers + runner logic
│ │ ├── requirements.txt # tornado>=6.4
│ │ ├── .env.example
│ │ └── tests/ # backend unit tests
│ ├── pwa/
│ │ ├── index.html
│ │ ├── app.js # UI logic + embedded i18n dictionaries
│ │ ├── app.css
│ │ ├── manifest.webmanifest
│ │ ├── service_worker.js
│ │ ├── icons/
│ │ └── tests/
│ └── runtime/ # mutable state/IO (gitignored)
├── scripts/
│ ├── run_autonovelwriter_tmux.sh
│ ├── setup_conda_env.sh
│ ├── setup_and_run_autonovelwriter.sh
│ ├── auto-autonovelwriter-development.sh
│ └── backups/
├── scripts-legacy/
├── docs/
│ ├── autonovelwriter_spec.md
│ ├── auto-development-guide.md
│ └── ORDERING_RATIONALE.md
├── references/
│ └── autonovelwriter_dev/
├── examples/
│ └── ralph-wiggum-example.sh
├── i18n/
│ ├── README.ar.md
│ ├── README.de.md
│ ├── README.es.md
│ ├── README.fr.md
│ ├── README.ja.md
│ ├── README.ko.md
│ ├── README.ru.md
│ ├── README.vi.md
│ ├── README.zh-Hans.md
│ └── README.zh-Hant.md
└── AutoAppDev/ # git submodule (git@github.com:lachlanchen/AutoAppDev.git)
| Зависимость | Требуется | Примечание |
|---|---|---|
Python 3.11+ |
Да | Рекомендуемый baseline |
pip |
Да | Установка зависимостей backend |
tmux |
Нет | Нужен для многооконного launcher-скрипта |
conda |
Нет | Опционально для helper-скриптов |
node |
Нет | Опционально для прямого запуска PWA тестов |
| Путь | Когда использовать | Команда |
|---|---|---|
| Option A | Используете conda и хотите использовать setup из репозитория | scripts/setup_conda_env.sh --name autonovelwriter |
| Option B | Нужен setup + запуск одной командой | scripts/setup_and_run_autonovelwriter.sh --env autonovelwriter --kill |
| Option C | Предпочитаете ручное управление pip | python3 -m pip install -r autonovelwriter/backend/requirements.txt |
scripts/setup_conda_env.sh --name autonovelwriterЗатем запустите через tmux:
scripts/run_autonovelwriter_tmux.sh --env autonovelwriterscripts/setup_and_run_autonovelwriter.sh --env autonovelwriter --killpython3 -m pip install --upgrade pip
python3 -m pip install -r autonovelwriter/backend/requirements.txtgit submodule update --init --recursive| Поток | Команда / URL |
|---|---|
| Запустить backend | python3 autonovelwriter/backend/server.py --host 127.0.0.1 --port 8787 |
| Открыть приложение | http://127.0.0.1:8787/ |
| WebSocket endpoint | ws://127.0.0.1:8787/ws |
| Optional static PWA | python3 -m http.server 5173 --bind 127.0.0.1 --directory autonovelwriter/pwa |
| launcher через tmux | scripts/run_autonovelwriter_tmux.sh --no-attach |
python3 -m pip install -r autonovelwriter/backend/requirements.txt
python3 autonovelwriter/backend/server.py --host 127.0.0.1 --port 8787
# open http://127.0.0.1:8787/Backend (Tornado):
python3 autonovelwriter/backend/server.py --host 127.0.0.1 --port 8787Backend также отдает статику PWA из autonovelwriter/pwa/ по умолчанию, поэтому можно открыть:
http://127.0.0.1:8787/(PWA)- WebSocket:
ws://127.0.0.1:8787/ws
Опционально: PWA (отдельный статический dev server):
python3 -m http.server 5173 --bind 127.0.0.1 --directory autonovelwriter/pwaОткройте PWA на http://127.0.0.1:5173 и направьте её на backend (по умолчанию ws://127.0.0.1:8787/ws).
tmux (запуск backend и PWA + tail логов):
scripts/run_autonovelwriter_tmux.sh --no-attach
tmux attach -t autonovelwriter_appConda env helper:
scripts/setup_conda_env.sh --name autonovelwriter
scripts/run_autonovelwriter_tmux.sh --env autonovelwriter
# one-shot:
scripts/setup_and_run_autonovelwriter.sh --env autonovelwriter --killСкрипт драйвера репозитория (scripts/auto-autonovelwriter-development.sh) также может запускать tmux-сессию для auto-dev.
- Запустите backend (или tmux helper).
- Откройте PWA.
- Отредактируйте pipeline через блоки и/или текстовое поле скрипта.
- Проверьте/сохраните pipeline.
- Запустите runner и следите за логами/статусом/events.
- Просмотрите сгенерированные outputs и task batches.
Используйте autonovelwriter/backend/.env.example как шаблон. Ключевые переменные для backend/runtime:
AUTONOVELWRITER_RUNTIME_ROOT(по умолчаниюautonovelwriter/runtime)AUTONOVELWRITER_PWA_ROOT(по умолчаниюautonovelwriter/pwa)AUTONOVELWRITER_HOST(по умолчанию127.0.0.1)AUTONOVELWRITER_PORT(значение по умолчанию в CLI:8787)AUTONOVELWRITER_WORKSPACE_ROOT(по умолчанию: родитель корня репозитория)AUTONOVELWRITER_WRITER_SCRIPT(по умолчанию${WORKSPACE_ROOT}/scripts/auto-xiyouzhiyuan-writer.sh)AUTONOVELWRITER_XIYOU_INPUT_DIR(по умолчанию${WORKSPACE_ROOT}/references/xiyouzhiyuan/input)AUTONOVELWRITER_NOVELS_ROOT(по умолчанию${WORKSPACE_ROOT}/auto-novels)AUTONOVELWRITER_ENABLE_CODEX(включатель запуска агента, по умолчанию disabled)AUTONOVELWRITER_CODEX_CLI_PATH(опциональный override для бинарника codex)
run_autonovelwriter_tmux.sh:
--session <name>--backend-port <n>--pwa-port <n>--host <ip>--env <conda_env>--debug--kill--no-attach
setup_conda_env.sh:
--name <env>--python <ver>--force-recreate
setup_and_run_autonovelwriter.sh:
--env <name>--python <ver>--session <name>--backend-port <n>--pwa-port <n>--host <ip>--force-recreate--debug--kill--no-attach
| API-группа | Ключевые endpoints |
|---|---|
| Health & settings | /api/health, /api/settings |
| Проекты и project settings | /api/projects, /api/projects/active, /api/projects/settings |
| Pipeline | /api/pipeline, /api/pipeline/validate, /api/pipeline/reference_writer* |
| Tasks | /api/tasks/batches/index, /api/tasks/batches/<batch_id>, /api/tasks/batches/<batch_id>/activate |
| Actions | /api/actions, /api/actions/<action_id>, /api/actions/<action_id>/copy |
| Runner | `/api/run/start |
| Outputs & preview романа | /api/outputs/index, /api/novel/latest, /api/novel/latest/pdf |
| Realtime | /ws |
- Health:
GET /api/health - Settings:
GET/POST /api/settings - Проекты:
GET /api/projects,POST /api/projects/active - Настройки проекта (активный проект):
GET/POST /api/projects/settings(inherit semantics на проект:novel_language,novel_tone,novel_target_length_words) - Индекс материалов (активный проект):
GET /api/materials/index - Outputs index (активный проект):
GET /api/outputs/index - Индекс task batches:
GET /api/tasks/batches/index(опционально:?project=<project_id>) - Детали task batch:
GET /api/tasks/batches/<batch_id> - Активация task batch:
POST /api/tasks/batches/<batch_id>/activate(записываетruntime/tasks/tasks.jsonиactive_tasks.jsonпроекта) - Action Library:
GET /api/actions,GET /api/actions/<action_id>,POST /api/actions/<action_id>/copy,PUT /api/actions/<action_id>(copy-on-edit update для defaults) - Pipeline (канонический скрипт + производный JSON):
GET/POST /api/pipeline - Проверка pipeline (только preview):
POST /api/pipeline/validate - Reference writer pipeline preview/load:
GET /api/pipeline/reference_writer(читает и парсит../scripts/auto-xiyouzhiyuan-writer.shкак reference)POST /api/pipeline/reference_writer/load(загружает разобранный результат в runtime pipeline; исходный скрипт не изменяет)
- Chat:
GET /api/chat/history,POST /api/chat/send - Последний PDF романа:
GET /api/novel/latest(метаданные)GET /api/novel/latest/pdf(inline PDF stream для viewer)
- Управление runner:
POST /api/run/start|pause|resume|stop,GET /api/run/status - Agent test (с gate):
POST /api/agent/test(запускаетcodex --versionтолько при включении gate + env)
- Endpoint:
/ws - Broadcast-события:
hello,chat,outbox_written,input_mirror_written,output_created,tasks_batch_created,tasks_batch_activated,action_created,action_updated,action_result_committed,run_status,task_status,log,pipeline_updated,project_active_changed,project_settings_updated,echo
Все изменяемое состояние и IO лежат в autonovelwriter/runtime/:
| Путь | Назначение |
|---|---|
autonovelwriter/runtime/io/inbox/ |
user -> system (загрузка .txt/.md) |
autonovelwriter/runtime/io/outbox/ |
system -> user (backend пишет chat messages) |
autonovelwriter/runtime/state/ |
persistируемый JSON state (settings, pipeline, runner, chat) |
autonovelwriter/runtime/state/chat.sqlite3 |
зеркальный sqlite чат (дополнительно к chat.jsonl) |
autonovelwriter/runtime/state/active_project.json |
сохраненный указатель активного проекта |
autonovelwriter/runtime/tasks/ |
файлы очереди задач |
autonovelwriter/runtime/tasks/batches/<batch_id>/ |
сгенерированные batches задач (напр. из meta_tasks_generate) |
autonovelwriter/runtime/logs/ |
логи |
autonovelwriter/runtime/projects/<project_id>/materials/ |
материалы проекта (inputs) |
autonovelwriter/runtime/projects/<project_id>/outputs/ |
outputs проекта (drafts/exports) |
autonovelwriter/runtime/projects/<project_id>/state/project_settings.json |
пер-проектные override для параметров романа (например, novel language) |
autonovelwriter/runtime/actions/defaults/ |
базовые шаблоны Action Library (рассматриваются как immutable) |
autonovelwriter/runtime/actions/user/ |
пользовательские шаблоны Action Library (созданы через copy-on-edit) |
/home/lachlan/Documents/VoidAbyss/references/xiyouzhiyuan/input/ |
зеркальные чаты writer-пайплайна в ingestion |
Pipeline хранится как форматированный скрипт на диске:
autonovelwriter/runtime/state/pipeline.script
Backend отдает его через GET/POST /api/pipeline как:
script(канонический, shell-likeSTEP <type>/DISABLED <type>строки)pipelineJSON (derived, плоский список для рендера блоков)pipeline_ast(derived, nested structure для loop/indent UI)
Runner выполняет шаги, полученные из одного и того же v2 parser/AST, поэтому PWA и backend совпадают.
Runner control flow поддерживает v2 контейнеры:
ROUND <n>повторяет детейnраз.FOREACH_TASKвыполняет детей один раз для каждой задачи из active task list (autonovelwriter/runtime/tasks/tasks.json).FOREACH_ACTIONвыполняет детей для каждого элемента вpayload.actionsтекущей задачи (предназначен для вложения подFOREACH_TASK).
Возобновление:
- runner сохраняет resumable execution cursor в
autonovelwriter/runtime/state/runner_state.json. - Курсор продвигается только после успешного завершения блока (поэтому restart не пропускает незавершенную работу).
- Если канонический скрипт pipeline изменился (хэш не совпал), runner останавливается и требует restart (cursor инвалидируется).
- Runner сохраняет
ActionResultна шаг вautonovelwriter/runtime/state/action_results.jsonlи использует детерминированныйexec_idна шаг, чтобы не дублировать уже закоммиченные результаты после restart. - При выполнении внутри
FOREACH_ACTIONActionResults содержатaction_index,action_id_ref,action_key, а переменные включаютprevи явные скоупыtask.prevиaction.prev.
Pipeline script v2 поддерживает вложенность:
LOOP <n>создает loop block.ROUND <n>создает rounds container block.FOREACH_TASKсоздает per-task container block.FOREACH_ACTIONсоздает per-action container block (runner итерируетtask.payload.actions).IF <expr>создает conditional container block (parse/render; сейчас runner исполняет только then-branch).ELSEсоздает optional alternate branch подIFblock.- Дети отступаются на 2 пробела на уровень.
Валидация (без сохранения):
POST /api/pipeline/validateвозвращает канонический preview плюсpipeline_ast, warnings и errors.
PWA показывает скрипт в textarea (source of truth) и рендерит вложенные блоки из pipeline_ast.
Если endpoint валидации backend недоступен, PWA переходит на local parser с теми же v2 глаголами (LOOP, ROUND, FOREACH_TASK, FOREACH_ACTION, IF, ELSE, STEP, DISABLED).
Заметки по Blocks UI:
LOOPиROUNDrepeat-count редактируются inline в списке блоков; валидные изменения сразу обновляют канонический script textarea.- Панель блоков может вставлять контейнеры
LOOP,ROUND,FOREACH_TASK,FOREACH_ACTION,IFбез ручного редактирования скрипта (оборачивает выбранный блок или добавляет корректный непустой контейнер). - Блоки можно удалять с canvas (Delete-кнопка у каждого блока; клавиша
Delete, если блок выбран). Удаление контейнера вынимает детей наверх, и редактор поддерживает non-empty containers, чтобы не создавать invalid скрипты. IFблоки поддерживают структурную корректность:ELSEне может остаться внеIF, основной branch остается непустым.STEPблоки показывают controls Action Library: selector action,Customize(копирует default action в пользовательскую и переключает на нее),Edit(Action Editor modal дляname/tool/prompt/script).
Когда pipeline содержит блок STEP write, backend runner создает stub draft файл в:
autonovelwriter/runtime/projects/<project_id>/outputs/
Backend также эмитит:
- WS-событие
output_createdсpathиproject_rel_path - строку лога
[output] created: ...
В PWA есть минимальная панель Outputs, она показывает файлы через GET /api/outputs/index и обновляется на output_created.
Когда pipeline содержит блок STEP meta_tasks_generate, backend runner создает stub task batch в:
autonovelwriter/runtime/tasks/batches/<batch_id>/
Backend также эмитит:
- WS-событие
tasks_batch_createdсbatch_dir,tasks_jsonlиtask_count - строку лога
[tasks] created batch: ...
PWA содержит минимальную панель Task Batches, которая списки batches через GET /api/tasks/batches/index и обновляет их на tasks_batch_created.
Она также умеет показывать детали batch (GET /api/tasks/batches/<batch_id>) и активировать batch, чтобы сделать его текущим списком для FOREACH_TASK (POST /api/tasks/batches/<batch_id>/activate).
Panel настроек PWA сохраняет agent settings через /api/settings в autonovelwriter/runtime/state/settings.json.
Для безопасности backend не запускает codex CLI, пока не истинны оба условия:
settings.agent.enabled=trueиsettings.agent.sdk="codex"- в окружении установлен
AUTONOVELWRITER_ENABLE_CODEX=1
Не коммитьте секреты. Используйте autonovelwriter/backend/.env.example как шаблон локальных переменных среды.
У PWA есть облегченная встроенная система i18n.
- Форсировать язык UI: добавьте
?lang=<code>в URL PWA (например,?lang=ja). - Сохраняется в localStorage на браузер:
anw_lang. - Поддерживаемые UI языки:
en,zh-Hans,zh-Hant,ja,ko,vi,ar(RTL),fr,es,ru,de. - Локализованные README на уровне репозитория сейчас находятся в
i18n/и подключаются через единственную строку выбора языка в начале этого документа.
README locale-файлы (i18n/) |
Статус |
|---|---|
README.ar.md, README.de.md, README.es.md, README.fr.md, README.ja.md, README.ko.md, README.ru.md, README.vi.md, README.zh-Hans.md, README.zh-Hant.md |
Present |
Настройки написания романа хранятся в backend settings under settings.novel.* в:
autonovelwriter/runtime/state/settings.json
Они намеренно отделены от PWA UI языка (?lang= / anw_lang).
Пер-проектные overrides лежат в:
autonovelwriter/runtime/projects/<project_id>/state/project_settings.json
Текущие глобальные поля (редактируемые в модалке PWA Settings):
settings.novel.language(BCP-47-like коды, напримерen,ja,zh-Hansи т.д.)settings.novel.tonesettings.novel.target_length_wordssettings.novel.povsettings.novel.tensesettings.novel.chapter_count_target
Текущие проектные override-поля (empty/unset означает inherit глобальных):
project_settings.novel_languageproject_settings.novel_toneproject_settings.novel_target_length_words
python3 autonovelwriter/backend/server.py --host 127.0.0.1 --port 8787
# then open http://127.0.0.1:8787/scripts/run_autonovelwriter_tmux.sh --no-attach
tmux attach -t autonovelwriter_apppython3 autonovelwriter/backend/tests/pipeline_if_else_roundtrip_test.py
python3 autonovelwriter/backend/tests/runner_foreach_action_semantics_unit_test.pynode autonovelwriter/pwa/tests/pipeline_ast_delete.test.jsbash examples/ralph-wiggum-example.sh- updated_utc: 2026-02-16T02:48:02Z
- current: T032_project_settings_extend_novel_overrides / update_readme — Project settings: extend novel overrides (inherit)
- queue: total=32 done=31 pending=1
- last_done: T031_runner_foreach_action_semantics_and_var_scopes — Runner: FOREACH_ACTION semantics + var scopes @ 2026-02-16T10:35:36+0800
- latest_batch: references/autonovelwriter_dev/tasks/batches/batch_20260216_091332_b3
- autoappdev_head: 8bc23a5
scripts/auto-autonovelwriter-development.sh запускает возобновляемый Codex-driven loop по задачам в references/autonovelwriter_dev/ и делает commit/push после каждой стадии (plan -> implement -> debug -> fix -> i18n -> summary -> update_readme).
Полезные управления:
- Остановиться после текущей задачи:
touch references/autonovelwriter_dev/STOP - Сбросить state tracking (сохраняет queue):
scripts/auto-autonovelwriter-development.sh --reset-state - Начать новую Codex session:
scripts/auto-autonovelwriter-development.sh --new-session - Best practice: работайте в чистой branch/worktree и наблюдайте
references/autonovelwriter_dev/state.tsvперед перезапуском
- Это README ориентировано на локальную разработку на Linux/macOS с
bashи Python 3.11+. - Runtime state в
autonovelwriter/runtime/изменяем и ожидается как untracked. - Описанное поведение pipeline отражает текущую реализацию в
autonovelwriter/backend/server.pyиautonovelwriter/pwa/app.js.
В этом репозитории на момент написания нет top-level Makefile/tox/npm test оркестратора.
Текущие входные точки для практического тестирования:
| Зона | Точка входа |
|---|---|
| Backend parser/AST | python3 autonovelwriter/backend/tests/pipeline_if_else_roundtrip_test.py |
| Backend foreach-action syntax | python3 autonovelwriter/backend/tests/pipeline_foreach_action_roundtrip_test.py |
| Backend runner semantics | python3 autonovelwriter/backend/tests/runner_foreach_action_semantics_unit_test.py |
| Backend action library update | python3 autonovelwriter/backend/tests/actions_library_update_unit_test.py |
| PWA AST delete behavior | node autonovelwriter/pwa/tests/pipeline_ast_delete.test.js |
# backend (запуск отдельных тестовых файлов)
python3 autonovelwriter/backend/tests/pipeline_if_else_roundtrip_test.py
python3 autonovelwriter/backend/tests/pipeline_foreach_action_roundtrip_test.py
python3 autonovelwriter/backend/tests/runner_foreach_action_semantics_unit_test.py
python3 autonovelwriter/backend/tests/actions_library_update_unit_test.py
# pwa logic test
node autonovelwriter/pwa/tests/pipeline_ast_delete.test.jsЕсли вы меняете семантику runner, синтаксис pipeline или поведение action-library, обновляйте тесты и заметки README/API в том же PR.
docs/autonovelwriter_spec.md: Product spec для Scratch-like контроллера (chat + folder pipe + start/pause/stop + settings).scripts/auto-autonovelwriter-development.sh: Auto-development самого AutoNovelWriter (task loop:plan -> implement -> debug -> fix -> i18n -> summary -> update_readme -> commit+push).docs/auto-development-guide.md: Bilingual (EN/ZH) философия и требования к долгоживущему, возобновляемому auto-development агенту.docs/ORDERING_RATIONALE.md: Пример rationale для последовательности screenshot-driven шагов.scripts-legacy/: Старые automation скрипты сохранены для справки и больше не используются AutoNovelWriter.examples/ralph-wiggum-example.sh: Пример помощника автоматизации Codex CLI.
Дополнительные заметки для разработчиков:
- Backend tests лежат в
autonovelwriter/backend/tests/. - Небольшой тест поведения PWA в
autonovelwriter/pwa/tests/. i18n/заполнен локализованными README репозитория, тогда как UI translation dictionaries встроены вautonovelwriter/pwa/app.js.
| Симптом | Что проверить |
|---|---|
tmux not found in PATH |
Установить tmux или запускать backend и static servers вручную. |
conda not found in PATH при использовании скриптов --env |
Установить Miniconda/Anaconda или пропустить conda и использовать ручную установку pip. |
| PWA не может подключиться к backend | Проверить backend адрес/порт и WebSocket endpoint ws://<host>:<port>/ws. |
POST /api/agent/test возвращает gated/disabled |
Убедиться, что установлены и settings.agent.enabled=true, и settings.agent.sdk="codex", и env AUTONOVELWRITER_ENABLE_CODEX=1. |
| Runner останавливается после изменения скрипта | Нормальное поведение: cursor invalidates при mismatch хэша pipeline script и требует рестарта. |
Статическая PWA на :5173 работает, но API calls падают |
Убедиться, что backend запущен на :8787 (или обновить target settings в app/backend). |
- Завершить и стабилизировать оставшиеся пункты auto-dev queue (см. progress block выше).
- Расширять и синхронизировать локализованные README в репозитории в
i18n/. - Увеличивать покрытие автотестами по edge cases runner и взаимодействию PWA.
- Продолжать улучшение Action Library и workflows task/action iteration.
Пожелания и изменения приветствуются.
Практические рекомендации для этого репозитория:
- Начинайте с
docs/autonovelwriter_spec.mdиdocs/auto-development-guide.md. - Keep runtime mutations under
autonovelwriter/runtime/(contents are gitignored), not tracked files. - Предпочитайте инкрементальные PR с воспроизводимыми командами run/test.
- При изменении семантики pipeline или контрактов API обновляйте README и связанные тесты одновременно.
Примечание: dedicated CONTRIBUTING.md на корне на момент этого черновика не найден.
Файл/статус лицензии в корне репозитория в этом черновике явно не объявлен.
Примечание по предположению:
- Если вы планируете явное открытое распространение и лицензирование, добавьте top-level
LICENSEи обновите этот раздел.
| Donate | PayPal | Stripe |
|---|---|---|
