Files
microdao-daarion/docs/agromatrix-stack.md
Apple ef3473db21 snapshot: NODE1 production state 2026-02-09
Complete snapshot of /opt/microdao-daarion/ from NODE1 (144.76.224.179).
This represents the actual running production code that has diverged
significantly from the previous main branch.

Key changes from old main:
- Gateway (http_api.py): expanded from ~40KB to 164KB with full agent support
- Router: new /v1/agents/{id}/infer endpoint with vision + DeepSeek routing
- Behavior Policy: SOWA v2.2 (3-level: FULL/ACK/SILENT)
- Agent Registry: config/agent_registry.yml as single source of truth
- 13 agents configured (was 3)
- Memory service integration
- CrewAI teams and roles

Excluded from snapshot: venv/, .env, data/, backups, .tgz archives

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 08:46:46 -08:00

3.4 KiB
Raw Permalink Blame History

AgroMatrix Tools Stack (Stepan)

Quick start

make up

Demo telemetry ingest

make seed

CrewAI (Stepan only)

Перед запуском:

export PYTHONPATH="$PWD/packages/agromatrix-tools"
PYTHONPATH="$PWD/packages/agromatrix-tools" python3 crews/agromatrix_crew/run.py "Покажи останні спостереження по вологості ґрунту"

Spreadsheet demo

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

PYTHONPATH="$PWD/packages/agromatrix-tools" python3 crews/agromatrix_crew/run.py --trace trace-demo-001 "перевір trace"

farmOS UI (опційно, через reverse-proxy)

  1. Згенеруй bcrypt-хеш пароля:
docker run --rm caddy:2 caddy hash-password --plaintext 'your_password'
  1. Заповни env:
  • FARMOS_UI_PORT=18080
  • FARMOS_UI_USER=admin
  • FARMOS_UI_PASS_HASH=
  1. Запусти профіль:
docker compose -f infra/compose/docker-compose.yml --profile farmos_ui up -d

Перевірка:

curl -I http://127.0.0.1:18080
# 401
curl -u admin:<pass> 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:

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:

python3 scripts/demo_operation_plan.py

Dictionary Review Workflow (P0.5)

Pending review:

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):

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