Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
d1a7aad
comments
merfiDEV Oct 26, 2026
4d0634d
MAJOR UPDATE
merfiDEV Oct 30, 2026
fdbb8e9
major2
merfiDEV Oct 30, 2026
4699b48
major3
merfiDEV Oct 30, 2026
f24370d
4
merfiDEV Oct 30, 2026
c0e73ac
4
merfiDEV Oct 30, 2026
f761125
5
merfiDEV Oct 30, 2026
73a51be
55
merfiDEV Oct 30, 2026
4901f5d
6
merfiDEV Oct 30, 2026
60c98d6
feat(settings): redesign settings UI and fix live apply
merfiDEV Oct 30, 2026
0544956
Sync Telegram alerts when processes are killed
merfiDEV Oct 31, 2026
51d506f
fix(ci): build shell+monaco before electron-builder; fix stale tests
merfiDEV Oct 31, 2026
3a282cb
feat(files): in-app code editing + save in Monaco preview
merfiDEV Oct 31, 2026
e0aad2f
релиз
merfiDEV Oct 31, 2026
1d5737d
git
merfiDEV Oct 31, 2026
4f326e6
Add previews for backgrounds, fonts, and pets
merfiDEV Nov 1, 2026
f2a1791
Scale background previews instead of blurring
merfiDEV Nov 1, 2026
65f1003
feat(git): AI-генерация сообщения коммита через инструмент
merfiDEV Nov 1, 2026
72ab388
revert(agents): restore old skill-item cards design; fix(git): restor…
merfiDEV Nov 1, 2026
72221ea
Show task labels and add context transfer
merfiDEV Nov 1, 2026
ab355a7
fix(shell): перевод диалогов и Enter/Escape в подтверждении
merfiDEV Nov 1, 2026
3690880
ci(linux): add Linux build (AppImage, tar.gz) to release workflow
merfiDEV Nov 1, 2026
57970f7
fix(goal): reliably stop auto-advance on goalDone
merfiDEV Nov 2, 2026
448758b
Merge remote-tracking branch 'origin/master' into update
merfiDEV Nov 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,13 @@ jobs:
dist/*.zip
dist/*.blockmap
dist/latest-mac.yml
- os: ubuntu-latest
command: build:linux:local
artifact: Linux-build
paths: |
dist/*.AppImage
dist/*.tar.gz
dist/latest-linux.yml
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -139,6 +146,12 @@ jobs:
name: macOS-build
path: artifacts/mac

- name: Download Linux artifacts
uses: actions/download-artifact@v4
with:
name: Linux-build
path: artifacts/linux

- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
Expand All @@ -149,3 +162,4 @@ jobs:
files: |
artifacts/win/*
artifacts/mac/*
artifacts/linux/*
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,10 @@ userData/

# Temp
*.tmp
.tmp/
temp/
plan.md
release.bat

# Project specific
.cuckooCode/
Expand All @@ -53,3 +56,5 @@ test/coverage.lcov
# cookie/agents — НЕ игнорируем: агенты проекта должны попадать в git.
# Пользовательские агенты лежат в ~/cookie/agents (вне репозитория).
# Ранее здесь был /cookie/agents — убрано, иначе новые агенты untracked.
/.cookie/memory
/.cookie/prompts
112 changes: 42 additions & 70 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,85 +1,57 @@
# Changelog

## [5.0.9] - 2026-10-26
## [5.0.10] - 2026-11-01

### Added

- ⛔ **Уведомление в Telegram при rate-limit DeepSeek (429 / 40029)** — при превышении лимита запросов в Telegram приходит ==КАПС-предупреждение== с просьбой подождать:
- в main-world перехватчике `token-interceptor-inject.js` в патчах `fetch`/`XHR` ловятся HTTP `429` и бизнес-код `40029` (`IP_ACCESS_RESTRICTED`) в теле ответа;
- событие уходит через `postMessage({ __cuckoo: "rate-limit" })`, preload слушает с антиспамом 60с;
- IPC `telegram-rate-limit` → `botsrc.notifyRateLimit()` шлёт сообщение с ожиданием 5–20 минут (учёт `retry-after` при наличии);
- строки локализации `rateLimit.*` (ru/en) в `botsrc/i18n.js`; в окнах-субагентах уведомление подавляется.
- 🔄 **Pull-модель получения initial-prompt в окне субагента** — если push потерялся из-за гонки IPC, окно само запрашивает промпт у main:
- `subagent.js` кэширует combined-промпт по `windowId` и отдаёт через `getInitPrompt()`;
- новый IPC-хендлер `subagent-get-init-prompt` в `src/main/ipc.js`;
- в `chat-input.js` окно-субагент через 20с запрашивает промпт, если не получило пушем.

### Changed

- 🪟 **Отправка initial-prompt в субагент стала устойчивее** — повторные отправки в `3с / 8с / 15с`, абсолютный таймаут до 3 минут (было: 1.2с и 60с) в `subagent.js`.
- ⏳ **Ожидание поля ввода в окне субагента** — увеличено с ~15с до 90с (180 попыток × 500мс), `pendingInitialPrompt` больше не сбрасывается по таймауту (`chat-input.js`).
- 🛡 **Защита от дубля initial-prompt** — `applyInitialPrompt()` с флагом `_initialPromptApplied` не даёт отправить промпт дважды (push + pull).

### Fixed

- 🐛 **Окно субагента больше не остаётся пустым без промпта** — повторные отправки + pull-запрос закрывают гонку долгой загрузки окна.
- 🧹 **DSML/XML-мусор в ответе субагента не считается финальным ответом** — проверка вынесена ==выше анализа cuckoo-блоков== (`subagent-watch.js`):
- детект по `textContent` **и** `innerHTML` (ловит мусор внутри `<pre>` и когда теги съедены markdown-рендером);
- паттерны: маркеры `DSML`, `invoke/parameter/tool_calls name=` с тегом и без;
- при обнаружении в чат уходит предупреждение (на английском) использовать `cuckoo`-блок, ответ не завершается; лимит 3 подсказки + антидубль по снапшоту.

## [5.0.8] - 2026-10-22
Всем привет! 👋 Этот релиз — большой: у нас наконец-то появился **полноценный интерфейс в стиле VS Code**. Ниже — всё, что изменилось, простым языком. 🚀

### Added

- 💬 **Inline-комментарии к строкам плана с обратной связью ИИ** — в диалоге утверждения плана (`exit_plan_mode`) можно ==комментировать отдельные строки==, не отклоняя план целиком:
- выделите фрагмент плана → появляется кнопка «💬» → откроется поле ввода под нужным блоком;
- комментарии помечают строку подсветкой и сохраняются с привязкой к тексту строки;
- при одобрении комментарии прикладываются к запросу и ==автоматически отправляются== в чат;
- при отклонении комментарии возвращаются модели как замечания.
- 📝 **Панель промптов проекта** — сохранённые промпты в `.cookie/prompts/*.md`:
- кнопка «Промпты» в оверлее: создать / изменить / удалить и вставить текст в поле ввода;
- хранилище `prompts-store.js` + IPC `prompts-list` / `prompts-save` / `prompts-delete`.
- 🤖 **Команда `/prompts` в Telegram-боте** — список с кнопками «Вставить» / «Удалить» и «Создать» с пошаговым вводом; локализация ru/en, команда в `/help` и меню.
- 📜 **Система правил проекта `.cookie/rules.md`** — инструмент `readrules()` и гейт `rules-gate.js`: до принятия правил разрешены только `read` / `read_lines` / `file_read` / `memory_read` / `readrules`; нет файла — нет блокировки; субагенты без гейта.
- 🌍 **Глобальные Skill** — скиллы ищутся в `<userData>/skills/` и `<projectDir>/.cuckoo/skills/`; глобальный перекрывает проектный.
- 🖥 **Новый Shell-интерфейс в стиле VS Code** — встречайте ==полностью новый UI==, собранный из partials и бандла React/TS:
- аккуратная модульная структура в `src/ui/shell/` (`index.html` с `<!--@include:...-->`, partials для toolbar, activity bar, status bar, модалок и страниц, а также стили `base/components/pages/dsh-tokens`);
- activity bar для переключения страниц, сворачиваемая боковая панель и status bar;
- страницы на любой вкус: **Files, Git, Settings, Agents, MCP, Skills, Snippets, Workspaces, Conversations, Token, About**;
- встроенный **Monaco Editor** — тот самый редактор из VS Code 🎉 (вендоринг в `src/ui/vendor/monaco`);
- темы (`theme-presenter`), фоны, шрифты и даже «питомцы» — всё настраивается в настройках.
- 🧩 **Много-много IPC-хендлеров для Shell** в `src/main/shell-ipc.js` (`shell-*`) — теперь приложение умеет:
- навигацию и историю окна (`shell-navigate/back/forward/reload/home`), а также minimize/maximize/close/is-maximized;
- работать с проектом: выбор каталога, `shell-init-project`, дерево файлов, чтение файла, dir-info;
- управлять сессиями: список всех сессий, архивирование, переименование;
- настройки: `get/save/reset-settings`, auto-compact и триггер compact;
- сниппеты, skills, агентов, MCP-серверы;
- профили и провайдеры, web-сессии;
- темы, фоны, шрифты, «питомцев», логи, апдейты и внешние ссылки.
- 🐙 **Git прямо из приложения** — новый модуль `src/main/git-gitops.js` (вдохновлён git-расширением VS Code) и страница **Git** (`git-react.tsx`):
- `getRemotes`, `getBranchStatus` (upstream, ahead/behind), `commitAll`, `push`, `pull`, `fetchRemote`, `publish`, `sync`;
- все команды запускаются через `execFile("git", args)` в каталоге проекта с буфером 8 МБ.
- ✏️ **Редактирование кода прямо в Monaco-превью** — страница Files (`files-react.tsx`) и `preview-monaco.ts`:
- открывай файл в Monaco, редактируй и сохраняй через IPC;
- `getMonacoValue()` помогает забрать содержимое из редактора;
- подсветка расширений, иконки папок/файлов и поиск по дереву.
- 🔔 **Telegram-алерты синхронизируются с процессами** (`0544956`):
- долгие процессы трекаются по **PID**: если убить процесс с ПК (в том числе `kill-all`), кнопка «убить» из сообщения в Telegram исчезает;
- добавили ru/en-сообщения «остановлено с ПК» в `botsrc/i18n.js`, логика — в `process-manager.js` и `botsrc/index.js`.

### Changed

- 🗂 **Проектная память переехала в `.cookie/memory/`** — `<projectDir>/.cookie/memory/ProjectMemory.md` (`memory-store.js`, `MemoryTool.js`, README ru/en).
- 🪟 **Выбор git-ветки** — изолированные CSS-классы `.cc-branch-btn`: глобальные стили DeepSeek больше не режут текст кнопок.
- 📖 **Документация** — README (ru/en/осн.) дополнены разделами про правила, скиллы, промпты и режим плана.
- 🎛 **Настройки переехали и стали удобнее** (`60c98d6`) — `settings-react.tsx` переписан:
- новая вёрстка на компонентах `setting-row`, `select`, `ui-button`;
- изменения применяются ==сразу==, без перезапуска (`shell-save-settings` → live-apply);
- дополнен `shell-ipc.js`, обновлены `components.css` и `main.ts`.
- 🧱 **Окно перешло на Shell** — затронуты `src/main/index.js`, `window.js`, `preload/index.js`; появился `shell-preload.js` (мост API shell) и `shell-api.ts` на стороне UI.
- 🗂 **`settings-store.js`** немного причесали (`d1a7aad`): уточнили хранение и комментарии.
- 🏗 **Сборка и CI** (`51d506f`): `scripts/build-shell.mjs` и `scripts/copy-monaco.mjs` собирают Shell и копируют Monaco **до** `electron-builder`, скрипты прописаны в `package.json`.
- 📄 **README** (ru/en) обновлён под новый интерфейс и возможности.

### Fixed

- 🐛 **Ответ `ask_user_question` всегда виден в выводе** — попадает в лог даже без `log()`, без дублирования.

## [5.0.7] - 2026-10-15

### Added

- 🎯 **Режим цели `/goal` — автономные многораундовые задачи** — одна команда превращает задачу в самодвижущийся цикл: AI шаг за шагом продвигается к цели ==без вашего участия между шагами==:
- раунд завершился (нет tool-вызовов) — Cookie Code **сам** отправляет AI «продолжай» через задержку `NUDGE_DELAY`;
- движок живёт в preload (`goal-engine.js`), состояние per-session, персистится в `localStorage` (`cuckoo-goal-v1`);
- завершение — когда AI вызывает инструмент `goalDone()`;
- предохранители: лимит итераций (по умолчанию 50, настройка `cuckoo-goal-max-iterations`) и остановка при 3 раундах без прогресса (`NO_PROGRESS_LIMIT`).
- ⌨️ **Перехват команды `/goal` в веб-чате** (`goal-command.js`) — команда ловится на capture-фазе (Enter и клик по кнопке отправки) и обрабатывается локально, в AI не уходит:
- `/goal <описание>` — задать цель;
- `/goal` — показать статус;
- `/goal stop | pause | resume` — управление.
- 🪟 **Плавающая панель «Цель»** (`goal-panel.js`) — слева появляется перетаскиваемая карточка с текстом цели, номером итерации, таймером и кнопками **Пауза** / **Выход**:
- стили встроены в overlay (`template.js`), цвет статуса меняется по состоянию (`running` / `paused` / `done`);
- позиция панели сохраняется в `localStorage` (`cuckoo-goal-pos`).
- 🤖 **Цель в Telegram** — команда `/goal` в боте умеет задавать цель, показывать статус и управлять ею (`stop` / `pause` / `resume`):
- в чат приходит человеческое уведомление о старте и о завершении цели (`notifyGoalDone`);
- статус читается из `goal-store` в main по активному окну.
- 🧰 **Инструмент `goal_done`** (`GoalDoneTool.js`) — AI вызывает `goalDone()`, чтобы объявить цель выполненной; тул шлёт IPC `goal-done` в окно, и движок останавливает цикл (заменяет текстовый маркер `[[GOAL_DONE]]`, который модель забывала писать).

### Changed
- 🐛 **Починили устаревшие тесты** — `test/main/session-store.test.js`, `test/main/window.test.js` и `test/preload/commands.test.js` приведены в соответствие с новым Shell-окном и API.
- 🩹 **Стабильность макета Shell** — серия правок (`MAJOR UPDATE`, `major2`, `major3`) поправила layout: sidebar, модалки, страницы и токены темы (см. `base.css` / `shell.html`).
- 📊 **Stats dashboard, recorder и tool-render** — подкрутили отображение статистики и инлайн-рендер результатов инструментов под новую тему.
- 🧹 Мелкие фиксы `exit-plan-mode`, `whats-new`, `observer`, `continue-button` и `tps`.

- 🍪 **Логотип и README** — в README (ru/en/осн.) добавлен блок про режим цели; в таблицу инструментов добавлен `goalDone`.
- 📖 **Команда `/goal` в help бота** — в списке команд появились `/goal <цель>` и `/goal stop|pause|resume` (ru/en).
### Removed

### Fixed
- ~~Старый монолитный `src/ui/shell.html`~~ — теперь всё собирается из partials (`src/ui/shell/index.html` + `scripts/build-shell.mjs`).
- Удалили устаревший ассет `assets/петы.jpg` — на его месте новое изображение.

- 🐛 **Snake_case алиас `goal_done`** — наряду с `goalDone()` в `JsRunner` зарегистрирован `goal_done`.
Спасибо, что пользуетесь Cookie Code! 💚
Loading
Loading