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
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,22 @@

## Не выпущено

### Изменено — может сломать скрипты

- **Профиль по умолчанию больше не выбирается** (cli-core 0.319.0). Настройка `default_profile` не читается:
если она осталась в файле настроек, команда без имени профиля останавливается и подсказывает, что набрать.
Называйте профиль первым словом — `max <профиль> …` — или задайте `MAX_PROFILE`, а старую настройку уберите:
`max config unset default_profile`. `max config set default_profile` теперь отказывает.
- **Профиль с именем `default` — обычное имя.** `max default mcp config` называет MCP-сервер `max-default`, а не
`max`; запись, сделанная раньше, работает, пока `mcp setup` не перепишет её под новым именем.

### Исправлено

- **Задачи открываются только там, где что-то спросили у вас** (cli-core 0.317.0). В личном чате, как и раньше,
— каждый вопрос без ответа; в группе — только ответ на ваше сообщение и упоминание вас; в канале и «Избранном»
— ничего. Раньше любой вопрос без ответа в любом чате становился вашей задачей.
- **Правка сообщения не стирает то, чего в ней нет** (cli-core 0.317.0): время отправки, реакции и служебные поля
сохранённого сообщения остаются прежними.
- **Инструменты `max bot mcp` учитывают окружение сервера.** Раньше вызов шёл мимо переменных, с которыми
запущен сервер: например, при `MAX_READ_ONLY=1` бот всё равно отправлял сообщение. Теперь вызов через MCP
ведёт себя так же, как та же команда в терминале.
Expand Down
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -278,8 +278,7 @@ max personal session start qr # повторный вход, когда
```

Профиль называется **первым словом** в каждой команде — `max personal chats list`, — или
`export MAX_PROFILE=personal` на всю сессию оболочки, или `max config set default_profile personal`
насовсем. `max` никогда не выбирает профиль сам, даже единственный: без имени команда останавливается
`export MAX_PROFILE=personal` на всю сессию оболочки. `max` никогда не выбирает профиль сам, даже единственный: без имени команда останавливается
и перечисляет профили этого компьютера. Имя `personal` — пример: любое подойдёт.

Подробнее: [вход и сессии](https://github.com/WireCatLabs/max-cli/blob/main/docs/sessions.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/sessions)), [профили](https://github.com/WireCatLabs/max-cli/blob/main/docs/profiles.md) ([wirecat.dev](https://wirecat.dev/ru/docs/max/profiles)).
Expand Down
2 changes: 1 addition & 1 deletion docs/bot.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ max support bot messages send user:4815162342 "Ваша заявка приня
max sales bot list --check # все имена с токеном бота и какой бот за каждым
```

Имя профиля обязательно: первое слово, `MAX_PROFILE` на всю сессию оболочки или настройка `default_profile`. Без него команда бота останавливается и перечисляет профили.
Имя профиля обязательно: первое слово или `MAX_PROFILE` на всю сессию оболочки. Без него команда бота останавливается и перечисляет профили.

## Токен

