# todo-context

## Назначение

`todo-context` дает агенту tool `todo_write` и пользователю slash-command `/todo` для обновления session-backed todo state. В отличие от прежнего `tools-dev-context`, этот extension не запускает shell, не выполняет eval, не пишет файлы и не смешивает несколько разных product ролей.

Текущая версия — active `compat-wrapper`: она приводит локальный tool и базовую `/todo` command surface к OMP-compatible contract, сохраняет latest phases через Pi custom entries и включена по умолчанию как тонкая OMP-backed todo surface.

## Почему он есть в проекте

Планирование и loop-сценарии нуждаются в видимом списке текущих задач. OMP уже имеет рабочий `todo_write`, поэтому локальный `miloc-pi` surface должен забирать эту семантику, а не держать слабый in-memory duplicate как default product.

## Пользовательская поверхность

Агент вызывает tool `todo_write`, чтобы обновить todo-состояние через операции `init`, `append`, `start`, `done`, `drop`, `rm` и `note`. Tasks адресуются по точному `content`, phases адресуются по точному `phase` name. Result возвращает OMP-style `details.phases[]`, где phase имеет поле `name`, а task status принимает `pending`, `in_progress`, `completed` или `abandoned`.

Пользователь может вызвать `/todo`, чтобы увидеть Markdown checklist; `/todo append [<phase>] <task...>`, `/todo start <task>`, `/todo done [<task|phase>]`, `/todo drop [<task|phase>]` и `/todo rm [<task|phase>]` меняют тот же session-backed todo state. `/todo edit` открывает Markdown в `ctx.ui.editor` и парсит OMP-style markers `[ ]`, `[/]`, `[x]` и `[-]`, включая blockquote notes.

## Как работает по коду

Entrypoint регистрирует TypeBox tool `todo_write` и команду `/todo`. Перед применением операций extension читает latest `todo_write` entry через `pi.getEntries({ type: "todo_write", limit: 1 })`, а `sharedState.todos` остается только process-local cache/fallback. Операции применяются по порядку, ошибки накапливаются без отката уже примененных операций, а после batch нормализуется single `in_progress` invariant. Tool и command сохраняют updated phases через `pi.appendEntry("todo_write", { phases })`. Tool возвращает summary, `details.phases`, `details.storage="session"`, temporary `activeTask` compatibility detail и `completedTasks` для задач, которые перешли в `completed`.

Как и OMP, local compatibility layer не принимает synthetic ids вроде `task-1`: tasks адресуются точным `content` из предыдущего результата. Если caller передает `task-123`, tool возвращает явную ошибку и просит использовать полный текст задачи.

- Entrypoint: `./extensions/todo-context/index.ts`
- Manifest: `extensions/todo-context/manifest.json`
- Commands: `todo`
- Tools: `todo_write`
- Hooks: none
- Permissions: fs.read=none, fs.write=none, subprocess=none, network=none, browser=false, models=false, ui=`editor`, `setWidget`, `notify`
- State: latest todos восстанавливаются из Pi custom entries типа `todo_write`; `sharedState.todos` используется как локальный cache/fallback.
- Review: status=reviewed, source=copy-after-audit, reviewedBy=miloc-pi, reviewedAt=2026-06-01, risk=medium

## OMP source evidence

- `/tmp/oh-my-pi-review/packages/coding-agent/src/tools/todo-write.ts`
- `/tmp/oh-my-pi-review/packages/coding-agent/src/modes/controllers/todo-command-controller.ts`
- `/tmp/oh-my-pi-review/packages/coding-agent/src/slash-commands/helpers/todo.ts`
- `/tmp/oh-my-pi-review/packages/coding-agent/src/prompts/tools/todo-write.md`
- `/tmp/oh-my-pi-review/packages/coding-agent/test/tools/todo-write.test.ts`
- `/tmp/oh-my-pi-review/docs/tools/todo_write.md`
- `/tmp/oh-my-pi-review/LICENSE`

## Ограничения и риски

Storage больше не является чисто memory-only: latest phases записываются в Pi custom entries и могут быть восстановлены в рамках доступного session entry API. Local compatibility layer пока не включает OMP sticky todo panel, tree renderer, completion animation, reminder hooks, filesystem import/export или clipboard copy. Эти gaps являются enhancement backlog, а не блокером для текущего active wrapper.

## Решение

Решение: `compat-wrapper`, active by default. Tool contract, базовый `/todo` command subset и session-backed storage приведены к OMP-style todo behavior; sticky panel, reminder hooks и richer renderer остаются отдельным enhancement поверх уже активной compatibility surface.
