Архитектура
Преглед на системата
iOS app / agent client -> api.<domain> -> API Gateway -> Lambda backend -> Postgres
Web app -> app.<domain> -> CloudFront -> SPA
Browser and agent auth -> auth.<domain> -> API Gateway -> Auth Lambda -> Cognito
Apex fallback -> <domain> -> CloudFront redirect -> app.<domain>
Принципи
- Отделни публични домейни за
app,apiиauth - Postgres е основният източник на данни
- iOS клиентът поставя офлайн работата на първо място, с локална SQLite база и синхронизация
- Уеб приложението, iOS приложението и интерфейсът за външни агенти използват един и същ модел на работното пространство
- Външните агенти започват от
GET https://api.nibomo.com/v1/
Поддържани клиенти
- Уеб приложение на
app.nibomo.com - iOS приложение в основното хранилище с локално SQLite хранилище
- Android приложение в Google Play
- Външни агентски клиенти чрез откриване, първоначално удостоверяване с OTP и
Authorization: ApiKey
Модел на данните
workspacesworkspace_membersuser_settingsdevicescardsdecksreview_eventsapplied_operationssync_state
Поток на данните
Уеб
- Браузърът влиза през
auth.<domain>. - Уеб приложението зарежда данните на работното пространство от
api.<domain>. - Заявките към чата с ИИ минават през
/chat/local-turn. - Изпратените преговори обновяват състоянието на планировчика при запис.
iOS
- iOS приложението първо записва локално в SQLite.
- Локалните промени се натрупват в опашка за изпращане (outbox).
- Синхронизацията качва промените през
/v1/workspaces/{workspaceId}/sync/push. - Синхронизацията изтегля отдалечените промени през
/v1/workspaces/{workspaceId}/sync/pull. - Локалната база данни прилага промените и премества курсора на синхронизацията напред.
Външни агенти
- Агентите започват с
GET /v1/. - Първоначалното удостоверяване с OTP се извършва на
auth.<domain>. - Агентът получава дългосрочен API ключ.
- Агентът зарежда
/v1/agent/me, извежда списъка с работни пространства, избира едно при нужда и след това използва/v1/agent/sql/queryи/v1/agent/sql/execute.
Планиране
Nibomo използва FSRS като планировчик на преговорите.
Бележки по реализацията:
- бекендът и iOS поддържат огледални реализации на FSRS
- уеб приложението следва същия договор за данните за планиране, но не съдържа трето копие на планировчика
- настройките на планировчика на ниво работно пространство включват желаното запомняне, стъпките за учене, стъпките за повторно научаване, максималния интервал и fuzz (случайното разместване на интервалите)
- действителното време на преговора идва от
reviewedAtClient
За подробния договор вижте логиката за планиране с FSRS в основното хранилище.
Удостоверяване
- OTP по имейл чрез Cognito
- Бисквитки за браузърна сесия на общия домейн за облачното уеб приложение
- Първоначално удостоверяване на агенти с OTP на
auth.<domain>, което издава дългосрочен ApiKey AUTH_MODE=noneза локална разработкаAUTH_MODE=cognitoза удостоверяване, близко до продукционната среда
Структура на разгръщането
app.<domain>-> CloudFront + S3api.<domain>-> API Gateway + Lambda бекендauth.<domain>-> API Gateway + Lambda услуга за удостоверяване- Postgres в AWS RDS
Основният домейн (apex) може да остане за отделен маркетингов сайт. Ако е свободен по време на първоначалната настройка, инфраструктурата може временно да го пренасочва към app.<domain>.