feat: session goals - server-driven goal loop with independent small-model audit (#2148)
Arm the target button in the composer and the next prompt becomes a goal: the server keeps the session working toward it (idle tick -> small-model audit -> continuation) until the objective is verifiably complete, blocked, or out of budget — even with the UI closed. Server (packages/web/server/lib/session-goal): - event-driven loop on the global SSE hub; goal state lives in session.metadata.openchamber.goal (merge-safe patches, stale-write guard by goal id), so it survives restarts and syncs to every client for free - the small-model audit (objective + last assistant turn only, language pinned to the objective) is the sole termination authority; blocked needs 3 consecutive verdicts, audit outages tolerate one unaudited continuation then stop the goal as resumable-blocked - hard stops: optional token budget, auto-continuation cap (Resume grants a fresh allowance), turn errors; user abort pauses the goal instead of blocking it, and resuming over an aborted tail nudges immediately - token accounting as a snapshot of the latest turn (input + cache.read + output), goal-relative via a creation baseline and segmented across compactions; a compaction summary skips the audit and continues - continuations reuse the session's own provider/model/agent/variant UI: - three-mode target button (arm / disarm / manage dialog), informational goal strip with inline pause/resume and an Evaluating indicator, sidebar state glyph, objective length counter (2000-char server clamp), read-only completed goals - goal entry points: composer (sessions and drafts), start-new-session- from-answer dialog, plan implement dialog (plan content becomes the objective), scheduled tasks (Run as goal + budget) - Settings -> Chat -> Goal: feature toggle + default token budget with three-layer parity (web server, client persistence, VS Code bridge); VS Code renders goal state but hides the entry points (the loop runs in the web server only) Notifications: per-turn "ready" notifications are suppressed while a goal is active; settling sends one final notification (desktop, web-push, APNs generic titles with the session name as body) honoring the completion toggle. Error/question/permission notifications are untouched. Docs: user guide (session-goals) in all 9 locales + sidebar entry, scheduled-tasks cross-reference, server module DOCUMENTATION.md.
This commit is contained in:
committed by
GitHub
parent
82c039117a
commit
bb45164ae8
@@ -20,6 +20,8 @@ description: Запускайте промпт автоматично за ро
|
||||
|
||||
Ви можете запустити будь-яке завдання негайно через **run now**, щоб перевірити, що воно робить те, що ви очікуєте.
|
||||
|
||||
Позначте **Run as goal**, щоб запуск доводив промпт до завершення, а не зупинявся після однієї відповіді — див. [Цілі сесії](/session-goals/).
|
||||
|
||||
## Як виглядає успіх
|
||||
|
||||
Після запуску завдання показує, коли воно востаннє виконувалося, чи воно успішне, і посилання на сесію, яку воно створило. Якщо запуск збоїть, помилка теж показується там.
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
---
|
||||
title: Цілі сесії
|
||||
description: Перетворіть промпт на ціль, до якої агент рухається автоматично.
|
||||
---
|
||||
|
||||
# Цілі сесії
|
||||
|
||||
Ціль перетворює один промпт на фінішну пряму. Замість підштовхувати агента словом «продовжуй» після кожної відповіді, ви ставите ціль один раз — і OpenChamber автоматично веде сесію до неї, перевіряючи прогрес незалежним аудитором після кожного ходу. Робота триває, навіть поки вас немає поруч.
|
||||
|
||||
## Як розпочати ціль
|
||||
|
||||
1. Натисніть кнопку-мішень у полі вводу. Вона засвітиться — режим цілі увімкнено.
|
||||
2. Напишіть промпт і надішліть. Це повідомлення стане формулюванням цілі.
|
||||
|
||||
Це працює однаково і в наявній сесії, і в чернетці нової: увімкніть мішень, напишіть перше повідомлення, надішліть — нова сесія почнеться вже з активною ціллю.
|
||||
|
||||
### Інші способи розпочати ціль
|
||||
|
||||
- **З відповіді агента**: у діалозі «Start new session from this answer» позначте **Run as goal** — відповідь передається як завдання, яке нова сесія виконує до завершення (комбінуйте з **Create worktree** для ізольованого запуску).
|
||||
- **З плану**: виконуючи збережений план у новій сесії чи worktree, позначте **Run as goal** у діалозі. Формулюванням цілі стане зміст плану, тож аудитор судитиме прогрес за самим планом.
|
||||
- **За розкладом**: позначте **Run as goal** у [запланованому завданні](/scheduled-tasks/), щоб регулярні запуски доводили промпт до завершення.
|
||||
|
||||
## Формулюйте ціль самодостатньо
|
||||
|
||||
Аудитор прогресу бачить лише ваше формулювання цілі та останню відповідь агента — без історії чату. Тому пишіть повідомлення-ціль так, щоб людина без контексту розмови зрозуміла, як виглядає завершений стан.
|
||||
|
||||
- Добре: «Додай тести для модуля експорту й доведи весь тестовий набір до зеленого стану.»
|
||||
- Не дуже: «Виправ це» або «Продовжуй з тією ідеєю.»
|
||||
|
||||
Для дрібних контекстних уточнень ціль не потрібна — просто надішліть звичайне повідомлення.
|
||||
|
||||
## Як це працює
|
||||
|
||||
Коли агент зупиняється і сесія трохи затихає, OpenChamber:
|
||||
|
||||
1. Просить малу, дешеву модель оцінити останній хід відносно цілі: продовжувати, готово чи глухий кут?
|
||||
2. Якщо вердикт «продовжувати» — надсилає промпт продовження, і агент береться за роботу знову.
|
||||
3. Якщо ціль перевірено досягнута — вона завершується, а ви отримуєте сповіщення.
|
||||
4. Якщо агент справді застряг (потрібна ваша участь), ціль зупиняється як заблокована — але лише після того, як аудитор скаже це тричі поспіль, тож разова заминка ніколи не завершує ціль.
|
||||
|
||||
Є й жорсткі запобіжники: опційний бюджет токенів, ліміт автоматичних продовжень і зупинка при помилці ходу. Якщо контекст сесії стиснеться посеред роботи, ціль просто продовжиться — впертися у вікно контексту означає, що робота не завершена.
|
||||
|
||||
### Зупинка і відновлення
|
||||
|
||||
- **Кнопка стоп** обриває поточний хід і призупиняє ціль — ваше явне «стоп» завжди сильніше за цикл.
|
||||
- **Pause** на смужці цілі робить те саме з іншого боку: призупиняє ціль і зупиняє поточний хід.
|
||||
- Поки ціль на паузі, спілкуйтеся як завжди — цикл не втручається.
|
||||
- **Resume** знову вмикає цикл: на сесії у простої промпт продовження летить негайно; якщо агент саме працює — цикл тихо підхопиться на його наступній паузі.
|
||||
|
||||
## Спостереження і керування
|
||||
|
||||
- Смужка над полем вводу показує останню нотатку прогресу, статус і використання токенів, а також кнопку призупинення/відновлення. Коли агент зупинився, а ціль активна, смужка показує обертовий **Оцінювання…** — це вікно тиші та робота аудитора.
|
||||
- Кнопка-мішень світиться, поки ціль працює (синім), стає зеленою при завершенні та червоною, коли ціль заблокована чи вичерпала бюджет. Натисніть її, щоб відкрити діалог цілі: відредагувати формулювання чи бюджет або видалити ціль. Завершена ціль лише для читання — видаліть її, а тоді вмикайте нову.
|
||||
- У бічній панелі сесій біля дати сесії з'являється маленька мішень, забарвлена за станом цілі.
|
||||
|
||||
## Сповіщення
|
||||
|
||||
Поки ціль активна, сповіщення «агент готовий» після кожного ходу придушені — вони лише повторювали б продовження самого циклу. Коли ціль завершується (готово, заблоковано чи вичерпано бюджет), натомість приходить одне фінальне сповіщення — на десктопі та мобільним пушем. Воно поважає те саме налаштування «сповіщати про завершення»; запити дозволів, питання та сповіщення про помилки працюють як завжди.
|
||||
|
||||
## Бюджет токенів
|
||||
|
||||
У **Налаштування → Чат → Ціль** можна задати типовий бюджет токенів для нових цілей. Досягнувши бюджету, ціль зупиняється як «бюджет вичерпано» замість витрачати більше — можна підняти бюджет і відновити її з діалогу цілі.
|
||||
|
||||
## Варто знати
|
||||
|
||||
- Цикл цілі працює в сервері OpenChamber, а не у вкладці браузера. Закрийте вкладку, заблокуйте телефон — агент працює далі, а коли ціль завершиться, прийде сповіщення. Сервер (десктопна апка або процес `openchamber`) має залишатися запущеним.
|
||||
- Цілі використовують провайдера й модель самої сесії, включно з викликами аудитора — нічого не йде до провайдерів, якими ви не користуєтесь.
|
||||
- Одна ціль на сесію за раз.
|
||||
|
||||
## Дивіться також
|
||||
|
||||
- [Заплановані завдання](/scheduled-tasks/) — запуск промпта за розкладом; увімкніть там «Виконати як ціль», щоб запланований запуск довів промпт до завершення
|
||||
- [Сповіщення](/notifications/) — як ви дізнаєтеся про завершену ціль
|
||||
Reference in New Issue
Block a user