Expand Down
4 changes: 2 additions & 2 deletions docs/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ max [профиль] [опции] <команда> <действие> [аргу

**Первое слово — профиль**, если оно не совпадает с именем команды: `max personal chats list`
читает чаты профиля `personal`. То же самое говорит переменная `MAX_PROFILE` на весь сеанс
оболочки, а `defaultProfile` в файле настроек — насовсем (`max config set defaultProfile personal`).
оболочки.
**Профиль никогда не подразумевается**: если его не назвать, команда, которой нужен аккаунт,
останавливается и перечисляет профили этого компьютера — даже если профиль один. Первый вход тоже
с именем: `max personal setup`. Без профиля работают только команды, которым аккаунт не нужен:
Expand Down Expand Up @@ -2540,7 +2540,7 @@ max tasks categories

### `max tasks apply`

the task rules over a chat's newest stored messages: a question nobody answered and a mention of you open a task, and your answer closes one — for a chat the first sync left alone (config task_first_pass_per_chat). Lists what would open and changes nothing unless --yes; with --yes the duplicate check runs as on a sync. Reads only the local store
the task rules over a chat's newest stored messages: in a one-to-one chat a question you did not answer, in a group only a question in reply to you and a mention of you, open a task, and your answer closes one; a channel opens none — for a chat the first sync left alone (config task_first_pass_per_chat). Lists what would open and changes nothing unless --yes; with --yes the duplicate check runs as on a sync. Reads only the local store

**Меняет что-то только на этом компьютере.**

Expand Down
8 changes: 3 additions & 5 deletions docs/configuration-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ max config show --json # то же одним объектом

Против каждой настройки — откуда она: `flag`, `default` или `config file:` с ключом, из которого
она прочитана, например `config file: bot.profiles.test`. Против профиля — `first word`,
`MAX_PROFILE`, `MAX_PROFILE_LOCK`, `config file: default_profile` или `none named` — профиль не назван,
`MAX_PROFILE`, `MAX_PROFILE_LOCK` или `none named` — профиль не назван,
и `profile` тогда `null`.

С `--json` в ответе есть и `store_settings` — настройки общего архива (`search_stemmers.*`, `task_agent_close*`) и
Expand Down Expand Up @@ -94,7 +94,6 @@ max config show --json # то же одним объектом

```json
{
"default_profile": "personal",
"defaults": { "keep_runs_for_days": 14 },
"profiles": {
"personal": { "limit": 50, "timeout_ms": 20000, "color": true },
Expand All @@ -117,7 +116,6 @@ max config show --json # то же одним объектом

| Поле | Что делает | Что перекрывает на один запуск | По умолчанию |
|---|---|---|---|
| `default_profile` | какой профиль, если первым словом ничего не названо и `MAX_PROFILE` не задан | первое слово (`max work …`), `MAX_PROFILE` | нет: без имени команда перечисляет профили |
| `limit` | сколько записей показывать, когда `--limit` не передан | `--limit` | `20` |
| `timeout_ms` | сколько ждать ответа на **один запрос** | — (`--timeout` — другое, см. ниже) | берётся из транспорта |
| `color` | цвет в терминале; без поля решается по тому, терминал ли это | —; без поля цвет выключает `NO_COLOR` | по терминалу |
Expand Down Expand Up @@ -248,7 +246,7 @@ max work config unset limit # убрать; снова решает
max agent config set permissions.messages readonly # чтение сообщений без записи
max shop config set --bot sends_per_hour 200 # только боту shop
max config set --personal --defaults limit 30 # всем личным аккаунтам
max config set default_profile work # какой профиль без первого слова
max config unset default_profile # убрать старую настройку: профиль больше не подразумевается
```

Значение проверяется той же схемой, что и при чтении, **до записи**: `max personal config set limit 0`
Expand Down Expand Up @@ -333,7 +331,7 @@ max personal chats list

| Ключ | Допустимый тип или значение | Область |
|---|---|---|
| `default_profile` | строка с именем профиля | корень файла |
| `default_profile` | не читается: команда без имени профиля останавливается — `max config unset default_profile` | корень файла |
| `limit`, `timeout_ms`, `keep_runs_for_days`, `sends_per_hour` | целое число ≥ 1 | профиль |
| `requests_per_minute` | целое число ≥ 0 | профиль |
| `color`, `record` | boolean | профиль |
Expand Down
4 changes: 0 additions & 4 deletions docs/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
| `serve` | запускать фоновый сервер `max personal serve`, когда команде нужен MAX ([один вход на всё](limits.md#один-вход-на-всё)) | `true` |
| `transcribe_model` | какой моделью распознавать голосовые сообщения | `gigaam-v3` |
| `update_check` | раз в сутки сообщать, что вышла новая версия `max` | `true` |
| `default_profile` | какой профиль берёт команда, если профиль не назван | нет: без имени команда перечисляет профили |

Секрета в файле не бывает. В нём нет места для токена, номера телефона или идентификатора чата:
токен хранится в ключнице системы, а где её нет — в файле, который можете читать только вы ([где живёт токен](security.md#где-живёт-токен)).
Expand Down Expand Up @@ -67,7 +66,6 @@

```json
{
"default_profile": "personal",
"defaults": {
"limit": 20,
"keep_runs_for_days": 14,
Expand Down Expand Up @@ -104,8 +102,6 @@

Что делает каждая часть:

- `default_profile`: `max chats list` без имени профиля работает с `personal`. Без этой настройки и
без `MAX_PROFILE` такая команда остановится и перечислит профили.
- `defaults`: эти значения получает каждый профиль, если не задал своё. `update_check`, `skill_hint` и
`transcribe_model` допустимы только здесь: программа и модели речи одни на все профили.
- `profiles.personal`: больше строк, цвета и запись каждого запуска — только для `personal`.
Expand Down
4 changes: 2 additions & 2 deletions docs/dev/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -488,8 +488,8 @@ common settings resolve through cli-core `settingsFor`. MAX retains its strict c
(`src/config.ts`). Commands take what they are given; one that re-derived the order would disagree.
Every field, variable and the file format: [`../configuration.md`](../configuration.md); profiles and
paging for users: [`../usage.md`](../usage.md). The profile follows the same order: the first word
(`max personal chats list`), then `MAX_PROFILE=personal`, then `"defaultProfile"` in the file, then
`default`.
(`max personal chats list`), then `MAX_PROFILE=personal`; nothing else picks one. A leftover
`default_profile` in the file stops a command that names none, with the profile to type.

### The profile is the first word, not a flag

Expand Down
3 changes: 1 addition & 2 deletions docs/profiles.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
**Профиль** — имя для одного входа `max` на этом компьютере: личного аккаунта MAX или бота, со
своей сессией и своими настройками. Имя выбираете вы при первом входе — `max personal setup` — и
повторяете его в каждой команде: `max` никогда не выбирает профиль сам, даже единственный. Чтобы не
писать имя каждый раз, задайте `MAX_PROFILE` на сеанс оболочки или
`max config set default_profile personal` насовсем.
писать имя каждый раз, задайте `MAX_PROFILE` на сеанс оболочки.

Прочитайте эту страницу, если вам нужен второй аккаунт, если ИИ-агенту нужно меньше прав, чем
вам, или если вы хотите вести бота. В конце вы знаете, как выбрать профиль для команды, как дать
Expand Down
7 changes: 3 additions & 4 deletions docs/sessions.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
- **Ключница** (keyring) — хранилище паролей операционной системы: Keychain в macOS, Secret Service
(GNOME Keyring, KWallet) в Linux, диспетчер учётных данных в Windows.
- **Профиль** — имя для одного входа на этом компьютере, со своим токеном, состоянием и
настройками. Имя называется в каждой команде (`max personal …`), `MAX_PROFILE` или
`default_profile`; сам `max` профиль не выбирает. Второй профиль нужен только для второго
настройками. Имя называется в каждой команде (`max personal …`) или
`MAX_PROFILE`; сам `max` профиль не выбирает. Второй профиль нужен только для второго
аккаунта или для отдельных ограничений ([профили](#профили)).

Не путайте `max personal session` и `max personal account sessions`. `max personal session` — вход самого `max`;
Expand Down Expand Up @@ -146,8 +146,7 @@ export MAX_PROFILE=personal # или на всю сессию оболочки
имя. Иначе `max personal chats` молча значило бы «профиль chats без команды». Имя состоит из латинских букв,
цифр, точки, дефиса и подчёркивания и начинается с буквы или цифры.

Порядок, первое совпадение побеждает: первое слово, `MAX_PROFILE`, `default_profile` в файле
настроек. Если ничего из этого нет, команда, которой нужен аккаунт, завершается с кодом `2` и
Порядок, первое совпадение побеждает: первое слово, `MAX_PROFILE`. Если ничего из этого нет, команда, которой нужен аккаунт, завершается с кодом `2` и
перечисляет профили этого компьютера — даже когда профиль один:

```text
Expand Down
5 changes: 2 additions & 3 deletions docs/usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ max work chats list # профиль work
профиль нельзя назвать `chats` — при создании такое имя будет отвергнуто, с объяснением.

`max` никогда не выбирает профиль сам, даже если он один: без имени команда останавливается и
перечисляет профили этого компьютера. Имя даёт первое слово, `MAX_PROFILE` или `default_profile`.
перечисляет профили этого компьютера. Имя даёт первое слово или `MAX_PROFILE`.

Для целой сессии оболочки удобнее переменная:

Expand Down Expand Up @@ -1521,7 +1521,6 @@ max personal runs path <id> # каталог, для jq и grep

```json
{
"default_profile": "personal",
"profiles": {
"personal": { "limit": 50, "timeout_ms": 20000, "color": true, "record": false, "keep_runs_for_days": 30 }
}
Expand All @@ -1531,7 +1530,7 @@ max personal runs path <id> # каталог, для jq и grep
Порядок, в котором решается любая настройка: **флаг → переменная окружения → файл → встроенное
значение**. В файле профиль сильнее общих `defaults`, а разделы `personal` и `bot` задают значения
отдельно для личного аккаунта и для ботов (`max personal config set --personal …`, `--bot …`). Все поля,
`default_profile` и `permissions` в том числе, — [настройки](configuration.md). Опечатка в имени поля —
`permissions` в том числе, — [настройки](configuration.md). Опечатка в имени поля —
ошибка с именем поля, а не молчаливое значение по умолчанию.

**Секрета в этом файле быть не может**: в схеме нет поля, куда его положить.
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@
"@msgpack/msgpack": "3.1.3",
"@valibot/to-json-schema": "1.8.0",
"@wirecat/cli-base": "0.40.2",
"@wirecat/cli-core": "0.315.0",
"@wirecat/cli-core": "0.319.0",
"commander": "15.0.0",
"lossless-json": "4.3.1",
"ogg-opus-decoder": "1.7.5",
Expand Down
10 changes: 5 additions & 5 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading