simbiot-harness/artifacts/shkor
2026-10-05 15:05:55 +00:00
..
assistant.py Alipay-ватчер: поллинг capability Stripe до аппрува, автолинк $100 card+alipay (e-261005142309) 2026-10-05 15:05:55 +00:00
catalog.json Alipay-ватчер: поллинг capability Stripe до аппрува, автолинк $100 card+alipay (e-261005142309) 2026-10-05 15:05:55 +00:00
connector.py Alipay-ватчер: поллинг capability Stripe до аппрува, автолинк $100 card+alipay (e-261005142309) 2026-10-05 15:05:55 +00:00
README.md Alipay-ватчер: поллинг capability Stripe до аппрува, автолинк $100 card+alipay (e-261005142309) 2026-10-05 15:05:55 +00:00

Shkor Beauty Assistant

Beauty-ассистент магазина Shkor beauty: анализирует состояние кожи, подбирает продукты из каталога витрины, оформляет заказ с доставкой и выдаёт инструкции по применению. Подключается к любому агенту (LLM-бот, MCP-клиент, крон-скрипт, мобильное приложение).

Задача-источник: t-261005120225-672f52 (требования Alex). Каталог синхронизирован с прототипом витрины ../shkor-beauty-prototype.html (t-261005115918-d38b36).

Состав

Файл Что это
assistant.py Ядро: анализ кожи, рекомендации, заказы, инструкции. Один вход handle(request) -> dict
connector.py Универсальный коннектор: STDIO (MCP-стиль), HTTP API, CLI, демо-чат
catalog.json 12 товаров витрины с мета-данными (concerns, actives, routine_step)
orders.json Локальный леджер заказов (создаётся при первом заказе)

Подключение любым агентом

1) STDIO, MCP-стиль — для Claude/любого MCP-клиента:

{"mcpServers": {"shkor": {"command": "python3", "args": ["/root/simbiot-harness/artifacts/shkor/connector.py"], "transport": "stdio"}}}

Протокол: построчный JSONL. {"method":"tools/list"} → список инструментов; {"method":"tools/call","params":{"name":"analyze_skin","arguments":{...}},"id":1} → результат.

2) HTTP API — агент = любой HTTP-клиент:

connector.py --http 127.0.0.1:8791
curl -XPOST localhost:8791/call -d '{"name":"recommend","arguments":{"concerns":["dryness"]}}'

Роуты: GET /health, POST /tools/list, POST /call.

3) CLI разовый вызов — крон/скрипты:

connector.py --call analyze_skin --args '{"self_report":"стянутость и покраснения"}'

4) Живая проверка: connector.py --demo — полный сценарий: анализ → подбор → заказ → инструкция → статус.

Инструменты (7)

  • analyze_skin {self_report?, symptoms?, photo_report?} → тип кожи, concerns, hydration-индекс, состояние барьера, фокус рутины. photo_report — принимаем отчёт vision-агента по селфи (JSON или текст): мержим с самоотчётом, источники считаем отдельно.
  • recommend {concerns?, skin_type?, budget_max?} → подобранные карточки с объяснением «почему».
  • search {query?, category?} → поиск по каталогу (бренд/название/актив/категория).
  • place_order {items:[{id,qty}], delivery?, name?, phone?, address?, pay_method?, pay_link?} → заказ SB-XXXXXXXX, сумма, доставка. Платёж: cash_on_delivery или pay_link от платёжного агента (Stripe/Альфа-Банк) — ассистент не хранит карты.
  • check_order {order_id} → статус заказа и доставки.
  • delivery_options {cart_total?} → курьер Минск / Европочта / самовывоз, бесплатно от 80 BYN.
  • usage_instructions {product_ids} → пошаговые инструкции, порядок нанесения, предостережения (ретинол только на ночь и не в один день с кислотами, SPF обязателен).

Пример потока агента

1. analyze_skin {"self_report": "кожа стянутая, лоб блестит, покраснения"}
   → {"skin_type":"combination","concerns":["dryness","redness","oiliness"],"barrier":"compromised",...}
2. recommend {"concerns":["dryness","redness"], "skin_type":"sensitive"}
   → пэды JMsolution, тонер Anua Centella 77%, сыворотка SKIN627
3. place_order {"items":[{"id":"p05","qty":1},{"id":"p03","qty":1}],"delivery":"minsk_courier"}
   → SB-XXXXXXXX, 111.0 BYN, доставка бесплатно (корзина ≥80), курьер сегодня/завтра
4. usage_instructions {"product_ids":["p05","p03"]}
   → тонер (шаг 2) → SPF (шаг 7), предупреждения
5. check_order {"order_id":"SB-XXXXXXXX"}

Границы (честно)

  • Анализ — эвристический (словарь стеммов RU/EN + голосование по типу), НЕ постановка диагноза; в каждом ответе дисклеймер «не медицинская консультация».
  • Оплата — заглушка pending: реальный эквайринг подключает агент-хост через pay_link (см. задачу по методам оплаты портала).
  • Каталог = витрина-прототип (12 SKU). При росте — заменить catalog.json без правок кода.

Запуск тестов: python3 connector.py --demo (создаёт тестовый заказ в orders.json).