Skip to main content

Architecture

Hexagonal layout

HTTP (/api/*) → application use-cases → ports

adapters (plugins)
LayerRoleExamples
DomainPure typesSession, Diagnosis, AuthSubject
PortsInterfacesAuthPort, QueryPort, LlmPort, CatalogPort
AdaptersImplementationsQueryCraft, OpenAI, YAML catalog, mock_*
ApplicationUse-casesclassifyProblem, startSession, agent loop
HTTPDeliveryExpress routers under /api

Swap backends with env (AUTH_ADAPTER, LLM_ADAPTER, …) — see Tweaking.

Diagnosis flow

Owner problem


Auth (Bearer) ──► restaurant principalId


Classify ──► playbook_ids (1–2)


Agent loop (investigate model + tools)
│ query_data ──► QueryCraft / mock
│ ask_manager ──► pause (awaiting_manager)
│ update_hypothesis / select_playbook
│ conclude_diagnosis ──► Diagnosis

Session status: concluded | awaiting_manager

Prompt blocks (agent)

BlockContentSource
AMethod + hard rules (static)src/application/agent/block-a.ts
BThis restaurant’s data availabilityprompt.ts + tenant + data-domains.yaml
CSelected playbooks + session boardplaybooks YAML + session state

Knowledge pack on disk

PathPurpose
diagnostics/playbooks/*.yamlProblem types, hypotheses, probes
diagnostics/recommendations/catalog.yamlShared actions (rec_id)
diagnostics/registry/data-domains.yamlWhat QueryCraft domains mean

Loaded by Catalog (CATALOG_ADAPTER=yaml).