ארכיטקטורה
סקירת המערכת
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
- לקוחות של סוכנים חיצוניים דרך גילוי, הקמה עם קוד חד-פעמי ו-
Authorization: ApiKey
מודל הנתונים
workspacesworkspace_membersuser_settingsdevicescardsdecksreview_eventsapplied_operationssync_state
זרימת הנתונים
רשת
- הדפדפן מתחבר דרך
auth.<domain>. - אפליקציית הרשת טוענת את נתוני סביבת העבודה מ-
api.<domain>. - בקשות לצ׳אט AI עוברות דרך
/chat/local-turn. - שליחת חזרה מעדכנת את מצב המתזמן בזמן הכתיבה.
iOS
- אפליקציית iOS כותבת קודם כל מקומית ל-SQLite.
- שינויים מקומיים נכנסים לתור שליחה.
- הסנכרון מעלה שינויים דרך
/v1/workspaces/{workspaceId}/sync/push. - הסנכרון מוריד עדכונים מרוחקים דרך
/v1/workspaces/{workspaceId}/sync/pull. - מסד הנתונים המקומי מחיל את השינויים ומקדם את סמן הסנכרון.
סוכנים חיצוניים
- סוכנים מתחילים ב-
GET /v1/. - ההקמה עם קוד חד-פעמי רצה ב-
auth.<domain>. - הסוכן מקבל מפתח API ארוך טווח.
- הסוכן טוען את
/v1/agent/me, מציג את רשימת סביבות העבודה, בוחר אחת אם צריך, ואז משתמש ב-/v1/agent/sql/queryוב-/v1/agent/sql/execute.
תזמון
Nibomo משתמשת ב-FSRS כמתזמן החזרות.
הערות מימוש:
- בצד השרת וב-iOS יש מימושים תואמים של FSRS, שמשקפים זה את זה
- אפליקציית הרשת משקפת את חוזה נתוני התזמון, אבל לא כוללת עותק שלישי של המתזמן
- הגדרות המתזמן ברמת סביבת העבודה כוללות שיעור זכירה רצוי, שלבי למידה, שלבי למידה מחדש, מרווח מקסימלי ו-fuzz
- זמן החזרה האמיתי נלקח מ-
reviewedAtClient
לחוזה המפורט, עיין בלוגיקת התזמון של FSRS במאגר הראשי.
אימות
- קוד חד-פעמי באימייל דרך Cognito
- עוגיות סשן של הדפדפן בדומיין משותף עבור אפליקציית הרשת המתארחת
- הקמת סוכן עם קוד חד-פעמי ב-
auth.<domain>, שמסתיימת במפתח ApiKey ארוך טווח AUTH_MODE=noneלפיתוח מקומיAUTH_MODE=cognitoלאימות כמו בסביבת ייצור
מבנה הפריסה
app.<domain>-> CloudFront + S3api.<domain>-> API Gateway + צד שרת ב-Lambdaauth.<domain>-> API Gateway + שירות אימות ב-Lambda- Postgres ב-AWS RDS
דומיין השורש יכול להישאר באתר שיווקי נפרד. אם הוא פנוי בזמן ההקמה, התשתית יכולה להפנות אותו זמנית ל-app.<domain>.