Monorepo Structure
Package Dependencies
@lapis/shared must build first since both ai-agent and xrpl-contracts reference its types.
Build Order
tsx watch handles transpilation on-the-fly:
Key Design Decisions
ESM-Only
The entire codebase uses ES modules ("type": "module" in all package.json files). All imports require .js extensions, even for TypeScript files:
Storage Layer
By default, state is stored in JavaScriptMap objects (in-memory). Optionally, set REDIS_URL to enable Redis-backed persistence:
- Without Redis — State is lost on server restart, no setup required
- With Redis — Reports, markets, and settlements persist across restarts
Fire-and-Forget Pipeline
POST /analyze returns immediately with a report ID. The analysis pipeline (scrape → score → audit) runs asynchronously. Clients poll /report/:id/score for status updates.