shared/iface
The public consumer-facing interfaces. Cross-module imports go only through this package — never into another module's services/ or repository/ directories.
| Interface | Provided by | Consumed by |
|---|---|---|
UserProvider | user | every other module |
NotificationSender | notification | auth, billing, subscriptions, agents |
PDFProvider | documents | billing |
GraphProvider | graph | rag |
AIModelProvider | aimodels | rag, agents, sales |
RAGQueryProvider | rag | agents |
JWTProvider | auth | identity, any custom auth integration |
This indirection is what keeps consumers decoupled from producers: any implementation — in-process, or a remote HTTP-backed client a fork wires in — satisfies the same interface, so consumer code never changes.