From 3e1cb1e078506522e0fa04179ad9c3d3a5b8bbd4 Mon Sep 17 00:00:00 2001 From: Anton Kuznetcov Date: Wed, 22 Oct 2025 22:49:45 +0600 Subject: [PATCH] release v2.0.1 --- .goreleaser.yaml | 80 +++++++++++++++++++++++++++----------------- .goreleaser.yaml.old | 33 ++++++++++++++++++ API_CONTRACT.md | 4 +++ CHANGELOG.txt | 28 ++++++++++++++++ README.md | 5 +++ USAGE_GUIDE.md | 42 ++++++++++++++++++++--- VERSION.txt | 2 +- go.mod | 2 +- go.sum | 1 + 9 files changed, 161 insertions(+), 36 deletions(-) create mode 100644 .goreleaser.yaml.old diff --git a/.goreleaser.yaml b/.goreleaser.yaml index cceff35..d53627b 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -1,33 +1,53 @@ -archives: - - format: tar.gz - -builds: - - binary: lcg - env: - - CGO_ENABLED=0 - goarch: - - amd64 - - arm64 - - arm - goos: - - linux - - darwin - -changelog: - filters: - exclude: - - '^docs:' - - '^test:' - sort: asc - -checksum: - name_template: 'checksums.txt' - -release: - draft: true - -snapshot: - name_template: "{{ incpatch .Version }}-next" +# This is an example .goreleaser.yml file with some sensible defaults. +# Make sure to check the documentation at https://goreleaser.com +# The lines below are called `modelines`. See `:help modeline` +# Feel free to remove those if you don't want/need to use them. # yaml-language-server: $schema=https://goreleaser.com/static/schema.json # vim: set ts=2 sw=2 tw=0 fo=cnqoj + +version: 2 + +before: + hooks: + # You may remove this if you don't use go modules. + - go mod tidy + # you may remove this if you don't need go generate + - go generate ./... + +builds: + - env: + - CGO_ENABLED=0 + goos: + - linux + - windows + - darwin + +archives: + - formats: [tar.gz] + # this name template makes the OS and Arch compatible with the results of `uname`. + name_template: >- + {{ .ProjectName }}_ + {{- title .Os }}_ + {{- if eq .Arch "amd64" }}x86_64 + {{- else if eq .Arch "386" }}i386 + {{- else }}{{ .Arch }}{{ end }} + {{- if .Arm }}v{{ .Arm }}{{ end }} + # use zip for windows archives + format_overrides: + - goos: windows + formats: [zip] + +changelog: + sort: asc + filters: + exclude: + - "^docs:" + - "^test:" + +release: + footer: >- + + --- + + Released by [GoReleaser](https://github.com/goreleaser/goreleaser). diff --git a/.goreleaser.yaml.old b/.goreleaser.yaml.old new file mode 100644 index 0000000..cceff35 --- /dev/null +++ b/.goreleaser.yaml.old @@ -0,0 +1,33 @@ +archives: + - format: tar.gz + +builds: + - binary: lcg + env: + - CGO_ENABLED=0 + goarch: + - amd64 + - arm64 + - arm + goos: + - linux + - darwin + +changelog: + filters: + exclude: + - '^docs:' + - '^test:' + sort: asc + +checksum: + name_template: 'checksums.txt' + +release: + draft: true + +snapshot: + name_template: "{{ incpatch .Version }}-next" + +# yaml-language-server: $schema=https://goreleaser.com/static/schema.json +# vim: set ts=2 sw=2 tw=0 fo=cnqoj diff --git a/API_CONTRACT.md b/API_CONTRACT.md index 7e146bf..fca4233 100644 --- a/API_CONTRACT.md +++ b/API_CONTRACT.md @@ -181,3 +181,7 @@ curl -sS -X POST \ - Добавление новых полей в ответах, не используемых клиентом, допустимо при сохранении существующих. - Переименование или удаление полей `response` (proxy) и `message.content` (ollama) нарушит совместимость. + +--- + +Дополнительно: для HTTP API веб‑сервера (эндпоинт `POST /execute`, только `curl`) см. `API_GUIDE.md` с примерами и подробной схемой запроса/ответа. diff --git a/CHANGELOG.txt b/CHANGELOG.txt index b957e25..f997f37 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,6 +1,34 @@ CHANGELOG ========= +Версия 2.0.1 (2025-10-22) +========================= + +## ✨ ИЗМЕНЕНИЯ И НОВОЕ + +- 📱 Веб‑интерфейс: улучшена мобильная адаптация (кнопки, шрифты, отступы, верстка) +- 🧭 Учет `prefers-reduced-motion` для снижения анимаций при необходимости +- 🔌 Добавлен публичный REST эндпоинт `POST /execute` для программного доступа + - ⚠️ Ограничение безопасности: принимаются только запросы от `curl` (User-Agent) + - 📖 Подробности и примеры: см. `API_GUIDE.md` + +## 🐛 ИСПРАВЛЕНИЯ И УЛУЧШЕНИЯ + +- 🔧 Рефакторинг HTTP‑сервера: вынесен в пакет `serve/*` для лучшей поддерживаемости +- 🗑️ Удалены устаревшие файлы: `cmd/serve.go`, `_main.go` +- 🛠️ Скрипты релиза: небольшие правки в `shell-code/pre-release.sh` и `shell-code/release.py` + +## 📚 ДОКУМЕНТАЦИЯ + +- ➕ Добавлен `API_GUIDE.md` (описание `/execute`, примеры `curl`/Python) +- 📝 Обновлены `README.md` и `USAGE_GUIDE.md` (актуализация про мобильную версию и API) +- 🔗 В `API_CONTRACT.md` добавлена ссылка на `API_GUIDE.md` (HTTP API веб‑сервера) + +## ♻️ СОВМЕСТИМОСТЬ + +- ✅ Обратная совместимость сохранена; CLI и провайдеры (proxy/ollama) без изменений +- 🚫 Миграция не требуется + Версия 2.0.0 (2025-01-19) ========================= diff --git a/README.md b/README.md index b9c24d5..29a51a0 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,11 @@ Explanations: Clipboard support requires `xclip` or `xsel`. +## What's new in 2.0.1 + +- Mobile UI improvements: better responsiveness (buttons, fonts, spacing) and reduced motion support +- Public REST endpoint: `POST /execute` (curl-only) for programmatic access — see `API_GUIDE.md` + ## Environment - `LCG_PROVIDER` (default `ollama`) — provider type: `ollama` or `proxy` diff --git a/USAGE_GUIDE.md b/USAGE_GUIDE.md index d385f73..ad29bfe 100644 --- a/USAGE_GUIDE.md +++ b/USAGE_GUIDE.md @@ -21,7 +21,8 @@ sudo apt-get install xsel Сборка из исходников: ```bash -git clone --depth 1 https://github.com/Direct-Dev-Ru/linux-command-gpt.git ~/.linux-command-gpt + +git clone --depth 1 https://github.com/Direct-Dev-Ru/go-lcg.git ~/.linux-command-gpt cd ~/.linux-command-gpt go build -o lcg @@ -59,6 +60,12 @@ lcg --file /path/to/context.txt "хочу вывести список дирек Действия: (c)копировать, (s)сохранить, (r)перегенерировать, (e)выполнить, (v|vv|vvv)подробно, (n)ничего: ``` +### Что нового в 2.0.1 + +- Улучшена мобильная версия веб‑интерфейса: корректные размеры кнопок, шрифтов и отступов; адаптивная верстка +- Учитывается `prefers-reduced-motion` для снижения анимаций, если это задано в системе +- Добавлен REST эндпоинт `POST /execute` (только через curl) — см. подробности и примеры в `API_GUIDE.md` + ## Переменные окружения Можно настроить поведение без изменения командной строки. @@ -75,6 +82,7 @@ lcg --file /path/to/context.txt "хочу вывести список дирек | `LCG_PROVIDER` | `ollama` | Тип провайдера: `ollama` или `proxy`. | | `LCG_JWT_TOKEN` | пусто | JWT токен для `proxy` провайдера (альтернатива — файл `~/.proxy_jwt_token`). | | `LCG_PROMPT_ID` | `1` | ID системного промпта по умолчанию. | +| `LCG_BROWSER_PATH` | пусто | Путь к браузеру для автооткрытия (`--browser`). | | `LCG_TIMEOUT` | `300` | Таймаут запроса в секундах. | | `LCG_RESULT_HISTORY` | `$(LCG_RESULT_FOLDER)/lcg_history.json` | Путь к JSON‑истории запросов. | | `LCG_PROMPT_FOLDER` | `~/.config/lcg/gpt_sys_prompts` | Папка для хранения системных промптов. | @@ -109,7 +117,7 @@ lcg [глобальные опции] <описание команды> - `--file, -f string` — прочитать часть запроса из файла и добавить к описанию. - `--sys, -s string` — системный промпт (содержимое или ID как строка). Если не задан, используется `--prompt-id` или `LCG_PROMPT`. - `--prompt-id, --pid int` — ID системного промпта (1–5 для стандартных, либо ваш кастомный ID). -- `--timeout, -t int` — таймаут запроса в секундах (по умолчанию 300). +- `--timeout, -t int` — таймаут запроса в секундах (по умолчанию 120; через `LCG_TIMEOUT` — 300). - `--no-history, --nh` — отключить запись/обновление истории для текущего запуска. - `--debug, -d` — показать отладочную информацию (параметры запроса и промпты). - `--version, -v` — вывести версию. @@ -133,10 +141,11 @@ lcg [глобальные опции] <описание команды> - `lcg prompts list --full` (`-f`) — полный вывод содержимого без обрезки длинных строк. - `lcg prompts add` (`-a`) — добавить пользовательский промпт (по шагам в интерактиве). - `lcg prompts delete ` (`-d`) — удалить пользовательский промпт по ID (>5). -- `lcg test-prompt <описание>` (`-tp`): показать детали выбранного системного промпта и протестировать его на заданном описании. +- `lcg test-prompt <описание>` (алиас: `tp`): показать детали выбранного системного промпта и протестировать его на заданном описании. - `lcg serve`: запустить HTTP сервер для просмотра сохраненных результатов: - `--port, -p` — порт сервера (по умолчанию из `LCG_SERVER_PORT`) - `--host, -H` — хост сервера (по умолчанию из `LCG_SERVER_HOST`) + - `--browser, -b` — открыть браузер автоматически после старта ### Подробные объяснения (v/vv/vvv) @@ -249,6 +258,9 @@ lcg serve --port 9090 # Запуск на другом хосте lcg serve --host 0.0.0.0 --port 8080 +# Автооткрытие браузера (опционально) +lcg serve --browser + # Использование переменных окружения export LCG_SERVER_PORT=3000 export LCG_SERVER_HOST=0.0.0.0 @@ -277,6 +289,11 @@ lcg serve - `## Command` — первая сгенерированная команда. - `## Explanation and Alternatives (model: )` — подробное объяснение и альтернативы. +### Браузер + +- По умолчанию UI не открывается автоматически. Для автооткрытия используйте `--browser`. +- Путь к конкретному браузеру можно задать переменной `LCG_BROWSER_PATH`. + ## Выполнение сгенерированной команды Действие `e` запустит команду через `bash -c`. Перед запуском потребуется подтверждение `y/yes`. Всегда проверяйте команду вручную, особенно при операциях с файлами и сетью. @@ -345,7 +362,7 @@ lcg serve --host 0.0.0.0 --port 8080 ## История -`lcg history` выводит историю текущего процесса (не сохраняется между запусками, максимум 100 записей): +`lcg history` выводит историю из JSON‑файла (`LCG_RESULT_HISTORY`), сохраняется между запусками: ```bash lcg history list @@ -388,3 +405,20 @@ lcg history list ## Лицензия и исходники См. README и репозиторий проекта. Предложения и баг‑репорты приветствуются в Issues. + +## Доступ к локальному API + +Эндпоинт: `POST /execute` (только через curl). + +```bash +# Запустить сервер +lcg serve + +# Выполнить запрос +curl -X POST http://localhost:8080/execute \ + -H "Content-Type: application/json" \ + -A curl \ + -d '{"prompt": "create directory test", "verbose": "vv"}' +``` + +Подробности и примеры: `API_GUIDE.md`. diff --git a/VERSION.txt b/VERSION.txt index 46b105a..0ac852d 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -v2.0.0 +v2.0.1 diff --git a/go.mod b/go.mod index 938c77f..9635340 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require gopkg.in/yaml.v3 v3.0.1 require ( github.com/cpuguy83/go-md2man/v2 v2.0.5 //indirect - github.com/russross/blackfriday/v2 v2.1.0 + github.com/russross/blackfriday/v2 v2.1.0 github.com/urfave/cli/v2 v2.27.5 github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect ) diff --git a/go.sum b/go.sum index f795117..f2f0aa3 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,7 @@ github.com/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w= github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=