Skip to content

Latest commit

 

History

47 Commits

Folders and files

Repository files navigation

adoc

Расширяемый CLI-инструмент для взаимодействия с сайтами для заказа автозапчастей, а также неофициальные API-обёртки над autodoc.ru и armtek.ru.

Как расширить? – См. интерфейс провайдера.

$ adoc part n90954802 VAG
n90954802 · VAG · armtek, autodoc

#  ПРОВАЙДЕР  БРЕНД  НАЗВАНИЕ  ЦЕНА   НАЛИЧИЕ  СРОК    ПРОДАВЕЦ  РЕЙТИНГ    ССЫЛКА
1  armtek     VAG    Болт      380 ₽  3 шт     2 дня   armtek    4.5★ (10)  https://armtek.ru/product/…
2  autodoc    VAG    Болт      407 ₽  12 шт    1 день  Москва    4.9★ (56)  https://www.autodoc.ru/man/657/part/n90954802

Вся полученная информация может быть неточной, неполной и устаревшей — см. docs/autodoc-api.md, docs/armtek-api.md.

Что умеет

Список команд и флагов — adoc --help, команды самого сайта — adoc <сайт> --help. Кроме цен по артикулу это поиск по названию под машину гаража, применимость, кросс-номера, отзывы, корзины и заказы всех сайтов сразу:

$ adoc search "опора амортизатора"
$ adoc fits 815010730 FAG

Установка

$ bun install -g github:pashokitsme/adoc
$ gh skill install pashokitsme/adoc adoc

Ставятся три бинаря: adoc — обёртка, adoc-autodoc и adoc-armtek — провайдеры. Обычно нужен только первый.

Ссылки

Адрес страницы печатается везде, где сайт его даёт: последней колонкой ССЫЛКА в самой строке — сводить номер строки со списком под таблицей больше не нужно, а строка, найденная сразу на нескольких сайтах, держит все свои адреса в той же ячейке через пробел. Адреса не режутся: обрезанный адрес не открыть. В терминале, который умеет терминальные ссылки (OSC 8), колонки нет вовсе — адрес вшит в номер, артикул, название и имя сайта. Режим переключает ADOC_LINKS.

Авторизация

$ adoc login autodoc      # диалог в терминале, пароль без эха
$ adoc accounts           # кто авторизован у всех сайтов сразу
$ adoc logout autodoc     # забыть аккаунт

Вход нужен каждому сайту отдельно. Пароль вводится только с терминала и на диск не пишется; токены лежат в ~/.config/adoc/accounts/<id>.json с правами 600. adoc login токенов не печатает — а вот adoc <сайт> login --json печатает аккаунт целиком, и этот вывод нельзя ни логировать, ни пересылать. Имя, email и телефон показываются как есть: это личные данные владельца аккаунта.

Как это устроено

adoc — обёртка, а каждый сайт — отдельная программа, реализующая интерфейс провайдера. Встроенные лежат в src/providers/*/main.ts, чужие — это любые исполняемые файлы adoc-<id> в PATH, на любом языке. Что подключено и что умеет — adoc providers.

Подробности поведения — команды, порядок «артикул → бренд», применимость, кросс-ссылки, корзина и гараж — описаны для агентов в skills/adoc/SKILL.md.

Переменные окружения

переменная кто читает что делает по умолчанию
ADOC_CONFIG_DIR обёртка и все провайдеры каталог настроек: гараж, кэш последней выдачи part, файлы аккаунтов $XDG_CONFIG_HOME/adoc, а без него — ~/.config/adoc
ADOC_PROVIDERS_DIR обёртка берёт провайдеров только из этого каталога (подкаталог с main.ts на провайдера), заменяя и встроенные, и найденные в PATH встроенные + adoc-<id> из PATH
ADOC_LINKS вывод для человека osc8 — адреса терминальными ссылками в тексте, list — колонкой «ССЫЛКА», off — не показывать; см. Ссылки osc8 в TTY знакомого терминала, иначе list
NO_COLOR вывод для человека гасит цвет; на ссылки не влияет цвет включён в TTY
ADOC_DEBUG обёртка и все провайдеры трассировка сети в stderr: «→ метод адрес», «← статус время тело»; токены и пароль не печатаются (то же на один вызов — --verbose, кратко -v) выключена
ADOC_NO_WARN обёртка и все провайдеры гасит предупреждения (то же самое на один вызов — --quiet, кратко -q): жёлтые строки отказов, заметки сайтов, подсказку про клик. Ошибки, выдача и код возврата те же предупреждения печатаются
ARMTEK_PHONE, ARMTEK_PASSWORD провайдер armtek учётка для adoc armtek login без терминала; нужны обе вход спрашивает человека

PATH и XDG_CONFIG_HOME — общесистемные, но обёртка смотрит и в них: в первом ищет провайдеров adoc-<id>, во втором — каталог настроек.

Только для тестов, в обычной работе не нужны:

переменная что делает
ADOC_FIXTURES провайдер autodoc читает записанные ответы из этого каталога вместо сети
ADOC_AUTODOC_BASE адрес API autodoc; принимается только localhost
ADOC_TIMEOUT_MS таймаут HTTP-запроса провайдера autodoc, мс
ARMTEK_FIXTURES маршруты фикстур для test/fixtures/armtek-cli.ts: JSON «кусок пути → файл»
FAKE_<ID>_*, NOISY_STDERR_BYTES ручки фиктивных провайдеров из test/fixtures: задержка, отказ нужным кодом, пустая выдача, отсутствие capability, мусор в stderr

Разработка

$ bun test
$ bun run typecheck

Тесты не ходят в сеть и не трогают настоящий конфиг: ADOC_CONFIG_DIR уводит конфиг во временный каталог, ADOC_PROVIDERS_DIR подменяет весь набор провайдеров фикстурами из test/fixtures/providers, а провайдеры читают записанные ответы вместо сети — autodoc через ADOC_FIXTURES, armtek через подменённый транспорт (test/fixtures/armtek-cli.ts). Все переменные — в разделе Переменные окружения.

$ ADOC_FIXTURES=test/fixtures/autodoc/http adoc autodoc info n90954802

Имя файла фикстуры — метод и путь запроса, где / заменены на _: GET /api/goods-service/goods/info → GET__api_goods-service_goods_info.json.

About

A CLI way to interact with autodoc.ru & armtek.ru to search & order spare parts for your car. Includes agent skill for tool usage

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Contributors

Languages