# AgroMatrix Tools Stack (Stepan) ## Quick start ```bash make up ``` ## Demo telemetry ingest ```bash make seed ``` ## CrewAI (Stepan only) Перед запуском: ```bash export PYTHONPATH="$PWD/packages/agromatrix-tools" ``` ```bash PYTHONPATH="$PWD/packages/agromatrix-tools" python3 crews/agromatrix_crew/run.py "Покажи останні спостереження по вологості ґрунту" ``` ## Spreadsheet demo ```bash python3 scripts/demo_spreadsheet.py ``` ## Notes - Запис у farmOS відбувається тільки через Integration Service. - Під-агенти CrewAI не спілкуються з користувачем напряму. ## Security (P0) - Integration Service accepts writes only with HMAC headers (X-AGX-SIGNATURE, X-AGX-TIMESTAMP, X-AGX-NONCE). - Configure AGX_HMAC_SECRET in env. - farmOS write uses service account (FARMOS_USER/FARMOS_PASSWORD). ## DLQ - Failed writes go to DLQ (Redis stream or /data/dlq.jsonl). - Replay: `make replay-dlq`. ## Audit limits - AGX_AUDIT_MAX_BYTES=4096 - AGX_AUDIT_REDACT_KEYS=token,secret,password,authorization,cookie,api_key,signature ## Trace testing ```bash PYTHONPATH="$PWD/packages/agromatrix-tools" python3 crews/agromatrix_crew/run.py --trace trace-demo-001 "перевір trace" ``` ## farmOS UI (опційно, через reverse-proxy) 1) Згенеруй bcrypt-хеш пароля: ```bash docker run --rm caddy:2 caddy hash-password --plaintext 'your_password' ``` 2) Заповни env: - FARMOS_UI_PORT=18080 - FARMOS_UI_USER=admin - FARMOS_UI_PASS_HASH= 3) Запусти профіль: ```bash docker compose -f infra/compose/docker-compose.yml --profile farmos_ui up -d ``` Перевірка: ```bash curl -I http://127.0.0.1:18080 # 401 curl -u admin: http://127.0.0.1:18080 ``` Примітка: farmOS не має host-портів і залишається доступним тільки всередині docker network. ## Dictionaries & Normalization - Source of truth: `data/dictionaries/dictionaries.yaml` - Pending terms: `data/dictionaries/pending.jsonl` Demo: ```bash python3 scripts/demo_dictionary.py ``` Rules: - If confidence < 0.85 or no match → pending record is written - Use `tool_dictionary` before planning or writing ## OperationPlan Manager (P0) - Data: `data/operations/operation_plans.jsonl` - Schema: `crews/agromatrix_crew/operation_schema.json` Demo: ```bash python3 scripts/demo_operation_plan.py ``` ## Dictionary Review Workflow (P0.5) Pending review: ```bash python3 scripts/dict_review.py list python3 scripts/dict_review.py approve --ref pending.jsonl:1 --map-to crop_wheat_winter python3 scripts/dict_review.py apply ``` Auto-approve (safe categories): ```bash python3 scripts/dict_review.py auto-approve --min-score 0.97 --category unit --dry-run ``` ## Telegram-операторські команди (Pending Review) ENV: - AGX_OPERATOR_IDS=12345,67890 - AGX_OPERATOR_CHAT_ID=-100123456 (optional) Команди: - /pending - /pending_show pending.jsonl:17 - /approve pending.jsonl:17 map_to crop_wheat_winter - /reject pending.jsonl:17 "reason" - /apply_dict - /pending_stats - /whoami ### Operator flags /pending --limit 20 /pending --category unit /pending --category operation --limit 50 /approve pending.jsonl:17 map_to crop_wheat_winter --apply Note: --apply requires AGX_ALLOW_APPLY=1 or AGX_OPS_MODE=1