# ONEOK Open-Source Stack (Clean Variant)

## Фактичний clean-стек (впроваджено)

Поточна платформа працює як `Python + Docker + Router ToolManager`.
Для `1OK` у clean-варіанті зафіксовано:

1. `EspoCRM + MariaDB` як окремий CRM-контур агента.
2. `oneok-crm-adapter` як інструментальний API-шар (`crm_*`), ізоляція даних від інших агентів.
3. `oneok-calc-adapter` як доменний калькулятор (`calc_window_quote`).
4. `Gotenberg + oneok-docs-adapter` для PDF (`docs_render_quote_pdf`, `docs_render_invoice_pdf`).
5. `oneok-schedule-adapter` для слотів заміру/монтажу (`Europe/Kyiv`).
6. `Qdrant` використовується через наявний router-memory контур.

## Що впроваджено в router

1. Додано спеціалізовані 1OK tools у `router`:
   - `crm_search_client`, `crm_upsert_client`, `crm_upsert_site`, `crm_upsert_window_unit`
   - `crm_create_quote`, `crm_update_quote`, `crm_create_job`
   - `calc_window_quote`
   - `docs_render_quote_pdf`, `docs_render_invoice_pdf`
   - `schedule_propose_slots`, `schedule_confirm_slot`
2. Додано HTTP adapter layer у `ToolManager`.
3. Додано env endpoint-и:
   - `ONEOK_CRM_BASE_URL`
   - `ONEOK_CALC_BASE_URL`
   - `ONEOK_DOCS_BASE_URL`
   - `ONEOK_SCHEDULE_BASE_URL`

4. Додано ітеративний multi-step tool-calling у `router` (до `ROUTER_TOOL_MAX_ROUNDS`, дефолт `10`).
5. Додано auto-repair аргументів для `oneok` (наприклад, `windows -> window_units`, auto-fill `quote_payload`).

## Download links (reference)

### CRM
- https://github.com/espocrm/espocrm
- https://github.com/espocrm/espocrm-installer
- https://github.com/SuiteCRM/SuiteCRM

### Калькулятори/оцінка
- https://github.com/ath31st/window_calculator
- https://github.com/ErdincAltuntas/window-estimator

### PDF/документи
- https://github.com/gotenberg/gotenberg
- https://github.com/InvoicePlane/InvoicePlane

### Пам'ять/RAG
- https://github.com/qdrant/qdrant

## Рекомендований rollout (безпечний)

1. `Phase 1`: підняти `EspoCRM + Gotenberg + oneok-* adapters`.
2. `Phase 2`: увімкнути `router` tools для `oneok` і перевірити E2E (`crm -> calc -> quote -> pdf -> slots`).
3. `Phase 3`: стабілізувати політики Telegram/webhook та доступи whitelist.
4. `Phase 4`: за потреби замінити `oneok-schedule-adapter` на `Cal.com` без зміни tool-контрактів.

## Security baseline

1. Мінімізація PII: не зберігати зайві поля.
2. Маскування секретів у логах.
3. Service-to-service auth для adapter endpoint-ів.
4. Явна позначка `ОЦІНКА` для непідтверджених замірів.
