ktalk-cli 2.1.0__tar.gz → 3.0.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/.gitignore +4 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/PKG-INFO +55 -93
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/README.md +54 -92
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/pyproject.toml +1 -1
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/auth.py +20 -71
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/calendar_reader.py +2 -2
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/cli.py +15 -1
- ktalk_cli-3.0.2/src/ktalk_cli/cli_doctor.py +147 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/cli_sync.py +11 -26
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/cli_token.py +4 -9
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/client.py +55 -124
- ktalk_cli-3.0.2/src/ktalk_cli/config.py +187 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/contacts.py +2 -2
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/download.py +6 -30
- ktalk_cli-3.0.2/src/ktalk_cli/endpoints.py +84 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/formatters.py +10 -4
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/host_config.py +4 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/meeting_body.py +40 -23
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/meeting_scheduling.py +2 -2
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/pagination.py +0 -15
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/rooms.py +4 -4
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/token_file.py +14 -0
- ktalk_cli-3.0.2/tests/test_auth_modes.py +84 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_calendar.py +3 -24
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_cli_content.py +11 -7
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_cli_host_config_wiring.py +70 -0
- ktalk_cli-3.0.2/tests/test_config.py +244 -0
- ktalk_cli-3.0.2/tests/test_diagnostics.py +111 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_download.py +7 -56
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_formatters.py +67 -0
- ktalk_cli-3.0.2/tests/test_fr42_single_credential_source.py +114 -0
- ktalk_cli-3.0.2/tests/test_fr43_legacy_key_removal_warning.py +151 -0
- ktalk_cli-3.0.2/tests/test_fr44_auth_status_accepted_rejected.py +220 -0
- ktalk_cli-3.0.2/tests/test_fr47_missing_fields_completeness.py +146 -0
- ktalk_cli-3.0.2/tests/test_fr48_doctor_summary_diagnostics.py +464 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_meeting_cancel.py +6 -28
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_meeting_scheduling.py +2 -24
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_pagination.py +5 -16
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_reconciliation.py +16 -16
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_rooms.py +2 -22
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_search_contacts.py +6 -39
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_secret_masking.py +26 -16
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_token_file.py +18 -33
- ktalk_cli-2.1.0/src/ktalk_cli/config.py +0 -152
- ktalk_cli-2.1.0/src/ktalk_cli/endpoints.py +0 -145
- ktalk_cli-2.1.0/tests/test_auth_modes.py +0 -243
- ktalk_cli-2.1.0/tests/test_config.py +0 -137
- ktalk_cli-2.1.0/tests/test_diagnostics.py +0 -224
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/LICENSE +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/CLAUDE.md +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/__init__.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/cli_contacts.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/cli_content.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/cli_meeting.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/cli_meeting_args.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/cli_meeting_confirm.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/cli_meetings_read.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/cli_sanction.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/cli_store.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/confirmation.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/contour_diagnostics.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/enrichment.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/meeting_cancel.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/reconciliation.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/registry.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/store.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/store_migration.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/transcript_identity.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/write_journal.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/src/ktalk_cli/write_sanction.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/conftest.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/access-info-expired.json +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/access-info-full.json +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/archive-8col.md +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/archive-dup-id.md +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/archive-escaped-pipe-7col.md +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/archive-page1.json +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/archive-page2-empty.json +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/archive-pipe-in-name.md +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/calendar-item-session.json +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/chat-messages-session.json +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/conference-history-session-oversized.json +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/conference-history-session.json +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/error-body-problem-json.json +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/error-body-validation.json +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/recording-detail-session-full-participants.json +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/recording-detail-session-oversized-partial.json +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/recording-detail-with-qualities.json +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/recording-list-item-session.json +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/recordings-list-apikey-page1.json +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/recordings-list-apikey-page2.json +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/registry-archive-2026-04.md +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/registry.md +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/fixtures/room-detail-session.json +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_adr022_ktalk_cli_rename.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_archive.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_chat.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_cli.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_cli_config_show.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_cli_export_store_isolation.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_cli_meeting.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_cli_meeting_sanctioned.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_cli_meetings_surface.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_cli_migrate_to_central_store.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_client.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_concurrency.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_confirmation.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_contour_diagnostics.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_enrichment.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_fr19_auth_status.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_fr21_no_vault_layout.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_fr39_calendar_inclusive_end.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_fr40_timezone_format.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_fr41_last_synced.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_host_config.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_issue3_null_id_fallback.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_meeting_body.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_migration.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_nfr17_identity_verification.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_registry.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_store.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_store_migration.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_write_journal.py +0 -0
- {ktalk_cli-2.1.0 → ktalk_cli-3.0.2}/tests/test_write_sanction.py +0 -0
|
@@ -25,5 +25,9 @@ docs/*.har
|
|
|
25
25
|
*.db
|
|
26
26
|
.beads-credential-key
|
|
27
27
|
.beads/proxieddb/
|
|
28
|
+
# Аудиторский сайдкар взаимодействий агентов (bd, audit.enabled) — локальная
|
|
29
|
+
# телеметрия прогона, не состояние трекера: оно живёт в Dolt и уезжает через
|
|
30
|
+
# refs/dolt/data (sync.remote в .beads/config.yaml), а не через этот файл.
|
|
31
|
+
.beads/interactions.jsonl
|
|
28
32
|
*.gate.lock*
|
|
29
33
|
packaging/*/dist/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: ktalk-cli
|
|
3
|
-
Version:
|
|
3
|
+
Version: 3.0.2
|
|
4
4
|
Summary: CLI for accessing Kontur Talk (KTalk) recordings, transcripts and summaries
|
|
5
5
|
Project-URL: Homepage, https://github.com/mdemyanov/ktalk-cli
|
|
6
6
|
Project-URL: Repository, https://github.com/mdemyanov/ktalk-cli
|
|
@@ -45,11 +45,11 @@ CLI `ktalk` — интерфейс командной строки для тех
|
|
|
45
45
|
- Саммари и протоколы встреч.
|
|
46
46
|
- Полный состав участников записи (обходит лимит в 6 из списковых ответов).
|
|
47
47
|
- Скачивание видеофайла записи.
|
|
48
|
-
-
|
|
49
|
-
- Конфигурацию комнаты и календарь запланированных
|
|
48
|
+
- Историю чата встречи.
|
|
49
|
+
- Конфигурацию комнаты и календарь запланированных встреч.
|
|
50
50
|
- Предпросмотр и создание новой встречи — создание требует интерактивного
|
|
51
51
|
терминала и явного подтверждения, см. «Планирование встречи» ниже.
|
|
52
|
-
- Диагностику авторизации —
|
|
52
|
+
- Диагностику авторизации — жив ли токен и почему запрос не проходит.
|
|
53
53
|
- Операционный реестр обработки записей на SQLite — синхронизация, статусы,
|
|
54
54
|
markdown-зеркало для git, см. «Реестр записей» ниже.
|
|
55
55
|
|
|
@@ -90,20 +90,27 @@ uv tool upgrade ktalk-cli
|
|
|
90
90
|
|
|
91
91
|
## Авторизация
|
|
92
92
|
|
|
93
|
-
CLI
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
93
|
+
**С версии 3.0.0 CLI работает только через session token** (кука браузера) — режим
|
|
94
|
+
персонального API-ключа (`KTALK_PERSONAL_API_KEY`) снят целиком (ADR-025): он
|
|
95
|
+
конкурировал с сессией молча (при обеих заданных переменных побеждал ключ без
|
|
96
|
+
объяснения в тексте отказа) и диагностика `auth-status` объявляла заведомо
|
|
97
|
+
невалидный ключ «валидным» на 403.
|
|
97
98
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
99
|
+
**Цена снятия для тех, кто держал постоянный ключ:** персональный ключ не протухал
|
|
100
|
+
без предупреждения, session token — протухает. Постоянная работа теперь требует
|
|
101
|
+
ручного обновления токена по мере его протухания (`ktalk token set -`, см. ниже) —
|
|
102
|
+
это не восстанавливается автоматически снятием ключа.
|
|
103
|
+
|
|
104
|
+
Переменная `KTALK_PERSONAL_API_KEY`, если она всё ещё задана в окружении, не
|
|
105
|
+
читается как credential ни на одном шаге — CLI печатает об этом одно предупреждение
|
|
106
|
+
на stderr при каждом вызове и продолжает работу на сессионном токене.
|
|
101
107
|
|
|
102
108
|
### Session token
|
|
103
109
|
|
|
104
|
-
Session token — токен вашей браузерной сессии Толка.
|
|
105
|
-
|
|
106
|
-
|
|
110
|
+
Session token — токен вашей браузерной сессии Толка. Единственный поддерживаемый
|
|
111
|
+
источник credential (ADR-025). Живёт недолго и протухает без предупреждения — при
|
|
112
|
+
регулярной работе повторяйте те же два шага ниже, когда команда начнёт отказывать
|
|
113
|
+
кодом авторизации.
|
|
107
114
|
|
|
108
115
|
**Два шага.** На вкладке, где вы залогинены в `https://your-domain.ktalk.ru`, откройте
|
|
109
116
|
DevTools (`F12`, или `Cmd+Option+I` на Mac) → **Console** и выполните:
|
|
@@ -133,9 +140,11 @@ ktalk auth-status # жива ли авторизация — реальны
|
|
|
133
140
|
|
|
134
141
|
| # | Источник | Комментарий |
|
|
135
142
|
|---|---|---|
|
|
136
|
-
| 1 | `
|
|
137
|
-
| 2 | `
|
|
138
|
-
|
|
143
|
+
| 1 | `KTALK_SESSION_TOKEN` (окружение или `.env` в рабочей директории) | заданное явно сильнее лежащего на диске |
|
|
144
|
+
| 2 | `~/.config/ktalk-mcp/token` | дефолтный путь для повседневной работы |
|
|
145
|
+
|
|
146
|
+
Ни один запрос не несёт заголовок `X-Auth-Token` — единственный транспорт credential
|
|
147
|
+
теперь query-параметр `sessionToken`.
|
|
139
148
|
|
|
140
149
|
> Путь `~/.config/ktalk-mcp/token` не переименован вместе с пакетом и остаётся
|
|
141
150
|
> таким намеренно: он выбран независимо от имени дистрибутива (каталог
|
|
@@ -156,57 +165,20 @@ ktalk auth-status # жива ли авторизация — реальны
|
|
|
156
165
|
> ошибку авторизации, повторите те же два шага — `ktalk token set -` перезаписывает
|
|
157
166
|
> файл, права переставлять не нужно.
|
|
158
167
|
|
|
159
|
-
### Персональный API-ключ
|
|
160
|
-
|
|
161
|
-
Персональный API-ключ выдаётся в админке Толка на конкретного пользователя на
|
|
162
|
-
настраиваемый срок и не зависит от того, открыт ли браузер. Передаётся заголовком
|
|
163
|
-
`X-Auth-Token`, а не в URL — секрет не попадает в query-параметры и логи веб-сервера.
|
|
164
|
-
|
|
165
|
-
Выпускается и ротируется в разделе **Управление → API-ключи** админки Толка (UI-шаг,
|
|
166
|
-
CLI-эквивалента нет; экранные шаги здесь не расписываем — актуальный порядок действий
|
|
167
|
-
смотрите в справке Контура:
|
|
168
|
-
[«Персональный API-ключ доступа в Толке»](https://support.kontur.ru/talk/86797)).
|
|
169
|
-
Значение ключа показывается один раз в течение часа после создания — не скопировали
|
|
170
|
-
вовремя, придётся выпускать новый.
|
|
171
|
-
|
|
172
|
-
**Не путайте с ключом пространства.** В Толке есть второй, отдельный ключ —
|
|
173
|
-
пространственный, с заголовком `X-API-Key`, выдаётся не на пользователя, а на всё
|
|
174
|
-
пространство целиком. `ktalk-cli` работает только с персональным ключом
|
|
175
|
-
(`X-Auth-Token`); ключ пространства не поддерживается — переменная называется
|
|
176
|
-
`KTALK_PERSONAL_API_KEY`, а не `KTALK_API_KEY`, намеренно, чтобы их не перепутать.
|
|
177
|
-
|
|
178
|
-
При выпуске ключа в админке выбираются права (scope). Не хватает прав — запрос вернёт
|
|
179
|
-
403, и по виду это неотличимо от «ключ невалиден», хотя ключ рабочий (подробнее —
|
|
180
|
-
«Диагностика авторизации» ниже).
|
|
181
|
-
|
|
182
|
-
| Право (scope) | Даёт доступ к |
|
|
183
|
-
|---|---|
|
|
184
|
-
| `application.recording.read` | Список записей, детали, транскрипт, саммари, скачивание файла, участники |
|
|
185
|
-
| `application.reporting.read` | Архив встреч, чат встречи, отчёты по участникам |
|
|
186
|
-
| `application.applications.read` | Опционально. Без него `ktalk auth-status` не покажет состав прав и срок действия ключа — только «ключ живой / не живой» |
|
|
187
|
-
|
|
188
|
-
> **Если реестр `ktalk` уже накопил записи в session-режиме,** перед первым `ktalk sync`
|
|
189
|
-
> после переключения на персональный ключ обязательно выполните `ktalk sync --dry-run`.
|
|
190
|
-
> Внутренний и официальный контуры API отдают идентификаторы записей по-разному, и без
|
|
191
|
-
> сверки первый боевой sync под ключом рискует задвоить весь реестр. Команда только
|
|
192
|
-
> сверяет id и ничего не пишет — см. таблицу команд реестра ниже.
|
|
193
|
-
|
|
194
168
|
### Переменные окружения
|
|
195
169
|
|
|
196
170
|
```bash
|
|
197
|
-
export KTALK_PERSONAL_API_KEY="ваш_персональный_api_ключ"
|
|
198
|
-
# или
|
|
199
171
|
export KTALK_SESSION_TOKEN="ваш_session_token"
|
|
200
172
|
export KTALK_BASE_URL="https://your-domain.ktalk.ru"
|
|
201
173
|
```
|
|
202
174
|
|
|
203
|
-
|
|
204
|
-
|
|
175
|
+
Переменная не обязательна: без неё читается файл `~/.config/ktalk-mcp/token`
|
|
176
|
+
(см. «Session token»).
|
|
205
177
|
|
|
206
178
|
Также поддерживается файл `.env` в рабочей директории:
|
|
207
179
|
|
|
208
180
|
```env
|
|
209
|
-
|
|
181
|
+
KTALK_SESSION_TOKEN=ваш_session_token
|
|
210
182
|
KTALK_BASE_URL=https://your-domain.ktalk.ru
|
|
211
183
|
```
|
|
212
184
|
|
|
@@ -221,16 +193,17 @@ ktalk auth-status
|
|
|
221
193
|
Диагностика различает два случая, которые снаружи выглядят одинаково — просто ошибка, —
|
|
222
194
|
но чинятся по-разному:
|
|
223
195
|
|
|
224
|
-
- **401** —
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
196
|
+
- **401** — токен невалиден либо истёк. Обновите его: `ktalk token set -` (или
|
|
197
|
+
переменную `KTALK_SESSION_TOKEN`, если она задана).
|
|
198
|
+
- **403** — токен рабочий, но у текущей сессии нет прав на эту операцию.
|
|
199
|
+
Перевыпускать токен не нужно.
|
|
228
200
|
|
|
229
|
-
У session token понятия scope нет — диагностика
|
|
230
|
-
|
|
201
|
+
У session token понятия scope и срока действия нет — диагностика выполняет реальный
|
|
202
|
+
пробный запрос (список записей), а не имитацию без сети.
|
|
231
203
|
|
|
232
|
-
|
|
233
|
-
|
|
204
|
+
`--json`-ответ — `{"alive": bool, "note": str | None}`. Отказ пробного запроса виден
|
|
205
|
+
по обоим каналам сразу: поле `alive: false` в теле ответа И ненулевой код возврата
|
|
206
|
+
процесса — полагаться только на один из двух нельзя.
|
|
234
207
|
|
|
235
208
|
## Команды чтения записей и справочников
|
|
236
209
|
|
|
@@ -255,10 +228,10 @@ ktalk auth-status
|
|
|
255
228
|
| `ktalk get-summary-type <recording_key> --type shortSummary\|protocol` | Саммари одного типа. |
|
|
256
229
|
| `ktalk get-participants <recording_key>` | Полный состав участников, включая анонимных — обходит лимит в 6, который отдают `get-recording`/`list-recordings`. |
|
|
257
230
|
| `ktalk download-recording <recording_key> --target PATH [--quality Q]` | Скачивает видеофайл потоково, без буферизации в памяти. Существующий файл не перезаписывается; `--quality` не указано — берётся дефолт для записи (например `900p`). |
|
|
258
|
-
| `ktalk list-archive --from ISO --to ISO [--room-name N]` | Архив встреч за период.
|
|
259
|
-
| `ktalk get-chat-messages [--recording-key K \| --conference-key K] [--channel C]` | Сообщения чата встречи; один из двух ключей обязателен.
|
|
260
|
-
| `ktalk get-room <room_name>` | Конфигурация комнаты — политики аудио/видео/демонстрации, модераторы, SIP, чат, маскирование.
|
|
261
|
-
| `ktalk list-calendar --start ISO --end ISO [--room-name N]` | Встречи за окно дат, видимые активной авторизации — это не «ваш личный календарь», а всё, что видит текущая авторизация, включая чужие встречи.
|
|
231
|
+
| `ktalk list-archive --from ISO --to ISO [--room-name N]` | Архив встреч за период. **Недоступна** — архив никогда не имел рабочего пути под session token; команда отказывает до сети с явным сообщением на каждый вызов (ADR-025). |
|
|
232
|
+
| `ktalk get-chat-messages [--recording-key K \| --conference-key K] [--channel C]` | Сообщения чата встречи; один из двух ключей обязателен. Канал не указан — определяется автоматически. |
|
|
233
|
+
| `ktalk get-room <room_name>` | Конфигурация комнаты — политики аудио/видео/демонстрации, модераторы, SIP, чат, маскирование. **Побочный эффект:** если комнаты с таким именем ещё нет, она создаётся. |
|
|
234
|
+
| `ktalk list-calendar --start ISO --end ISO [--room-name N]` | Встречи за окно дат, видимые активной авторизации — это не «ваш личный календарь», а всё, что видит текущая авторизация, включая чужие встречи. Сервер лимитирует один запрос семью днями и сотней встреч на сегмент — команда сама режет произвольное окно на сегменты; при упоре в потолок ответ предупреждает о возможно неполной выдаче. |
|
|
262
235
|
|
|
263
236
|
## Планирование встречи
|
|
264
237
|
|
|
@@ -271,8 +244,8 @@ ktalk auth-status
|
|
|
271
244
|
перед отправкой печатает предпросмотр и требует набрать слово `да`.
|
|
272
245
|
- Предпросмотр без создания — `ktalk create-meeting-preview`, не делает ни
|
|
273
246
|
одного сетевого запроса.
|
|
274
|
-
- Обе команды
|
|
275
|
-
|
|
247
|
+
- Обе команды используют session token — единственный оставшийся режим
|
|
248
|
+
авторизации (ADR-025).
|
|
276
249
|
|
|
277
250
|
**Ни одно поле не имеет значения по умолчанию** (кроме описания встречи — пустая
|
|
278
251
|
строка, если не задано). Тема, начало, конец, часовой пояс, комната, участники,
|
|
@@ -326,33 +299,22 @@ ktalk create-meeting-confirm \
|
|
|
326
299
|
|
|
327
300
|
## API
|
|
328
301
|
|
|
329
|
-
CLI работает с KTalk Web API
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
- **Session-режим** — авторизация query-параметром `sessionToken`, используется
|
|
333
|
-
внутренний контур API.
|
|
334
|
-
- **Режим персонального ключа** — авторизация заголовком `X-Auth-Token`, используются
|
|
335
|
-
официальные пути интеграторского API (`talk.public.api-api-2.json`).
|
|
336
|
-
|
|
337
|
-
Транскрипт и саммари используют один и тот же путь в обоих режимах:
|
|
302
|
+
CLI работает с KTalk Web API через единственный (session token) режим авторизации
|
|
303
|
+
(см. «Авторизация» выше) — query-параметр `sessionToken`, внутренний недокументированный
|
|
304
|
+
контур API:
|
|
338
305
|
|
|
339
306
|
| Эндпоинт | Описание |
|
|
340
307
|
|----------|----------|
|
|
308
|
+
| `GET /api/recordings` | Список записей |
|
|
309
|
+
| `GET /api/recordings/{id}` | Детали записи |
|
|
341
310
|
| `GET /api/recordings/{id}/transcript` | Транскрипт |
|
|
342
311
|
| `GET /api/recordings/v2/{id}/summary` | Полное саммари (v2) |
|
|
343
312
|
| `GET /api/recordings/{id}/summary/{type}` | Саммари по типу |
|
|
344
313
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
доступны только в режиме персонального ключа (нужные права — в таблице раздела
|
|
348
|
-
«Персональный API-ключ» выше).
|
|
349
|
-
|
|
350
|
-
Комната, календарь и создание встречи работают только в режиме session token — в
|
|
351
|
-
режиме персонального ключа эти операции отказывают осознанно, а не по случайному
|
|
352
|
-
пробелу: путь на api-key либо не подтверждён вовсе, либо ведёт себя необъяснимо
|
|
353
|
-
непоследовательно при проверке.
|
|
314
|
+
Архив встреч (`list-archive`) недоступен: под session token у него нет и никогда не
|
|
315
|
+
было рабочего пути (ADR-025) — команда отказывает до сети с явным сообщением.
|
|
354
316
|
|
|
355
|
-
> OpenAPI спецификация `talk.public.api-api-2.json` включена как справочник, но содержит расхождения с реальным API (пути, формат авторизации, структура ответов).
|
|
317
|
+
> OpenAPI спецификация `talk.public.api-api-2.json` включена как справочник, но содержит расхождения с реальным API (пути, формат авторизации, структура ответов). Пути, достижимые только под снятым режимом персонального ключа (`X-Auth-Token`), больше не применимы к этому CLI.
|
|
356
318
|
|
|
357
319
|
## Реестр записей (`ktalk`)
|
|
358
320
|
|
|
@@ -375,10 +337,10 @@ CLI работает с KTalk Web API. Набор путей, которые в
|
|
|
375
337
|
|
|
376
338
|
| Команда | Назначение |
|
|
377
339
|
|---|---|
|
|
378
|
-
| `ktalk sync [--days 7] [--json] [--dry-run]` | Загрузить записи из KTalk, upsert новых (`new`), экспирировать `new` старше N дней → `skipped`, показать дашборд. Идемпотентно. `--dry-run` — сверить id с реестром без записи, ничего не
|
|
340
|
+
| `ktalk sync [--days 7] [--json] [--dry-run]` | Загрузить записи из KTalk, upsert новых (`new`), экспирировать `new` старше N дней → `skipped`, показать дашборд. Идемпотентно. `--dry-run` — сверить id с реестром без записи, ничего не пишет. |
|
|
379
341
|
| `ktalk token set <значение\|->` | Записать session-токен в `~/.config/ktalk-mcp/token` (`0600`). `-` — прочитать из stdin: `pbpaste \| ktalk token set -`. Значение не печатается. |
|
|
380
342
|
| `ktalk token status [--json]` | Есть ли файл токена, его права и маска значения. |
|
|
381
|
-
| `ktalk auth-status [--json]` | Диагностика активной авторизации — жив ли
|
|
343
|
+
| `ktalk auth-status [--json]` | Диагностика активной авторизации — жив ли токен. См. «Диагностика авторизации». |
|
|
382
344
|
| `ktalk dashboard [--json]` | Дашборд: новые записи, статистика по статусам. |
|
|
383
345
|
| `ktalk list [--status S] [--json]` | Список записей с фильтром по статусу. |
|
|
384
346
|
| `ktalk show <id> [--json]` | Детали записи: участники, статус, пути, длительность. |
|
|
@@ -406,7 +368,7 @@ uv run pytest -v
|
|
|
406
368
|
# Линтинг
|
|
407
369
|
uv run ruff check .
|
|
408
370
|
|
|
409
|
-
# Локальный запуск CLI (session token
|
|
371
|
+
# Локальный запуск CLI (session token — см. «Авторизация»)
|
|
410
372
|
KTALK_SESSION_TOKEN=... KTALK_BASE_URL=... uv run ktalk auth-status
|
|
411
373
|
```
|
|
412
374
|
|
|
@@ -22,11 +22,11 @@ CLI `ktalk` — интерфейс командной строки для тех
|
|
|
22
22
|
- Саммари и протоколы встреч.
|
|
23
23
|
- Полный состав участников записи (обходит лимит в 6 из списковых ответов).
|
|
24
24
|
- Скачивание видеофайла записи.
|
|
25
|
-
-
|
|
26
|
-
- Конфигурацию комнаты и календарь запланированных
|
|
25
|
+
- Историю чата встречи.
|
|
26
|
+
- Конфигурацию комнаты и календарь запланированных встреч.
|
|
27
27
|
- Предпросмотр и создание новой встречи — создание требует интерактивного
|
|
28
28
|
терминала и явного подтверждения, см. «Планирование встречи» ниже.
|
|
29
|
-
- Диагностику авторизации —
|
|
29
|
+
- Диагностику авторизации — жив ли токен и почему запрос не проходит.
|
|
30
30
|
- Операционный реестр обработки записей на SQLite — синхронизация, статусы,
|
|
31
31
|
markdown-зеркало для git, см. «Реестр записей» ниже.
|
|
32
32
|
|
|
@@ -67,20 +67,27 @@ uv tool upgrade ktalk-cli
|
|
|
67
67
|
|
|
68
68
|
## Авторизация
|
|
69
69
|
|
|
70
|
-
CLI
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
**С версии 3.0.0 CLI работает только через session token** (кука браузера) — режим
|
|
71
|
+
персонального API-ключа (`KTALK_PERSONAL_API_KEY`) снят целиком (ADR-025): он
|
|
72
|
+
конкурировал с сессией молча (при обеих заданных переменных побеждал ключ без
|
|
73
|
+
объяснения в тексте отказа) и диагностика `auth-status` объявляла заведомо
|
|
74
|
+
невалидный ключ «валидным» на 403.
|
|
74
75
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
**Цена снятия для тех, кто держал постоянный ключ:** персональный ключ не протухал
|
|
77
|
+
без предупреждения, session token — протухает. Постоянная работа теперь требует
|
|
78
|
+
ручного обновления токена по мере его протухания (`ktalk token set -`, см. ниже) —
|
|
79
|
+
это не восстанавливается автоматически снятием ключа.
|
|
80
|
+
|
|
81
|
+
Переменная `KTALK_PERSONAL_API_KEY`, если она всё ещё задана в окружении, не
|
|
82
|
+
читается как credential ни на одном шаге — CLI печатает об этом одно предупреждение
|
|
83
|
+
на stderr при каждом вызове и продолжает работу на сессионном токене.
|
|
78
84
|
|
|
79
85
|
### Session token
|
|
80
86
|
|
|
81
|
-
Session token — токен вашей браузерной сессии Толка.
|
|
82
|
-
|
|
83
|
-
|
|
87
|
+
Session token — токен вашей браузерной сессии Толка. Единственный поддерживаемый
|
|
88
|
+
источник credential (ADR-025). Живёт недолго и протухает без предупреждения — при
|
|
89
|
+
регулярной работе повторяйте те же два шага ниже, когда команда начнёт отказывать
|
|
90
|
+
кодом авторизации.
|
|
84
91
|
|
|
85
92
|
**Два шага.** На вкладке, где вы залогинены в `https://your-domain.ktalk.ru`, откройте
|
|
86
93
|
DevTools (`F12`, или `Cmd+Option+I` на Mac) → **Console** и выполните:
|
|
@@ -110,9 +117,11 @@ ktalk auth-status # жива ли авторизация — реальны
|
|
|
110
117
|
|
|
111
118
|
| # | Источник | Комментарий |
|
|
112
119
|
|---|---|---|
|
|
113
|
-
| 1 | `
|
|
114
|
-
| 2 | `
|
|
115
|
-
|
|
120
|
+
| 1 | `KTALK_SESSION_TOKEN` (окружение или `.env` в рабочей директории) | заданное явно сильнее лежащего на диске |
|
|
121
|
+
| 2 | `~/.config/ktalk-mcp/token` | дефолтный путь для повседневной работы |
|
|
122
|
+
|
|
123
|
+
Ни один запрос не несёт заголовок `X-Auth-Token` — единственный транспорт credential
|
|
124
|
+
теперь query-параметр `sessionToken`.
|
|
116
125
|
|
|
117
126
|
> Путь `~/.config/ktalk-mcp/token` не переименован вместе с пакетом и остаётся
|
|
118
127
|
> таким намеренно: он выбран независимо от имени дистрибутива (каталог
|
|
@@ -133,57 +142,20 @@ ktalk auth-status # жива ли авторизация — реальны
|
|
|
133
142
|
> ошибку авторизации, повторите те же два шага — `ktalk token set -` перезаписывает
|
|
134
143
|
> файл, права переставлять не нужно.
|
|
135
144
|
|
|
136
|
-
### Персональный API-ключ
|
|
137
|
-
|
|
138
|
-
Персональный API-ключ выдаётся в админке Толка на конкретного пользователя на
|
|
139
|
-
настраиваемый срок и не зависит от того, открыт ли браузер. Передаётся заголовком
|
|
140
|
-
`X-Auth-Token`, а не в URL — секрет не попадает в query-параметры и логи веб-сервера.
|
|
141
|
-
|
|
142
|
-
Выпускается и ротируется в разделе **Управление → API-ключи** админки Толка (UI-шаг,
|
|
143
|
-
CLI-эквивалента нет; экранные шаги здесь не расписываем — актуальный порядок действий
|
|
144
|
-
смотрите в справке Контура:
|
|
145
|
-
[«Персональный API-ключ доступа в Толке»](https://support.kontur.ru/talk/86797)).
|
|
146
|
-
Значение ключа показывается один раз в течение часа после создания — не скопировали
|
|
147
|
-
вовремя, придётся выпускать новый.
|
|
148
|
-
|
|
149
|
-
**Не путайте с ключом пространства.** В Толке есть второй, отдельный ключ —
|
|
150
|
-
пространственный, с заголовком `X-API-Key`, выдаётся не на пользователя, а на всё
|
|
151
|
-
пространство целиком. `ktalk-cli` работает только с персональным ключом
|
|
152
|
-
(`X-Auth-Token`); ключ пространства не поддерживается — переменная называется
|
|
153
|
-
`KTALK_PERSONAL_API_KEY`, а не `KTALK_API_KEY`, намеренно, чтобы их не перепутать.
|
|
154
|
-
|
|
155
|
-
При выпуске ключа в админке выбираются права (scope). Не хватает прав — запрос вернёт
|
|
156
|
-
403, и по виду это неотличимо от «ключ невалиден», хотя ключ рабочий (подробнее —
|
|
157
|
-
«Диагностика авторизации» ниже).
|
|
158
|
-
|
|
159
|
-
| Право (scope) | Даёт доступ к |
|
|
160
|
-
|---|---|
|
|
161
|
-
| `application.recording.read` | Список записей, детали, транскрипт, саммари, скачивание файла, участники |
|
|
162
|
-
| `application.reporting.read` | Архив встреч, чат встречи, отчёты по участникам |
|
|
163
|
-
| `application.applications.read` | Опционально. Без него `ktalk auth-status` не покажет состав прав и срок действия ключа — только «ключ живой / не живой» |
|
|
164
|
-
|
|
165
|
-
> **Если реестр `ktalk` уже накопил записи в session-режиме,** перед первым `ktalk sync`
|
|
166
|
-
> после переключения на персональный ключ обязательно выполните `ktalk sync --dry-run`.
|
|
167
|
-
> Внутренний и официальный контуры API отдают идентификаторы записей по-разному, и без
|
|
168
|
-
> сверки первый боевой sync под ключом рискует задвоить весь реестр. Команда только
|
|
169
|
-
> сверяет id и ничего не пишет — см. таблицу команд реестра ниже.
|
|
170
|
-
|
|
171
145
|
### Переменные окружения
|
|
172
146
|
|
|
173
147
|
```bash
|
|
174
|
-
export KTALK_PERSONAL_API_KEY="ваш_персональный_api_ключ"
|
|
175
|
-
# или
|
|
176
148
|
export KTALK_SESSION_TOKEN="ваш_session_token"
|
|
177
149
|
export KTALK_BASE_URL="https://your-domain.ktalk.ru"
|
|
178
150
|
```
|
|
179
151
|
|
|
180
|
-
|
|
181
|
-
|
|
152
|
+
Переменная не обязательна: без неё читается файл `~/.config/ktalk-mcp/token`
|
|
153
|
+
(см. «Session token»).
|
|
182
154
|
|
|
183
155
|
Также поддерживается файл `.env` в рабочей директории:
|
|
184
156
|
|
|
185
157
|
```env
|
|
186
|
-
|
|
158
|
+
KTALK_SESSION_TOKEN=ваш_session_token
|
|
187
159
|
KTALK_BASE_URL=https://your-domain.ktalk.ru
|
|
188
160
|
```
|
|
189
161
|
|
|
@@ -198,16 +170,17 @@ ktalk auth-status
|
|
|
198
170
|
Диагностика различает два случая, которые снаружи выглядят одинаково — просто ошибка, —
|
|
199
171
|
но чинятся по-разному:
|
|
200
172
|
|
|
201
|
-
- **401** —
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
173
|
+
- **401** — токен невалиден либо истёк. Обновите его: `ktalk token set -` (или
|
|
174
|
+
переменную `KTALK_SESSION_TOKEN`, если она задана).
|
|
175
|
+
- **403** — токен рабочий, но у текущей сессии нет прав на эту операцию.
|
|
176
|
+
Перевыпускать токен не нужно.
|
|
205
177
|
|
|
206
|
-
У session token понятия scope нет — диагностика
|
|
207
|
-
|
|
178
|
+
У session token понятия scope и срока действия нет — диагностика выполняет реальный
|
|
179
|
+
пробный запрос (список записей), а не имитацию без сети.
|
|
208
180
|
|
|
209
|
-
|
|
210
|
-
|
|
181
|
+
`--json`-ответ — `{"alive": bool, "note": str | None}`. Отказ пробного запроса виден
|
|
182
|
+
по обоим каналам сразу: поле `alive: false` в теле ответа И ненулевой код возврата
|
|
183
|
+
процесса — полагаться только на один из двух нельзя.
|
|
211
184
|
|
|
212
185
|
## Команды чтения записей и справочников
|
|
213
186
|
|
|
@@ -232,10 +205,10 @@ ktalk auth-status
|
|
|
232
205
|
| `ktalk get-summary-type <recording_key> --type shortSummary\|protocol` | Саммари одного типа. |
|
|
233
206
|
| `ktalk get-participants <recording_key>` | Полный состав участников, включая анонимных — обходит лимит в 6, который отдают `get-recording`/`list-recordings`. |
|
|
234
207
|
| `ktalk download-recording <recording_key> --target PATH [--quality Q]` | Скачивает видеофайл потоково, без буферизации в памяти. Существующий файл не перезаписывается; `--quality` не указано — берётся дефолт для записи (например `900p`). |
|
|
235
|
-
| `ktalk list-archive --from ISO --to ISO [--room-name N]` | Архив встреч за период.
|
|
236
|
-
| `ktalk get-chat-messages [--recording-key K \| --conference-key K] [--channel C]` | Сообщения чата встречи; один из двух ключей обязателен.
|
|
237
|
-
| `ktalk get-room <room_name>` | Конфигурация комнаты — политики аудио/видео/демонстрации, модераторы, SIP, чат, маскирование.
|
|
238
|
-
| `ktalk list-calendar --start ISO --end ISO [--room-name N]` | Встречи за окно дат, видимые активной авторизации — это не «ваш личный календарь», а всё, что видит текущая авторизация, включая чужие встречи.
|
|
208
|
+
| `ktalk list-archive --from ISO --to ISO [--room-name N]` | Архив встреч за период. **Недоступна** — архив никогда не имел рабочего пути под session token; команда отказывает до сети с явным сообщением на каждый вызов (ADR-025). |
|
|
209
|
+
| `ktalk get-chat-messages [--recording-key K \| --conference-key K] [--channel C]` | Сообщения чата встречи; один из двух ключей обязателен. Канал не указан — определяется автоматически. |
|
|
210
|
+
| `ktalk get-room <room_name>` | Конфигурация комнаты — политики аудио/видео/демонстрации, модераторы, SIP, чат, маскирование. **Побочный эффект:** если комнаты с таким именем ещё нет, она создаётся. |
|
|
211
|
+
| `ktalk list-calendar --start ISO --end ISO [--room-name N]` | Встречи за окно дат, видимые активной авторизации — это не «ваш личный календарь», а всё, что видит текущая авторизация, включая чужие встречи. Сервер лимитирует один запрос семью днями и сотней встреч на сегмент — команда сама режет произвольное окно на сегменты; при упоре в потолок ответ предупреждает о возможно неполной выдаче. |
|
|
239
212
|
|
|
240
213
|
## Планирование встречи
|
|
241
214
|
|
|
@@ -248,8 +221,8 @@ ktalk auth-status
|
|
|
248
221
|
перед отправкой печатает предпросмотр и требует набрать слово `да`.
|
|
249
222
|
- Предпросмотр без создания — `ktalk create-meeting-preview`, не делает ни
|
|
250
223
|
одного сетевого запроса.
|
|
251
|
-
- Обе команды
|
|
252
|
-
|
|
224
|
+
- Обе команды используют session token — единственный оставшийся режим
|
|
225
|
+
авторизации (ADR-025).
|
|
253
226
|
|
|
254
227
|
**Ни одно поле не имеет значения по умолчанию** (кроме описания встречи — пустая
|
|
255
228
|
строка, если не задано). Тема, начало, конец, часовой пояс, комната, участники,
|
|
@@ -303,33 +276,22 @@ ktalk create-meeting-confirm \
|
|
|
303
276
|
|
|
304
277
|
## API
|
|
305
278
|
|
|
306
|
-
CLI работает с KTalk Web API
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
- **Session-режим** — авторизация query-параметром `sessionToken`, используется
|
|
310
|
-
внутренний контур API.
|
|
311
|
-
- **Режим персонального ключа** — авторизация заголовком `X-Auth-Token`, используются
|
|
312
|
-
официальные пути интеграторского API (`talk.public.api-api-2.json`).
|
|
313
|
-
|
|
314
|
-
Транскрипт и саммари используют один и тот же путь в обоих режимах:
|
|
279
|
+
CLI работает с KTalk Web API через единственный (session token) режим авторизации
|
|
280
|
+
(см. «Авторизация» выше) — query-параметр `sessionToken`, внутренний недокументированный
|
|
281
|
+
контур API:
|
|
315
282
|
|
|
316
283
|
| Эндпоинт | Описание |
|
|
317
284
|
|----------|----------|
|
|
285
|
+
| `GET /api/recordings` | Список записей |
|
|
286
|
+
| `GET /api/recordings/{id}` | Детали записи |
|
|
318
287
|
| `GET /api/recordings/{id}/transcript` | Транскрипт |
|
|
319
288
|
| `GET /api/recordings/v2/{id}/summary` | Полное саммари (v2) |
|
|
320
289
|
| `GET /api/recordings/{id}/summary/{type}` | Саммари по типу |
|
|
321
290
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
доступны только в режиме персонального ключа (нужные права — в таблице раздела
|
|
325
|
-
«Персональный API-ключ» выше).
|
|
326
|
-
|
|
327
|
-
Комната, календарь и создание встречи работают только в режиме session token — в
|
|
328
|
-
режиме персонального ключа эти операции отказывают осознанно, а не по случайному
|
|
329
|
-
пробелу: путь на api-key либо не подтверждён вовсе, либо ведёт себя необъяснимо
|
|
330
|
-
непоследовательно при проверке.
|
|
291
|
+
Архив встреч (`list-archive`) недоступен: под session token у него нет и никогда не
|
|
292
|
+
было рабочего пути (ADR-025) — команда отказывает до сети с явным сообщением.
|
|
331
293
|
|
|
332
|
-
> OpenAPI спецификация `talk.public.api-api-2.json` включена как справочник, но содержит расхождения с реальным API (пути, формат авторизации, структура ответов).
|
|
294
|
+
> OpenAPI спецификация `talk.public.api-api-2.json` включена как справочник, но содержит расхождения с реальным API (пути, формат авторизации, структура ответов). Пути, достижимые только под снятым режимом персонального ключа (`X-Auth-Token`), больше не применимы к этому CLI.
|
|
333
295
|
|
|
334
296
|
## Реестр записей (`ktalk`)
|
|
335
297
|
|
|
@@ -352,10 +314,10 @@ CLI работает с KTalk Web API. Набор путей, которые в
|
|
|
352
314
|
|
|
353
315
|
| Команда | Назначение |
|
|
354
316
|
|---|---|
|
|
355
|
-
| `ktalk sync [--days 7] [--json] [--dry-run]` | Загрузить записи из KTalk, upsert новых (`new`), экспирировать `new` старше N дней → `skipped`, показать дашборд. Идемпотентно. `--dry-run` — сверить id с реестром без записи, ничего не
|
|
317
|
+
| `ktalk sync [--days 7] [--json] [--dry-run]` | Загрузить записи из KTalk, upsert новых (`new`), экспирировать `new` старше N дней → `skipped`, показать дашборд. Идемпотентно. `--dry-run` — сверить id с реестром без записи, ничего не пишет. |
|
|
356
318
|
| `ktalk token set <значение\|->` | Записать session-токен в `~/.config/ktalk-mcp/token` (`0600`). `-` — прочитать из stdin: `pbpaste \| ktalk token set -`. Значение не печатается. |
|
|
357
319
|
| `ktalk token status [--json]` | Есть ли файл токена, его права и маска значения. |
|
|
358
|
-
| `ktalk auth-status [--json]` | Диагностика активной авторизации — жив ли
|
|
320
|
+
| `ktalk auth-status [--json]` | Диагностика активной авторизации — жив ли токен. См. «Диагностика авторизации». |
|
|
359
321
|
| `ktalk dashboard [--json]` | Дашборд: новые записи, статистика по статусам. |
|
|
360
322
|
| `ktalk list [--status S] [--json]` | Список записей с фильтром по статусу. |
|
|
361
323
|
| `ktalk show <id> [--json]` | Детали записи: участники, статус, пути, длительность. |
|
|
@@ -383,7 +345,7 @@ uv run pytest -v
|
|
|
383
345
|
# Линтинг
|
|
384
346
|
uv run ruff check .
|
|
385
347
|
|
|
386
|
-
# Локальный запуск CLI (session token
|
|
348
|
+
# Локальный запуск CLI (session token — см. «Авторизация»)
|
|
387
349
|
KTALK_SESSION_TOKEN=... KTALK_BASE_URL=... uv run ktalk auth-status
|
|
388
350
|
```
|
|
389
351
|
|