Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,14 @@

### Добавлено

- добавление сообщения по Enter с многострочным вводом через Ctrl+Enter и
Shift+Enter;
- подтверждение очистки непустой очереди и сохранение свёрнутости панели;
- отдельные очереди и межвкладочные lease для каждого chat id;
- перенос временной очереди из `/` в созданный `/c/<id>` без потери элементов;
- inline-редактирование элементов очереди с Save и Cancel;
- drag-and-drop через отдельный handle с подсветкой места вставки;
- визуальные состояния элементов и ручной Retry для ошибок;
- межвкладочное лидерство через `localStorage` lease и `BroadcastChannel`;
- TTL, периодическое продление и автоматический захват lock после зависания
или закрытия вкладки;
Expand All @@ -18,6 +26,10 @@

### Изменено

- ожидающие элементы отображаются полупрозрачно, а активные и ошибочные
элементы визуально выделяются;
- удаление после фактического начала отправки больше не скрывает активный
элемент и не имитирует отмену;
- перед следующей отправкой ChatGPT должен оставаться стабильно свободным;
- незавершённые DOM-наблюдатели отменяются при смене чата или потере
лидерства;
Expand Down
23 changes: 20 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
## Возможности

- добавление нескольких запросов в очередь;
- изменение порядка и удаление запросов;
- inline-редактирование запросов до отправки;
- drag-and-drop, кнопки перестановки и удаление отдельных запросов;
- визуальные статусы и явный повтор элементов с ошибкой;
- приостановка и продолжение обработки;
- повторная попытка отправки при временной ошибке;
- безопасное ожидание после Stop и повторной генерации ответа;
Expand Down Expand Up @@ -56,6 +58,10 @@ npm run build
4. Скрипт дождётся доступности основного поля ввода и отправит запрос.
5. Следующий запрос будет отправлен после завершения текущего ответа.

В поле очереди обычный `Enter` добавляет сообщение. `Ctrl+Enter` и
`Shift+Enter` оставляют перенос строки для многострочного текста. Панель
запоминает свёрнутое состояние между обновлениями страницы.

Кнопки панели позволяют приостановить очередь, продолжить обработку, изменить
порядок запросов и удалить отдельные элементы.

Expand All @@ -80,6 +86,16 @@ npm run dev
npm run validate
```

Для браузерной regression-проверки очередей разных чатов запустите из корня
проекта `python -m http.server 8765` и откройте
`http://127.0.0.1:8765/test/e2e/per-chat-queues.html`. Страница автоматически
проверяет общую очередь двух вкладок одного чата, изоляцию разных chat id и
миграцию временной очереди после создания чата.

`http://127.0.0.1:8765/test/e2e/panel-actions.html` проверяет клавиатурное
добавление, многострочный ввод, подтверждение очистки, доступные имена кнопок и
восстановление свёрнутости панели.

Доступные команды:

| Команда | Назначение |
Expand Down Expand Up @@ -120,13 +136,14 @@ userscript хранится в Git, чтобы его можно было уст
Проект разделён на небольшие модули с явными зонами ответственности:

- `main.js` — composition root, создающий и связывающий компоненты;
- `queue-store.js` — хранение, нормализация и изменение элементов очереди;
- `chat-scope.js` — единое преобразование маршрута ChatGPT в chat scope;
- `queue-store.js` — хранение, миграция и изменение очереди текущего чата;
- `queue-processor.js` — конечный автомат обработки, ожидание и повторы;
- `chatgpt-adapter.js` — единственная граница взаимодействия с DOM ChatGPT;
- `panel-ui.js` — создание панели и обработчики действий пользователя;
- `styles.js` — стили панели;
- `utils.js` — общие утилиты без состояния;
- `tab-lock.js` — межвкладочный lease с TTL, продлением лидерства и
- `tab-lock.js` — scoped по chat id межвкладочный lease с TTL и
автоматическим освобождением после закрытия или зависания вкладки.

```mermaid
Expand Down
Loading