Область чата: проект и «Без рабочей папки»
Область чата: проект и «Без рабочей папки»
Чат всегда принадлежит ровно одному рабочему пространству (проекту). Приложение поставляется с синтетическим пространством «Без рабочей папки» (id __none__) — «нет проекта»: оно всегда первое в списке пространств и выбрано по умолчанию на свежей установке. На этой странице — что меняет каждая область: корни файловой системы, расположение песочницы, инструкции промпта и удаление.
Две области
| Чат проекта | Без рабочей папки (временный) | |
|---|---|---|
| Id пространства | случайный 8-hex id | __none__ |
| Путь пространства | папка, выбранная пользователем | ~/.levpro-ai/workspaces/_ephemeral |
| Создаётся | Добавить папку / первое использование папки | всегда присутствует |
| Корень файлового MCP | папка проекта | папка _ephemeral |
uploads/ |
{project}/uploads |
{_ephemeral}/uploads |
| Код-песочница | {project}/.sandbox |
~/.levpro-ai/sandboxes/<sessionId> |
instructions.md |
~/.levpro-ai/projects/<id>/instructions.md |
~/.levpro-ai/projects/_ephemeral/instructions.md |
| Удаляется при | удалении проекта | рабочее дерево стирается при выходе из приложения |
Обе области поддерживают одни и те же режимы; различаются только пути и очистка. См. Режим планирования и Режим выполнения.
Как хранится область
~/.levpro-ai/app-settings.json:
{
"workspaces": [{ "id": "a1b2c3d4", "name": "My Project", "path": "C:/work/proj" }],
"activeWorkspaceId": "a1b2c3d4"
}
workspaces[]никогда не содержит временную запись — она синтезируется на лету.activeWorkspaceId === "__none__"(илиnull) выбирает временную область.- Если папка активного проекта больше не существует, выбирается временная область, и изменение сохраняется.
- Миграция: старая установка, чьё единственное пространство имеет легаси-id
default, переключается на временное; любое легаси-пространство с отсутствующим/пустым именем чинится из имени его папки.
Расположение и жизненный цикл песочницы
Вычисляется как sandboxDirFor(workspace, sessionId) и передаётся серверу code-sandbox через LEVPRO_SANDBOX_DIR:
- проект →
{workspace.path}/.sandbox - временный →
~/.levpro-ai/sandboxes/<sessionId>(fallback…/sandboxes/_default, когда нет живого id чата, например при пути обновления конфига)
Удалением владеет Desktop — в одном месте:
| Событие | Что удаляется |
|---|---|
Удаление проекта (removeWorkspace) |
{project}/.sandbox (сама папка проекта никогда не трогается) |
Удаление временного чата (deleteChat) |
~/.levpro-ai/sandboxes/<sessionId> |
Выход из приложения (cleanupEphemeralWorkspace) |
всё дерево ~/.levpro-ai/workspaces/_ephemeral |
Каталог песочницы никогда не очищается между ходами: он создаётся лениво и хранится всё время жизни чата, чтобы уточняющие вопросы дорабатывали ту же среду.
Удаление временного чата убирает только песочницу этого чата. Удаление чата проекта не удаляет
{project}/.sandbox— он исчезает вместе с проектом. Чаты проекта сознательно делят одну песочницу на проект.
Сессии и метаданные проектов переживают перезапуск: выход стирает временное рабочее дерево (uploads/, кэш), но не историю чатов под ~/.levpro-ai/sessions/.
Вложения
Вложения проверяются на границе рендер→main: путь должен резолвиться внутри {activeWorkspace}/uploads, иначе он отбрасывается и логируется (ERR_INVALID_PATH). Создание проекта гарантирует папку uploads/; временная область гарантирует _ephemeral/uploads при первом использовании.
Инструкции проекта
У каждого проекта есть метаданные и файл пользовательских инструкций:
~/.levpro-ai/projects/<id>.json—{id, description, customInstructions, updatedAt}~/.levpro-ai/projects/<id>/instructions.md— текст инструкций, синхронизируетсяsyncInstructionsFile()
Когда instructions.md непустой, он добавляется в prompt_files обоих агентов — assistant и planner — в сгенерированном конфиге, поэтому правила проекта применяются и при планировании, и при выполнении.
Связанные страницы
- Режимы приложения — обзор режимов.
- Режим выполнения — сама код-песочница.
- Режим планирования — переиспользование песочницы при планировании.
- MCP-серверы — корни файловой системы и окружение песочницы чата.