Первая версия

This commit is contained in:
2026-02-23 09:08:15 +03:00
commit 75fbb53390
23 changed files with 2498 additions and 0 deletions

67
README.md Normal file
View File

@@ -0,0 +1,67 @@
# Web MVP: AI Project Editor (Frontend-only)
Локальный frontend MVP без backend API.
## Что реализовано
- Выбор папки проекта:
- `showDirectoryPicker` в secure context (`http://localhost`, `https://`).
- fallback через `input[webkitdirectory]` в `file://` (read-only режим).
- Папка `.git` скрывается и исключается из загрузки/подсчета.
- Ограничения загрузки директории:
- `>1000` файлов: предупреждение, можно продолжить.
- `>10000` файлов: предупреждение и запрет загрузки.
- общий размер `>1MB`: предупреждение, можно продолжить.
- общий размер `>10MB`: предупреждение и запрет загрузки.
- Рекурсивное дерево файлов и read-only просмотр содержимого.
- Центральная панель: только вкладки открытых файлов и просмотр содержимого.
- Правая панель: чат + ревью изменений (diff, accept/reject/apply).
- Ресайз 3 колонок с дефолтными ширинами `15% / 65% / 20%`.
- Темная тема по умолчанию (темно-синий акцент).
- Mock индексация: snapshot/changes статусы в UI.
- Mock чат-агент:
- `/demo-update <path>` генерирует `update` для файла.
- `/changeset { ... }` принимает raw JSON и строит review.
- Валидация `changeset` по обязательным полям (`create/update/delete`).
- Статусы review: `pending`, `accepted_partial`, `accepted_full`, `rejected`, `conflict`, `applied`.
- `Apply accepted` с повторной hash-проверкой до записи и подтверждением удаления.
- Без git-операций и без автоприменения правок.
## Запуск через Docker Compose
```bash
cd "/Users/alex/Dev_projects_v2/ai driven app process/v2/web_app"
docker compose up --build
```
Открыть: `http://localhost:8080`
## Локальный запуск без Docker
```bash
cd "/Users/alex/Dev_projects_v2/ai driven app process/v2/web_app"
python3 -m http.server 8080
```
Открыть: `http://localhost:8080`
## Пример changeset
```json
{
"changeset": [
{
"op": "create",
"path": "notes/new_doc.md",
"proposed_content": "# New doc\\nhello",
"reason": "demo"
}
]
}
```
В чат отправить:
```text
/changeset {"changeset":[{"op":"create","path":"notes/new_doc.md","proposed_content":"# New doc\\nhello","reason":"demo"}]}
```