🌌 DEEPSPACE: Agentic IDE — Master Specification (v5.0)

Статус документа: FINAL / BIBLE
Целевая аудитория: Lead Developer (Human) & Cursor AI (Claude 3.5 Sonnet)
Главный приоритет: Здоровье архитектуры, стабильность (никаких утечек памяти), функциональность (полноценный ИИ-соразработчик).
🛑 ЧАСТЬ 0: АНТИ-ГАЛЛЮЦИНАЦИОННАЯ ДИРЕКТИВА (ДЛЯ CURSOR AI)

Внимание, ИИ-ассистент! Если ты читаешь этот документ для написания кода, ты ОБЯЗАН строго следовать этим правилам:

1
2
3
4
5
6
7
8
9
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 (Хост и Ядро)

1
2
3
4
5
6
7
8
9
Фреймворк: 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)

1
2
3
4
5
6
7
Триггер: Кнопка [<->] в хедере 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
2
3
4
5
6
7
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
2
3
4
5
1. В AI-панели есть кнопка "Commit Memory".

2. При нажатии C# собирает историю текущего чата и отправляет фоновый запрос дешевой модели с промптом: "Обнови файл .deepspace_memory.md, добавив новые решенные задачи и текущие баги".

3. При следующем запуске проекта C# ищет файл .deepspace_memory.md в корне. Если находит  вставляет его текст в system_prompt.

🗂 ЧАСТЬ 5: ФАЙЛОВЫЙ МЕНЕДЖЕР (LOCAL & FTP)
5.1. Локальная файловая система

1
2
3
Читается через System.IO.DirectoryInfo пачками (пагинация/чанкинг), чтобы не убить IPC на папке node_modules.

Иконки файлов запрашиваются React'ом напрямую: <img src="deepspace://icon/C:/file.txt" />. C# перехватывает схему и отдает бинарник из System.Drawing.Icon.

5.2. FTP/SFTP (Без записи на диск SSD)

1
2
3
4
5
При клике на FTP-файл, C# скачивает его напрямую в MemoryStream (через FluentFTP).

Конвертирует в строку (UTF-8) и отдает в React (Monaco).

При сохранении: React шлет строку в C#, C# пишет поток прямо на сервер. Временные папки (Temp) ЗАПРЕЩЕНЫ.

🚀 ЧАСТЬ 6: ПОШАГОВЫЙ ПЛАН РЕАЛИЗАЦИИ (PHASES)

Инструкция для разработчика: скармливай этот план Cursor'у поэтапно. Не проси сделать всё сразу.
PHASE 1: Фундамент и Связь (Дни 1-2)

1
2
3
4
5
6
7
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
2
3
4
5
6
7
1. Настроить Zustand и Tailwind.

2. Создать 3 панели (Grid) с точными пропорциями (20/40/40).

3. Интегрировать @monaco-editor/react в центральную панель.

4. Реализовать кнопку "Смена фокуса" и анимацию расширения AI-панели до 60%.

PHASE 3: Файловая система v1 (Дни 5-7)

1
2
3
4
5
1. В C# написать метод GetDirectoryContents(path).

2. В React создать левую панель. Использовать @tanstack/react-virtual для рендера списка файлов.

3. Сделать так, чтобы при клике на текстовый файл (C# проверяет, что файл < 15 МБ), он открывался в Monaco.

PHASE 4: Интеграция AI и Чат (Дни 8-10)

1
2
3
4
5
1. В C# реализовать AiService используя HttpClient. Добавить поддержку API ключа (сохранять в конфиг/DPAPI).

2. Реализовать поддержку системного SOCKS5/HTTP Proxy в HttpClient (для обхода блокировок).

3. Написать UI чата в правой панели. Стриминг ответов (SSE/Chunks) из C# в React.

PHASE 5: Агент (Tools & Diff Pipeline) - [САМЫЙ СЛОЖНЫЙ ЭТАП]

1
2
3
4
5
6
7
1. В C# перевести AiService на поддержку Function Calling (OpenAI format).

2. Научить ИИ возвращать инструмент write_proposal.

3. В React внедрить <DiffEditor />.

4. Настроить логику: Перехват -> Показ Diff -> Клик Accept -> Отправка execute_write в C# -> Запись на диск.

PHASE 6: Память и FTP (Полировка)

1
2
3
4
5
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 станет твоим идеальным рабом, пишущим код ровно по нашим чертежам.

  1. Стоит ли уйти в среду Claude (Claude Web / Artifacts / Claude Code)?

Мой вердикт как Lead Engineer: Нет, для этого проекта не стоит.

1
2
3
4
5
Claude Web (с Артефактами) прекрасен для генерации изолированных React-компонентов (ты можешь попросить его нарисовать ту самую трехпанельную сетку и сразу увидеть ее в браузере).

Но! Артефакты не умеют компилировать C# и запускать десктопные процессы Photino. Они не имеют доступа к твоей локальной файловой системе C:\.

Поэтому: используй Cursor как основную IDE (с моделью Claude 3.5 Sonnet внутри него). Так ты получишь мозги Клода и локальные "руки" Cursor'а для компиляции нашего .NET бэкенда.
  1. Фиксируем Трёхпанельную систему и Суммаризацию (Святая святых проекта)

Твоя потребность в 3 панелях — это не просто UI-каприз, это эргономическое ядро здорового продукта. Мы вбиваем это в фундамент. Никаких плавающих окон, перекрывающих код (как у встроенного чата Cursor или Copilot).

Жесткая структура интерфейса (React + Tailwind Grid):

1
2
3
4
5
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.

Edit

Pub: 01 Mar 2026 13:25 UTC

Views: 22