# ZHILA DAW, в котором звук лежит рельефом. Две комнаты: **nave** — собор, где камни укладываются и играются, и **quarry** — карьер под ним, где материал берут и режут. Сэмплирование здесь не «библиотека сэмплов», а карьер и кладка: у каждой вещи есть место, шрам, погода и клеймо. Демка играет и слушается агентом: 32-тактовый луп из настоящих срезов, живой транспорт на аудиочасах, правка камней, undo, сохранение, импорт/запись, рендер в WAV. ## Запуск ```bash ./start.sh ``` Открыть **http://127.0.0.1:4173**. Скрипт берёт ключ из `DEEPSEEK_API_KEY` или из уже сохранённого ключа harness (`~/.dsh/.credentials.yaml`); ключ остаётся на сервере и в браузер не попадает. Порт можно поменять: `PORT=5000 ./start.sh`. Без сервера `index.html` тоже открывается, но хор работает в локальном режиме (по правилам), без модели. ## Агент Встроенный агент — это не чат сбоку, а тот же набор команд, что у руки. Модель (`deepseek-chat`) получает 14 инструментов и действует ими в живом проекте: `get_state`, `list_cores`, `extract_core`, `fracture_core`, `strike_face`, `place_stone`, `move_stone`, `delete_stone`, `set_weather`, `set_rings`, `set_tempo`, `transport`, `open_core`, `set_macros`. - Консоль `choir` показывает настоящий трейс: инструмент, аргументы, результат, время. Ответ — одна короткая реплика на языке пользователя. - Агент видит состояние (камни, керны, погоду, позицию), проверяет, где уже занято, и не кладёт камень поверх того же диапазона без просьбы. - `api live` в шапке — модель на связи; `api local` — сервера нет, работает локальный дирижёр по правилам (тоже через инструменты). - Ключ и модель живут только на сервере; сервер слушает 127.0.0.1 и принимает CORS только с localhost. Примеры: «сделай темнее и добавь редкий шум на восемь тактов, потом включи», «возьми керн из лестничной клетки и нарежь его заново», «убери один камень из голоса, стало тесно», «покажи мне керн, из которого сделан бас». MCP для внешних агентов ещё не поднят: те же 14 команд — это и есть будущая поверхность. Локальный API уже отделён от UI, поэтому сервер MCP — следующий шаг. ## nave - `space` — пуск/пауза. - Камни: тащи вверх-вниз — время с привязкой к четверти такта; клик — выбрать; `Backspace` — закопать; `⌘/Ctrl+D` — дублировать; `⌘/Ctrl+Z` / `⇧⌘Z` — undo/redo. - `crystal` — живая партитура событий вокруг playhead (только просмотр). - `cilia` — уровни жил; красные точки — живой сигнал. `warmth / dust / threshold` правят мастер. - `render` — офлайн-рендер 32 тактов в `zhila-descent-04.wav` (~62 c, 48 кГц, стерео). - Поле «say what you want to hear» зовёт агента. Ползунки `shape` — предпочтения для следующего слоя; агент видит их в состоянии. ## quarry - `core tray` — выбранный керн: настоящая волна, слои, шов, трещины. Линза читает глубину. - `fracture` реально перерезает керн: 16 граней получают новые границы, и камни из этого керна начинают звучать иначе. - `the face` — 16 граней. Удар звучит; `place` кладёт одиночный камень, `loop` — повторяющийся каждые 2 такта. - `weather` — `age / pressure / air` меняют климат всего микса, `heat` расстраивает голоса, `ghost` добавляет хвост источника. `grow ring` усиливает эрозию петель. - `extract`: `core` — новый процедурный керн, `file` — импорт, `room` — запись комнаты (`rec` тоже). - `ledger` — кто, откуда и с каким клеймом взял. ## Что работает по-настоящему - **Звук.** Web Audio: срезы кернов как сэмплы, 16 граней, кольца с эрозией, климат, лимитер, панорама, анализ мастера. - **Транспорт.** Аудиочасы — мастер, lookahead-планировщик, луп, play/pause/stop/seek, темп на лету. - **Правка.** Выбор, перенос, удаление, дублирование, undo/redo, автосейв. - **Материал.** Процедурные керны, импорт, запись; поиск швов по огибающей; повторный `fracture`. - **Агент.** Реальная модель, 14 инструментов, трейс, проверка состояния, локальный фолбэк. - **Экспорт.** Офлайн-рендер в WAV с погодой, макросами и мастером. ## Что всё ещё макет - Внешний MCP-сервер не поднят; `mcp`-чип — заявка на следующий шаг. - Клеймо и опись — журнал, не права и не согласие. Модель `draft → seal` описана, не реализована. - `crystal` не редактирует ноты; нет MIDI, редактора маппинга граней, trim/loop-точек, сендов/групп, дублей записи. - Импортированные и записанные керны живут только в памяти; после перезагрузки их камни молчат. Пять жил и панорама фиксированы. ## Файлы - `index.html`, `style.css` — разметка и стиль - `engine.js` — аудиоядро: керны, срезы, голоса, климат, транспорт, рендер - `app.js` — nave: партитура, правка, история, анализ, кристалл, командный слой - `quarry.js` — карьер: лоток, грани, погода, кольца, опись - `agent.js` — хор в браузере: трейс, инструменты, локальный дирижёр - `server.js`, `agent-tools.js`, `start.sh` — локальный сервер и модель - `terrain.js` — рельеф и город - `preview.png`, `preview-playing.png`, `preview-agent.png`, `preview-quarry.png`, `preview-mobile.png`, `preview-quarry-mobile.png` — скриншоты - `preview.mp3` — 62 секунды базового рендера Сброс проекта: очистить site data (localStorage `zhila.project.v3`).