🌌 DEEPSPACE: Agentic IDE — Master Specification (v5.0)
Статус документа: FINAL / BIBLE
Целевая аудитория: Lead Developer (Human) & Cursor AI (Claude 3.5 Sonnet)
Главный приоритет: Здоровье архитектуры, стабильность (никаких утечек памяти), функциональность (полноценный ИИ-соразработчик).
🛑 ЧАСТЬ 0: АНТИ-ГАЛЛЮЦИНАЦИОННАЯ ДИРЕКТИВА (ДЛЯ CURSOR AI)
Внимание, ИИ-ассистент! Если ты читаешь этот документ для написания кода, ты ОБЯЗАН строго следовать этим правилам:
| 1. NO ELECTRON. NO NODE.JS BACKEND. Проект использует C# .NET 9 + Photino.NET.
2. Вся работа с файловой системой, сетью и ОС происходит ТОЛЬКО в C#.
3. Фронтенд (React 18) — это исключительно "глупый" слой отображения (View).
4. Обмен данными между React и C# происходит строго асинхронно через window.chrome.webview.postMessage и Photino.WebMessageReceived.
5. Запрещено предлагать библиотеки, нарушающие эту изоляцию. Запрещено писать логику прямого доступа к диску на JavaScript.
|
🏗 ЧАСТЬ 1: ТЕХНОЛОГИЧЕСКИЙ СТЕК
1.1. Backend (Хост и Ядро)
| Фреймворк: C# .NET 9 (Console App) + Photino.NET.
Асинхронность: TPL (Task.Run, async/await) для всех I/O операций.
Работа с сетью (FTP/SFTP): FluentFTP, SSH.NET.
Парсинг JSON: System.Text.Json (с поддержкой Source Generators для скорости).
Изоляция ассетов: Регистрация кастомной схемы deepspace:// через ICoreWebView2 (для отдачи иконок без поднятия HTTP-сервера).
|
1.2. Frontend (UI / UX)
| Сборщик: Vite.
Фреймворк: React 18 (TypeScript).
Стейт-менеджер: Zustand (для глобальных состояний: фокус панелей, настройки).
Стилизация: Tailwind CSS (строго атомарный CSS, никаких CSS-in-JS).
Виртуализация DOM: @tanstack/react-virtual (критично для списков файлов).
Редактор кода: @monaco-editor/react (стандартный Editor и Diff Editor).
Markdown рендер (Чат): react-markdown + плагины для подсветки синтаксиса в чате.
|
🖥 ЧАСТЬ 2: АРХИТЕКТУРА ИНТЕРФЕЙСА (UI/UX GRID)
Интерфейс строится на Flexbox/CSS Grid и состоит из трех жестких колонн. Никаких плавающих (floating) окон для основного рабочего процесса.
2.1. Базовая раскладка (Default Mode)
| Левая панель (w-1/5 | 20%): Файловый менеджер
Дерево файлов / Таблица. Независимая прокрутка.
Центральная панель (w-2/5 | 40%): Код (Monaco)
Вкладки открытых файлов.
Правая панель (w-2/5 | 40%): AI-Агент (Чат + Контекст)
Зона диалога, вложений и генерации кода.
|
2.2. Режим фокусировки (AI / Code Swap Mechanism)
| Триггер: Кнопка [<->] в хедере AI-панели или двойной клик.
Действие (Zustand State aiFocused: boolean):
if (aiFocused): AI-панель занимает 60% (Центр + Право). Monaco Editor сжимается до 20% и уезжает вправо (режим чтения).
Анимация через Tailwind: transition-all duration-300 ease-in-out.
|
🌉 ЧАСТЬ 3: ШИНА ДАННЫХ (IPC BRIDGE)
Для предотвращения блокировки UI (60 FPS) используется строго асинхронный мост сообщений.
3.1. Формат запроса (React -> C#)
React отправляет JSON строку:
interface IpcRequest {
id: string; // uuid или increment
action: string; // например: "read_dir", "ftp_connect", "ai_prompt"
payload: any; // аргументы
}
window.chrome.webview.postMessage(JSON.stringify(request));
3.2. Формат ответа (C# -> React)
C# обрабатывает задачу в Task.Run и возвращает результат:
Csharp
class IpcResponse {
public string id { get; set; }
public string status { get; set; } // "success" | "error"
public object data { get; set; }
}
// Отправка обратно во фронтенд
webview.CoreWebView2.PostWebMessageAsJson(JsonSerializer.Serialize(response));
🤖 ЧАСТЬ 4: ПОДСИСТЕМА AI-АГЕНТА (AGENTIC LOOP)
Это сердце комбайна. ИИ не просто болтает, он инициирует изменения на диске.
4.1. Доступные Инструменты (Tools/Function Calling)
C# формирует системный промпт и передает ИИ следующие доступные функции (JSON Schema):
| 1. read_file(path): Читает файл, возвращает содержимое в контекст.
2. read_dir(path): Возвращает структуру папки.
3. write_proposal(path, content, action_type): Запрос на изменение кода.
4. run_terminal(command): Запуск команды (через скрытый cmd.exe).
|
4.2. Механика безопасного редактирования кода (Diff Pipeline)
Критическое правило здоровья: C# НИКОГДА не пишет в файл по прямой команде ИИ.
| 1. Генерация: ИИ присылает вызов функции write_proposal.
2. Перехват: C# перехватывает этот JSON и отправляет в React событие type: "diff_proposal".
3. UI Отображение: React открывает новую вкладку. Вместо <Editor /> рендерится <DiffEditor /> (из пакета @monaco-editor/react).
original = текущий код с диска.
modified = предложенный ИИ код.
4. Решение: Пользователь видит изменения. Нажимает кнопку [Accept] или [Reject].
5. Исполнение: Только при Accept React отправляет в C# команду execute_write, и файл физически сохраняется.
|
4.3. Авто-Суммаризация Контекста (Анти-Амнезия)
| 1. В AI-панели есть кнопка "Commit Memory".
2. При нажатии C# собирает историю текущего чата и отправляет фоновый запрос дешевой модели с промптом: "Обнови файл .deepspace_memory.md, добавив новые решенные задачи и текущие баги".
3. При следующем запуске проекта C# ищет файл .deepspace_memory.md в корне. Если находит — вставляет его текст в system_prompt.
|
🗂 ЧАСТЬ 5: ФАЙЛОВЫЙ МЕНЕДЖЕР (LOCAL & FTP)
5.1. Локальная файловая система
| Читается через System.IO.DirectoryInfo пачками (пагинация/чанкинг), чтобы не убить IPC на папке node_modules.
Иконки файлов запрашиваются React'ом напрямую: <img src="deepspace://icon/C:/file.txt" />. C# перехватывает схему и отдает бинарник из System.Drawing.Icon.
|
5.2. FTP/SFTP (Без записи на диск SSD)
| При клике на FTP-файл, C# скачивает его напрямую в MemoryStream (через FluentFTP).
Конвертирует в строку (UTF-8) и отдает в React (Monaco).
При сохранении: React шлет строку в C#, C# пишет поток прямо на сервер. Временные папки (Temp) ЗАПРЕЩЕНЫ.
|
🚀 ЧАСТЬ 6: ПОШАГОВЫЙ ПЛАН РЕАЛИЗАЦИИ (PHASES)
Инструкция для разработчика: скармливай этот план Cursor'у поэтапно. Не проси сделать всё сразу.
PHASE 1: Фундамент и Связь (Дни 1-2)
| 1. Создать Solution C# .NET 9. Подключить NuGet Photino.NET.
2. Создать Vite + React 18 + TS проект в папке ui.
3. Настроить запуск Photino так, чтобы он грузил index.html (из билда) или localhost:5173 (в режиме Dev).
4. Написать IpcBridge (класс в C# и хук в React) для отправки и получения JSON-сообщений. Проверить пинг-понг.
|
PHASE 2: UI Каркас и Monaco (Дни 3-4)
| 1. Настроить Zustand и Tailwind.
2. Создать 3 панели (Grid) с точными пропорциями (20/40/40).
3. Интегрировать @monaco-editor/react в центральную панель.
4. Реализовать кнопку "Смена фокуса" и анимацию расширения AI-панели до 60%.
|
PHASE 3: Файловая система v1 (Дни 5-7)
| 1. В C# написать метод GetDirectoryContents(path).
2. В React создать левую панель. Использовать @tanstack/react-virtual для рендера списка файлов.
3. Сделать так, чтобы при клике на текстовый файл (C# проверяет, что файл < 15 МБ), он открывался в Monaco.
|
PHASE 4: Интеграция AI и Чат (Дни 8-10)
| 1. В C# реализовать AiService используя HttpClient. Добавить поддержку API ключа (сохранять в конфиг/DPAPI).
2. Реализовать поддержку системного SOCKS5/HTTP Proxy в HttpClient (для обхода блокировок).
3. Написать UI чата в правой панели. Стриминг ответов (SSE/Chunks) из C# в React.
|
PHASE 5: Агент (Tools & Diff Pipeline) - [САМЫЙ СЛОЖНЫЙ ЭТАП]
| 1. В C# перевести AiService на поддержку Function Calling (OpenAI format).
2. Научить ИИ возвращать инструмент write_proposal.
3. В React внедрить <DiffEditor />.
4. Настроить логику: Перехват -> Показ Diff -> Клик Accept -> Отправка execute_write в C# -> Запись на диск.
|
PHASE 6: Память и FTP (Полировка)
| 1. Реализовать кнопку "Commit Memory" и логику .deepspace_memory.md.
2. Подключить FluentFTP в C#. Реализовать чтение/запись в память без временных файлов.
3. Зарегистрировать схему deepspace:// для рендера системных иконок в React.
|
END OF SPECIFICATION.
Lead Developer: Копируй этот текст, создавай .cursorrules (как обсуждали в предыдущем сообщении), вставляй туда ссылку на этот документ и запускай Phase 1.
Реальная угроза (Здоровье проекта) если ты упустишь этот момент: Cursor "заговняет" проект по одной причине — из-за архитектурной деградации (галлюцинаций).
По умолчанию, когда ты просишь Cursor "создать десктопное приложение с React и файловым менеджером", его ИИ обучен на миллионах строк кода типичного стека: Electron + Node.js + IPC.
Если ты расслабишься и скажешь ему "сделай мне файловый менеджер", он в ту же секунду забудет наш Spec v5.0, натащит тебе npm install electron, начнет писать бэкенд на JavaScript, и наш гениальный C#/Photino план рухнет.
Как этого избежать (Правило короткого поводка):
Оставайся в Cursor (он сейчас объективно лучший инструмент для локальной работы с файлами), но подчини его нашей архитектуре.
Сразу после создания пустой папки проекта ты должен создать в корне файл .cursorrules (это системный промпт для самого Cursor).
Туда ты копируешь сжатую выжимку нашего Spec v5.0:
| "Проект DeepSpace. Строгая архитектура! Бэкенд: C# .NET 9 + Photino.NET. Фронтенд: React 18 + Zustand + Tailwind. НИКАКОГО ELECTRON И NODE.JS НА БЭКЕНДЕ. Коммуникация через Photino IPC (PostWebMessageAsJson). Редактор — Monaco. Любые предложения по архитектуре должны строго соответствовать этому стеку."
|
С этим файлом Cursor станет твоим идеальным рабом, пишущим код ровно по нашим чертежам.
- Стоит ли уйти в среду Claude (Claude Web / Artifacts / Claude Code)?
Мой вердикт как Lead Engineer: Нет, для этого проекта не стоит.
| Claude Web (с Артефактами) прекрасен для генерации изолированных React-компонентов (ты можешь попросить его нарисовать ту самую трехпанельную сетку и сразу увидеть ее в браузере).
Но! Артефакты не умеют компилировать C# и запускать десктопные процессы Photino. Они не имеют доступа к твоей локальной файловой системе C:\.
Поэтому: используй Cursor как основную IDE (с моделью Claude 3.5 Sonnet внутри него). Так ты получишь мозги Клода и локальные "руки" Cursor'а для компиляции нашего .NET бэкенда.
|
- Фиксируем Трёхпанельную систему и Суммаризацию (Святая святых проекта)
Твоя потребность в 3 панелях — это не просто UI-каприз, это эргономическое ядро здорового продукта. Мы вбиваем это в фундамент. Никаких плавающих окон, перекрывающих код (как у встроенного чата Cursor или Copilot).
Жесткая структура интерфейса (React + Tailwind Grid):
| w-1/5 (20% ширины): Файлы. Панель, которая никогда не перекрывается.
w-2/5 (40% ширины): Код (Monaco). Твое рабочее пространство.
w-2/5 (40% ширины): Агент (Чат + Контекст). Место для вложений, логов, общения.
|
Механика Суммаризации (Авто-MD) — Как это будет работать технически:
Чтобы это не превратилось в багодром, мы делаем механизм прозрачным для юзера.
| Скрытый процесс: Каждые 10 сообщений в чате (или по кнопке "Commit Memory") наш C#-бэкенд незаметно берет массив переписки и отправляет ИИ системный промпт: "Сделай merge новых фактов с существующим файлом .deepspace_memory.md".
Структура .deepspace_memory.md:
# ЦЕЛЬ: (Что мы сейчас строим)
# АРХИТЕКТУРА: (Стек и принятые решения, чтобы ИИ не забыл, что мы на C#)
# СТАТУС НА [ДАТА]: (Последние успешные шаги)
# ТЕКУЩИЕ ПРОБЛЕМЫ: (Баги, которые не дорешали).
Инъекция: При следующем запуске DeepSpace, этот .md файл молча читается C#-бэкендом и вклеивается в самое начало messages массива в роли role: "system". ИИ "просыпается" и мгновенно понимает, где он и что должен делать.
|
Итог
У нас есть непробиваемый план (v5.0).
Мы знаем уязвимости инструментов, которыми будем этот план реализовывать (Cursor + .cursorrules).
У нас есть четкое понимание UI/UX (3 панели) и механики сохранения рассудка ИИ (MD-суммаризация).
Я уверен в архитектуре. Здоровье приложения защищено отказом от тяжеловесных фреймворков в пользу Photino + WebView2. Стабильность защищена изоляцией потоков и строгим контролем ИИ через "Diff Accept/Reject".
Если ты готов — создавай папку DeepSpace.
Открывай Cursor.
Пиши .cursorrules.
И давай напишем первую строчку: dotnet new console -n DeepSpace.Host.