Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
27 changes: 27 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,32 @@
# Changelog

## [4.0.28] - 2026-09-17

### Added

- 🔤 **Шрифт на выбор — теперь и для интерфейса, и для самой страницы** — в настройках появилась отдельная секция «Шрифт»:
- встроенный **Anthropic Mono** — выбирается одним кликом; по умолчанию всё работает на системном шрифте, ничего не навязывается;
- **свои шрифты** — положи файлы `.ttf` / `.otf` / `.woff` / `.woff2` в папку (кнопка «Открыть папку шрифтов») и нажми «Обновить» — шрифт появится в сетке превью;
- **слайдер жирности** (100–900) — работает и для системного, и для любого кастомного шрифта;
- выбранный шрифт применяется мгновенно ко всему интерфейсу Cookie Code **и** к странице DeepSeek (иконки и эмодзи не ломаются).
- 🔁 **Перенос контекста в новый чат** — длинный диалог можно продолжить в свежем чате, не теряя наработок:
- кнопка **«Перенести контекст»** в панели Cookie Code;
- история текущего чата читается из DOM, **AI сжимает её в структурный конспект** (цель, решения, изменённые файлы, открытые вопросы);
- вместе с конспектом в новый чат переносится **промпт инициализации проекта** (дерево каталога + системный промпт), поэтому AI сразу «знает» проект;
- длинные истории автоматически подрезаются по оценке токенов (до 50 000).
- 🗂 **Настройки разбиты на категории** — вместо одной длинной простыни появились подвкладки: 🎨 Тема и стекло, 🪟 Панель Cookie, 🖼 Фон страницы, 🤖 Telegram-бот, ⚙️ Система и безопасность:
- иконки подвкладок — аккуратные SVG (без эмодзи), рядом с «Cookie Code» — иконка печенья;
- панель подвкладок прячется при прокрутке вниз и возвращается при прокрутке вверх.

### Changed

- **Иконки подвкладок настроек** — эмодзи заменены на инлайн-SVG, которые наследуют цвет кнопки (в т.ч. белый у активной).

### Fixed

- Перенос контекста: надёжное ожидание ответа AI (по появлению нового сообщения и стабилизации текста, а не только по кнопке «стоп») — больше не «зависает» на коротких ответах.
- Перенос контекста: промпт инициализации теперь **пересобирается в главном процессе** из сохранённого каталога проекта, поэтому не теряется при перезагрузке страницы.

## [4.0.27] - 2026-09-17

### Added
Expand Down
201 changes: 201 additions & 0 deletions CHANGELOG_GUIDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
# CHANGELOG — инструкция по ведению

> Документ для людей и AI-агентов. Описывает **как правильно писать записи** в `CHANGELOG.md`
> этого проекта, чтобы их корректно распарсил встроенный механизм **What's New** и чтобы CI
> собрал релиз без ошибок.

---

## TL;DR

1. Добавляй новую запись **в самый верх** файла, сразу под `# Changelog`.
2. Формат заголовка: `## [X.Y.Z] - YYYY-MM-DD` — **строго** с квадратными скобками и дефисом.
3. Секции: `### Added`, `### Changed`, `### Fixed`, `### Removed` (можно не все).
4. Пункты — строки, начинающиеся с `- ` или `* `.
5. **НЕ меняй версию в `package.json`** — её выставит CI из git-тега.
6. Версия в CHANGELOG должна совпадать с тегом, который запушишь (например `v4.0.25` → `4.0.25`).
7. ФОРМАТ ДРУЖЕЛЮБНЫЙ А НЕ ТЕХНИЧЕСКА КАША!!! С ЭМОДЗИ ЭМОТИКОИНАМИ ПО ТИПУ :)

---

## Формат, который понимает парсер

Парсер — `src/main/changelog-parser.js`. Он **не универсальный** (не полный Keep a Changelog),
а поддерживает ровно тот формат, что в нашем репо. Регулярные выражения:

```js
const VER_RE = /^##\s+\[([^\]]+)\](?:\s*-\s*(.+))?\s*$/; // ## [4.0.25] - 2026-09-17
const SECTION_RE = /^###\s+(.+?)\s*$/; // ### Added
const ITEM_RE = /^\s*[-*]\s+(.+)$/; // - пункт
```

### Что это значит на практике

| Элемент | Правильно | Неправильно |
| ---------------- | -------------------------------------------------------------- | ---------------------------------------- |
| Заголовок версии | `## [4.0.25] - 2026-09-17` | `## 4.0.25`, `## [4.0.25]`, `# [4.0.25]` |
| Дата | `- 2026-09-17` (опционально) | `(2026-09-17)`, `2026/09/17` |
| Секция | `### Added` | `## Added`, `**Added**` |
| Пункт | `- Текст` или `* Текст` | `1. Текст`, `Текст` (без маркера) |
| Unreleased | `## [Unreleased]` — парсится, но **пропускается** в What's New | — |

> ⚠️ Заголовок версии обязательно на уровне `##` (два решётки), секции — на `###` (три).
> Если перепутать — парсер не увидит ни версию, ни секцию.

---

## Как парсер выбирает, что показать в What's New

Функция `extractSince(entries, from, to)`:

