LetsBeBiz-Redesign/docs/architecture-proposal/gpt/02-components-and-api-contr...

335 lines
8.3 KiB
Markdown
Raw Normal View History

# 02. Component Breakdown And API Contracts
## 1. Component Breakdown
## 1.1 Control Plane Components
| Component | Runtime | Responsibility | Notes |
|---|---|---|---|
| Hub Web/API | Next.js 16 + Node | Admin UI, customer portal, public APIs, tenant APIs | Keep existing app, add route groups and API contracts below. |
| Billing Engine | Node worker + Prisma | Usage aggregation, pool accounting, overage invoicing | Hourly usage compaction + end-of-period invoice sync. |
| Provisioning Orchestrator | Existing automation worker | Order state machine and provisioning job dispatch | Keep and harden existing job pipeline. |
| Notification Gateway | Node service | Push notifications, email alerts, approval prompts | Expo push + email provider adapters. |
| Onboarding Classifier | Lightweight service | Business-type classification + starter bundle recommendation | Cheap fast model profile; capped context. |
## 1.2 Tenant Components (Per VPS)
| Component | Runtime | Responsibility | State Store |
|---|---|---|---|
| OpenClaw Gateway | Node 22+ upstream | Agent runtime, sessions, tool orchestration | OpenClaw JSON/JSONL storage |
| Safety Wrapper Plugin | TypeScript package | Classification, gating, hooks, metering, Hub sync | SQLite (`safety.db`) |
| Egress Proxy | Node/Rust sidecar | Outbound redaction + transport enforcement | In-memory + policy cache |
| Execution Adapters | Local modules | Shell/Docker/file/env and tool REST adapters | Audit log in SQLite |
| Secrets Vault | SQLite + encryption | Secret values, rotation history, fingerprints | `vault.db` |
## 1.3 Deprecated Components (Explicitly Out)
- `letsbe-orchestrator`: behavior studied for migration inputs only.
- `letsbe-sysadmin-agent`: executor patterns ported, service itself not retained.
- `letsbe-mcp-browser`: replaced by OpenClaw native browser tooling.
## 2. API Design Rules (Applies To All Contracts)
- Base path versioning: `/api/v1/...`
- JSON request/response with strict schema validation.
- Idempotency required on mutating tenant commands (`Idempotency-Key` header).
- Authn/authz split by channel:
- Tenant channel: `Bearer <tenant_api_key>` (hash stored server-side)
- Mobile/customer channel: session JWT + RBAC
- Public website onboarding: scoped API key + anti-abuse limits
- All mutating endpoints emit audit event rows.
- All time fields are ISO 8601 UTC.
## 3. Hub ↔ Tenant API Contracts
## 3.1 Register Tenant Node
`POST /api/v1/tenant/register`
Purpose: first boot registration from Safety Wrapper.
Request:
```json
{
"registrationToken": "rt_...",
"orderId": "ord_...",
"agentVersion": "safety-wrapper@0.1.0",
"openclawVersion": "2026.2.26",
"hostname": "cust-vps-001",
"capabilities": ["browser", "exec", "docker", "approval_queue"]
}
```
Response `201`:
```json
{
"tenantApiKey": "tk_live_...",
"tenantId": "ten_...",
"heartbeatIntervalSec": 30,
"configEtag": "cfg_9f1a...",
"time": "2026-02-26T20:15:00Z"
}
```
## 3.2 Heartbeat + Pull Deltas
`POST /api/v1/tenant/heartbeat`
Purpose: status signal plus lightweight config/update pull.
Request:
```json
{
"tenantId": "ten_...",
"server": {
"uptimeSec": 86400,
"diskPct": 61.2,
"memPct": 57.8,
"openclawHealthy": true
},
"agents": [
{"agentId": "marketing", "status": "online", "autonomyLevel": 2}
],
"pendingApprovals": 1,
"lastAppliedConfigEtag": "cfg_9f1a..."
}
```
Response `200`:
```json
{
"configChanged": true,
"nextConfigEtag": "cfg_9f1b...",
"commands": [],
"clock": "2026-02-26T20:15:30Z"
}
```
## 3.3 Pull Full Tenant Config
`GET /api/v1/tenant/config?etag=cfg_9f1a...`
Response `200` includes:
- agent definitions (SOUL/TOOLS refs, model profile)
- autonomy policy
- external comms gate unlock map
- command classification ruleset checksum
- tool registry template version
## 3.4 Approval Request / Resolve
`POST /api/v1/tenant/approval-requests`
```json
{
"tenantId": "ten_...",
"requestId": "apr_...",
"agentId": "marketing",
"class": "yellow_external",
"tool": "listmonk.send_campaign",
"humanSummary": "Send campaign 'March Offer' to 1,204 recipients",
"expiresAt": "2026-02-27T20:15:30Z",
"context": {"recipientCount": 1204}
}
```
`GET /api/v1/tenant/approval-requests/{requestId}` returns `PENDING|APPROVED|DENIED|EXPIRED`.
## 3.5 Usage Ingestion
`POST /api/v1/tenant/usage-buckets`
```json
{
"tenantId": "ten_...",
"buckets": [
{
"hour": "2026-02-26T20:00:00Z",
"agentId": "marketing",
"model": "openrouter/deepseek-v3.2",
"inputTokens": 12000,
"outputTokens": 3800,
"cacheReadTokens": 6400,
"cacheWriteTokens": 0,
"webSearchCalls": 3,
"webFetchCalls": 1
}
]
}
```
## 3.6 Backup Status
`POST /api/v1/tenant/backup-status`
Tracks last run, duration, snapshot ID, integrity verification state.
## 4. Customer/Mobile API Contracts
## 4.1 Agent And Autonomy Management
- `GET /api/v1/customer/agents`
- `PATCH /api/v1/customer/agents/{agentId}`
- `PATCH /api/v1/customer/agents/{agentId}/autonomy`
- `PATCH /api/v1/customer/agents/{agentId}/external-comms-gate`
Autonomy update request:
```json
{
"autonomyLevel": 2,
"externalComms": {
"defaultLocked": true,
"toolUnlocks": [
{"tool": "chatwoot.reply_external", "enabled": true, "expiresAt": null}
]
}
}
```
## 4.2 Approval Queue
- `GET /api/v1/customer/approvals?status=pending`
- `POST /api/v1/customer/approvals/{id}` with `{ "decision": "approve" | "deny" }`
## 4.3 Usage And Billing
- `GET /api/v1/customer/usage/summary`
- `GET /api/v1/customer/usage/by-agent`
- `GET /api/v1/customer/billing/current-period`
- `POST /api/v1/customer/billing/payment-method`
## 4.4 Realtime Channels
- `GET /api/v1/customer/events/stream` (SSE fallback)
- `WS /api/v1/customer/ws` (chat updates, approvals, status)
## 5. Public Website/Onboarding API Contracts
## 5.1 Business Classification
`POST /api/v1/public/onboarding/classify`
```json
{
"sessionId": "onb_...",
"messages": [
{"role": "user", "content": "I run a 5-person digital agency"}
]
}
```
Response:
```json
{
"businessType": "agency",
"confidence": 0.91,
"recommendedBundle": "agency_core_v1",
"followUpQuestion": "Do you need ticketing or only chat?"
}
```
## 5.2 Bundle Quote
`POST /api/v1/public/onboarding/quote`
Returns min tier, projected token pool, monthly estimate, and Stripe checkout seed payload.
## 5.3 Order Creation
`POST /api/v1/public/orders` with strict schema + anti-fraud controls.
## 6. Safety Wrapper Internal Contract (Local Only)
Local Unix socket JSON-RPC interface between plugin orchestration and execution layer.
Method examples:
- `exec.run`
- `docker.compose`
- `file.read`
- `file.write`
- `env.update`
- `tool.http.call`
Example request:
```json
{
"id": "rpc_1",
"method": "tool.http.call",
"params": {
"tool": "ghost",
"operation": "posts.create",
"secretRefs": ["ghost_admin_key"],
"payload": {"title": "..."}
}
}
```
Guarantees:
- Secrets passed only as references, never raw values in request logs.
- Execution engine resolves references inside isolated process boundary.
- Full request/result hashes persisted for audit traceability.
## 7. Tool Registry Contract
`tool-registry.json` shape (tenant-local):
```json
{
"version": "2026-02-26",
"tools": [
{
"id": "chatwoot",
"baseUrl": "https://chat.customer-domain.tld",
"auth": {"type": "bearer_secret_ref", "ref": "chatwoot_api_token"},
"adapters": ["contacts.list", "conversation.reply"],
"externalCommsOperations": ["conversation.reply_external"],
"cheatsheet": "/opt/letsbe/cheatsheets/chatwoot.md"
}
]
}
```
## 8. Error Contract And Retries
Standard error envelope:
```json
{
"error": {
"code": "APPROVAL_REQUIRED",
"message": "Operation requires approval",
"requestId": "req_...",
"retryable": true,
"details": {"approvalRequestId": "apr_..."}
}
}
```
Common error codes:
- `AUTH_INVALID`
- `TENANT_UNKNOWN`
- `APPROVAL_REQUIRED`
- `APPROVAL_EXPIRED`
- `CLASSIFICATION_BLOCKED`
- `SECRET_REF_UNRESOLVED`
- `POLICY_VERSION_MISMATCH`
- `RATE_LIMITED`
## 9. API Compatibility And Change Policy
- Backward-compatible additions: allowed in-place.
- Breaking changes: new version path (`/api/v2`).
- Deprecation window: minimum 60 days for tenant APIs.
- Contract tests run in CI for Hub, Safety Wrapper, Mobile, and Website clients.