# worktree-cli.mjs

## Огляд

Файл `n-cursor worktree` є CLI-оркестратором для управління git worktree. Він дозволяє додавати, видаляти та перевіряти worktree, забезпечуючи зручний інтерфейс для роботи з декількома гілками в одному репозиторії. Цей інструмент використовується для організації робочого процесу розробника, що працює з кількома гілками.

## Поведінка

1.  **Ініціалізація:** Отримує аргументи командного рядка, включаючи підкоманду та її параметри. Визначає поточний робочий каталог, якщо його не вказано. Ініціалізує контекст для логування та отримання дати.
2.  **Розбір підкоманди:** Визначає, яку підкоманду було передано. Залежно від підкоманди, виконує відповідні дії.
3.  **`add` (Створення нового worktree):**
    - Перевіряє наявність необхідних параметрів: назви гілки та опису.
    - Визначає унікальну назву гілки, якщо вона вже існує.
    - Створює новий worktree, використовуючи вказану гілку та опис. Записує опис у файл `.md` у каталозі `.worktrees/`.
    - Створює нагадування про незакомічені зміни основного дерева, якщо це необхідно.
4.  **`remove` (Видалення worktree):**
    - Перевіряє наявність необхідного параметра: назви гілки.
    - Видаляє checkout та файл `.md` для вказаної гілки.
    - Видаляє всі осиротілі файли опису, які залишилися після видалення гілки.
    - Очищає файли flow-sibling-ів (.flow.json/.events.jsonl/lock) для запобігання їх осиротіння.
5.  **`list` (Перелік worktree):**
    - Виводить список всіх створених worktree, отриманий за допомогою команди `git worktree list`.
    - Для кожного worktree виводить його повний шлях та вміст файлу опису `.md`.
6.  **`prune` (Видалення осиротілих worktree):**
    - Визначає всі файли опису `.md`, які більше не пов'язані з жодною зареєстрованою гілкою worktree.
    - Видаляє ці осиротілі файли опису.
7.  \*\*Викона

## Публічний API

runWorktreeCli — Запускає підкоманду worktree.

## Гарантії поведінки

- `runWorktreeCli` повертає `false` при будь-якій помилці.
- `runWorktreeCli` повертає `null` при помилці, якщо результат неможливо визначити.
- Немає кешування.
- `add <branch> "<опис>"` створює гілку `worktree` з описом.
- `remove <branch> [--force]` видаляє checkout гілки `worktree`, але не видаляє саму гілку.
- `list` виводить список всіх `worktree`.
- `prune` видаляє `worktree` без checkout.
- Немає гарантій щодо стану git-репозиторію.
- Немає гарантій щодо наявності незакомічених змін.
- Немає гарантій щодо наявності осиротілих `worktree`.
- `runWorktreeCli` не кидає винятків.
- Помилки переховуються.