- `from` — версия, **с которой** обновился пользователь (не включается);
- `to` — текущая версия (включается);
- выбираются версии в диапазоне `(from, to]`, сортируются по убыванию;
- записи `[Unreleased]` **пропускаются**;
- версии без semver-формата (`\d+.\d+.\d+`) игнорируются.

**Вывод:** все промежуточные версии между старой и новой покажутся пользователю.
Держи записи осмысленными — их реально увидят при обновлении.

---

## Процесс релиза

Версия в `package.json` **не бампается вручную**. Это делает CI:

```yaml
# .github/workflows/release.yml
on:
push:
tags: ["v*"]

jobs:
build:
steps:
- name: Sync version from tag
run: node scripts/sync-version.js
env:
GITHUB_REF_NAME: ${{ github.ref_name }}
```

`scripts/sync-version.js` берёт версию из имени тега (`v4.0.25` → `4.0.25`) и прописывает
её в `package.json` и `package-lock.json`.

### Правильный порядок

1. Внести изменения в код.
2. **Добавить запись в `CHANGELOG.md`** (в самый верх).
3. Закоммитить изменения.
4. Запушить тег: `git tag v4.0.25 && git push origin v4.0.25`.
5. CI сам выставит версию и соберёт билд.

> ❌ **Не редактируй `package.json` вручную ради версии** — это создаст конфликт с CI.

---

## Шаблон записи

Скопируй и заполни:

```markdown
## [X.Y.Z] - YYYY-MM-DD

### Added

- **Краткое название фичи** — что она делает и зачем. Детали:
- подпункт (вложенный `- ` с отступом);
- ещё подпункт.

### Changed

- **Что изменилось** — было → стало. Причины.

### Fixed

- Что было сломано и как починили.

### Removed

- Что удалили и почему.
```

---

## Стиль написания

- **Язык:** русский (как весь существующий CHANGELOG).
- **Формат пункта:** `- **Жирный заголовок** — пояснение.` Название фичи выделяй `**...**`.
- **Код/имена** — в обратных кавычках: `attach_file`, `package.json`, `localStorage`.
- **Детали** — вложенными пунктами (отступ 2 пробела + `- `), не перегружай главную строку.
- **Время** — настоящее (`добавлено`, `исправлено`), не будущее.
- Пиши **что и зачем**, а не «обновлён файл X».
- Не дублируй пункты между секциями.
- Одна версия = одна дата = один блок `## [X.Y.Z]`.

### Хорошо

```markdown
### Added

- **Инструмент `attach_file` — загрузка файлов-вложений в чат** — AI может прикрепить локальный
файл (PDF, Word, Excel, PPT, изображения) прямо в поле ввода:
- скрытый `input[type=file]` заполняется через `DataTransfer` + событие `change`;
- лимит 30 МБ, авто-определение MIME по расширению.
```

### Плохо

```markdown
### Added

- Добавил новый инструмент.
- Изменил ipc.js.
- Много всего.
```

---

## Чек-лист перед коммитом

- [ ] Запись добавлена **в самый верх** (под `# Changelog`).
- [ ] Заголовок `## [X.Y.Z] - YYYY-MM-DD` (квадратные скобки, дефис, ISO-дата).
- [ ] Версия — следующая после последней в файле (semver, patch/minor/major по смыслу).
- [ ] Секции на `###`, пункты на `- `.
- [ ] `package.json` **не тронут**.
- [ ] Версия совпадает с будущим тегом (`vX.Y.Z`).

---

## Проверка (опционально)

Убедиться, что парсер видит новую версию:

```bash
node -e "const fs=require('fs'); const {parseChangelog}=require('./src/main/changelog-parser'); const e=parseChangelog(fs.readFileSync('CHANGELOG.md','utf8')); console.log(e.map(x=>x.version).join(', '));"
```

Ожидаемый вывод (пример): `4.0.25, 4.0.24` — новая версия **первой**.

---

## Частые ошибки

| Ошибка | Последствие | Как исправить |
| -------------------------------- | --------------------------------- | ------------------------------------------- |
| `## 4.0.25` без скобок | Парсер не видит версию | Добавить `[ ]`: `## [4.0.25]` |
| `## [4.0.25]` без даты | Дата = `null`, в UI без даты | Добавить `- YYYY-MM-DD` |
| Секция `## Added` (2 решётки) | Пункты теряются | Сделать `### Added` |
| Пункт без `- ` | Пункт не попадает в список | Добавить маркер `- ` |
| Ручной бамп `package.json` | Конфликт с CI `sync-version.js` | Откатить версию в package.json |
| Запись в середине/конце файла | Нарушен порядок (свежие — сверху) | Перенести наверх |
| `[Unreleased]` как основной блок | Не покажется в What's New | Заменить на конкретную версию перед релизом |

---

## Ссылки на код

- Парсер: `src/main/changelog-parser.js` (`parseChangelog`, `extractSince`, `toMarkdown`)
- What's New: `src/main/whats-new.js`, `src/preload/dom/whats-new.js`
- CI-релиз: `.github/workflows/release.yml`
- Синхронизация версии: `scripts/sync-version.js`
- Сам файл: `CHANGELOG.md`
Loading
Loading