Changelog
Все значимые изменения в gitflic-cli. Формат — приближённый к Keep a Changelog.
[gitflic-cli-mcp 0.4.1] — 2026-06-24
Багфиксы slim-слоя, найденные при live-прогоне всех 77 тулзов «в бою».
gitflic_user_searchчерез slim возвращал пусто — клиентскийq-фильтр искал только поtitle/description, а у юзеров их нет. Haystack расширен (username/fullName/name/alias/tagName).- Пустой
*_listнезамапленного тула отдавал сырую обёртку{page}вместо{items:[],total,returned:0}. Fallback расширен на любой*_list/*_search.
[0.3.5] — 2026-06-24
Ещё несколько частичных edit'ов затирали поля (PUT заменяет объект целиком → нужен read-merge):
branch protection edit— правка одного поля сохраняет остальные (проверено вживую). Такжеsettings oauth editиregistry repo edit.mr discuss delete— слалPOST→ GitFlic 405; теперьDELETE(проверено вживую).mr discuss reply/resolve/deleteработают через CLI (нуженrootNote.uuid).
[0.3.4] — 2026-06-23
issue close/reopen/editбольше не затираютtitle/description— раньшеcloseмолча превращал заголовок в«stub»(GitFlic PUT заменяет объект целиком; теперь read-merge).
[0.3.3] + gitflic-cli-mcp [0.4.0] — 2026-06-23 — сжатие токенов MCP
MCP больше не отдаёт LLM «сырой» JSON GitFlic — на реальных данных ≈70% экономии токенов (на коммитах/ветках до 84%).
- MCP: сжатие ответов — list-обёртка
{_embedded,page}→{items,total,matched,returned}, проекция сущностей, вырезание косметики (avatar/cover/hexColor/_links),status→ enum-скаляр. Два режима:GITFLIC_MCP_OUTPUT=slim|full+GITFLIC_MCP_RAW. Поканальныеraw:true/fields:[…]. Клиентская фильтрация списков (label/q/assignee/…). Новый approval-тулgitflic_webhook_reveal_secret;secretвебхука маскируется вsecretSet. Тулзов: 77. См. MCP-сервер → Сжатие ответов. - CLI: fix пагинации
--all— пейджер был 1-индексным, а списки GitFlic 0-индексные → терялась первая страница (issue list --allотдавал 40 из 60).user projects/followers/following→ поддержка--all.
[0.3.2] + gitflic-cli-mcp [0.3.1] — 2026-06-23
Багфиксы из живого E2E-прогона всех MCP-тулзов. Добавлен scripts/e2e-live.mjs.
- CLI
project edit—PUT /project(405) → теперь…/setting/change-setting(title/description/language). - CLI
mr create— требует непустой--description(иначе GitFlic 422). - CLI
blob get/recursive/download— работают без--commit(по--branchили дефолтной ветке). - MCP
gitflic_blob_files→blob recursive(звал несуществующуюblob files). - MCP
gitflic_blob_archive— удалён (нет репо-тарбола в REST). Тулзов: 76. - MCP
gitflic_mr_create—descriptionобязателен;gitflic_project_edit— убраны visibility/default-branch.
[0.3.1] — 2026-06-23
- Fix
gitflic release create/release edit— не отправлялось обязательное полеpreRelease, из-за чего GitFlic API падал с 500/422. ТеперьpreReleaseшлётся всегда (defaultfalse);editдочитывает текущий релиз и мёржит изменения. Добавлены unit-тесты.
[gitflic-cli-mcp 0.3.0] — 2026-06-23
Релиз только MCP-пакета. CLI
gitflic-cliбез изменений (0.3.0).
GITFLIC_MCP_NO_DESTRUCTIVE=1— overlay-флаг, который жёстко убирает 7 удаляющих тулзов (*_delete) на уровне регистрации (надёжнее approval-prompt'а). Остальные мутации, включаяgitflic_mr_merge, остаются и идут через подтверждение хоста. Цепочка: база →READONLY→NO_DESTRUCTIVE→EXCLUDE.
[gitflic-cli-mcp 0.2.0] — 2026-06-23
Релиз только MCP-пакета. CLI
gitflic-cliбез изменений (0.3.0).
MCP-сервер (gitflic-cli-mcp)
- Фильтрация набора тулзов для экономии контекста модели. Через env-переменные:
GITFLIC_MCP_GROUPS(по группам, напр.mr,issue),GITFLIC_MCP_READONLY=1(только read-only),GITFLIC_MCP_TOOLS(allowlist),GITFLIC_MCP_EXCLUDE(denylist). По умолчанию регистрируются все 77 тулзов. См. MCP-сервер → Ограничение набора тулзов. - Fix MCP-аннотаций:
gitflic_project_list_myиgitflic_mr_by_commitпомечены read-only;gitflic_mr_discuss_resolveпомечен write. Итог: 40 read / 37 write.
[0.3.0] — 2026-06-23
100% покрытие публичного REST API GitFlic — все 20 разделов (≈199 эндпоинтов со scope-вариантами). Бо́льшая часть протестирована вживую против api.gitflic.ru (62/62 проверки green). Подробности — в api-coverage.md.
Added
- HTTP-хелперы (
lib/http.mjs):httpText(raw-контент,Accept: */*),httpDownload(бинарное скачивание в файл),httpUploadFile(raw-PUT для реестра пакетов).Accept/parse/contentTypeпрокинуты вhttpWithRetry. - registry — полностью переписан:
registry package(list/get/versions/version/files/delete + upload/download для generic/maven/npm/pypi/nuget/composer/opm/cran/rubygem/cargo/conda в scope project/company/instance) иregistry repo(registry-repository). Per-format upload использует флаг--fmt(не--format). - runner — переписан под реальные пути
/project|company|admin/runners: scope-параметр + edit/shutdown/delete/jobs/registration-info. - saml — переписан под
/admin/saml. - cicd — artifacts, job-операции, restart/cancel/delete, variables, pipeline-lifetime (team/company).
- branch / tag / environment / mr — team/company-scoped операции (protection rules, MR approval rules/configuration/squash/method/template, apply-settings-to-projects) с единым флагом
--scope team|company+--team/--company. - release — upload/download/delete файлов релиза (multipart, поле
files). - issue — relations CRUD, files (list/link/unlink),
issue attach(upload+link). - commit — for-file, tag-diff, cherry-pick.
- blob — download/recursive/file-size (raw
Accept: */*). - project — search/my/shared, create-fork, mirror push/manual-update, archive, attachments, change-setting, run-script, allowed-owners, project-size.
- admin — user CRUD + ban/unban + ssh-key + push-stats + 18 settings-мутаторов + ldap import (admin-only).
- team/company — my/shared/create/members/import.
Changed
- Диспетчер (
lib/gitflic.mjs): команды с--scope team|companyбольше не требуют--project(раньше падали «could not detect project»). - Реестр: исправлены неверные пути (
/registry/...база,version-list/package-file, dotted maven groupId). - Убраны несуществующие в REST
team edit/deleteиcompany edit/delete(405 — только web UI; для смены владельца —team transfer). - Тесты: 166 unit-тестов (добавлены тесты
htmlUnescape).
Fixed
- BUG-001:
mr diffтеперь декодирует HTML-entities ("/</>/&) черезhtmlUnescape()— диффы читаемы; покрыто тестами. - commit list исправлен на
/commits; cherry-pick — на/branch/cherry-pick. - release-list —
/releaseвместо/release/list(404).
[0.2.0] — 2026-06-23
Не выпускалось отдельным тегом — вошло в 0.3.0.
Changed
- CI/CD выпилен. Удалён
gitflic-ci.yamlи страницаdocs/ci-cd.md: на публичномgitflic.ruнет shared runners, а self-hostedrunner.jarтребует платный VPS. Сборка/релиз — локально (npm run build,npm run release), дока — статикой на Timeweb.
Fixed
cicd pipeline listв pretty-режиме показывал(no pipelines)при наличии записей — реальный HAL-ключrestPipelineModelList(а неpipelineList). Поправлено вlib/cmd/cicd.mjs(со старыми ключами как fallback).
[0.1.0] — 2026-06-22
Added
- OS-keychain token storage (
lib/secret.mjs) — macOS Keychain / Linux libsecret / chmod 0600 file fallback. authмодуль (login/logout/status/list/switch/bind/unbind/bindings) с валидацией токена ДО сохранения.- Multi-account через
--as <name>+auth switch. - Per-project account bindings (
auth bind <project> <account>). - TUI mode для
mr list(--tui). - NDJSON streaming для list endpoints (
--stream/GITFLIC_STREAM=1). --allauto-pagination для 12 list endpoints.- Shell completion для bash/zsh/fish (
gitflic completion <shell>). - Format flags
--color/--no-color+ envNO_COLOR/FORCE_COLOR. - File-based project-UUID cache +
gitflic cacheкоманда. - HTTP retry on 429/502/503/504 с exponential backoff + jitter.
- MCP-сервер — 77 типизированных тулов для AI-агентов.
- Multipart upload для release assets + issue attachments.
Fixed
lib/tui.mjsсломан в production —import { process } from "node:process"падает SyntaxError на нативном Node ESM. vitest/esbuild молча маскировал баг. Поправлено наimport process from "node:process".
[0.0.x] — initial development
- MVP: ~150 эндпоинтов GitFlic REST в CLI.
- Bash + PowerShell установщики.
- Zero runtime dependencies (только Node 18+ stdlib).
- Конфиг в
~/.config/gitflic-cli/config.json.