Wire typed SSD server lifecycle

ober

f5c4bbc8ebb8cffe0aead18414ecf02def11cef8

diff --git a/templates/ssd-review-parts/MainActivity.ss b/templates/ssd-review-parts/MainActivity.ss
index 2951364..808be93 100644
--- a/templates/ssd-review-parts/MainActivity.ss
+++ b/templates/ssd-review-parts/MainActivity.ss
@@ -9,6 +9,7 @@
          (typed-library (com sfb ssdreview) (export MainActivity)
           (type Activity) (type Bitmap) (type BoxType) (type Bundle)
           (type Int32) (type IntArray) (type Intent)
+          (type SfbAiReportClient) (type SfbServerClient)
           (type SsdReviewView) (type SsdSession) (type TextView)
           (type TruthStore) (type Uri)
           (extern
@@ -56,6 +57,13 @@
                  (mainActivityBoxTypesLoadAndroid activity)))
           (class MainActivity () (extends Activity)
            (var truthStore : TruthStore (modifiers internal lateinit))
+           (var serverClient : SfbServerClient
+                (modifiers internal lateinit))
+           (var aiReportClient : SfbAiReportClient
+                (modifiers internal lateinit))
+           (var serverPdfId : String "" (modifiers internal))
+           (var aiPollingJobId : String ""
+                (modifiers \x40;Volatile internal))
            (var reviewView
                 :
                 SsdReviewView
diff --git a/templates/ssd-review-parts/MainActivityLifecycle.ss b/templates/ssd-review-parts/MainActivityLifecycle.ss
index 3c1faa4..22f34a2 100644
--- a/templates/ssd-review-parts/MainActivityLifecycle.ss
+++ b/templates/ssd-review-parts/MainActivityLifecycle.ss
@@ -126,6 +126,24 @@
             (kotlin-value
               Settings
               ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION))
+          (extern
+            (mainLifecycleServerInitialize (activity : MainActivity))
+            :
+            Unit
+            (kotlin-call mainServerInitialize))
+          (extern
+            (mainLifecycleServerRefreshAsync
+              (activity : MainActivity)
+              (reason : String)
+              (allowLoopback : Bool))
+            :
+            Unit
+            (kotlin-call mainServerRefreshAsync))
+          (extern
+            (mainLifecycleServerOnResume (activity : MainActivity))
+            :
+            Unit
+            (kotlin-call mainServerOnResume))
           (def (mainActivityOnCreate (activity : MainActivity))
                :
                Unit
@@ -140,6 +158,7 @@
                  (mainActivitySetTruthStore
                    activity
                    (mainLifecycleTruthStore activity))
+                 (mainLifecycleServerInitialize activity)
                  (mainLifecycleSetContentView
                    activity
                    (mainActivityBuildUi activity))
@@ -151,32 +170,35 @@
                  (mainActivityRestoreLastPdf activity)
                  (mainActivitySeedBundledTruthAsync
                    activity
-                   (mainLifecycleTruthStoreRaw activity))))
+                   (mainLifecycleTruthStoreRaw activity))
+                 (mainLifecycleServerRefreshAsync activity "start" #f)))
           (def (mainActivityOnResume (activity : MainActivity))
                :
                Unit
-               (if (ssdBrowserResumeReady
-                     (mainLifecycleReopenSsdBrowserOnResumeRaw activity)
-                     (mainActivityHasDirectDownloadAccess activity (mainLifecycleBuildSdkIntValue)
-                       (mainLifecycleBuildVersionCodesRValue)
-                       (mainLifecycleBuildVersionCodesMValue)
-                       (mainLifecycleReadExternalStoragePermissionValue)
-                       (mainLifecyclePackageManagerPermissionGrantedValue)))
-                   (begin
-                     (mainActivitySetReopenSsdBrowserOnResume activity #f)
-                     (mainActivityOpenPdf activity (mainLifecycleReqOpenPdfValue)
-                       (mainLifecycleReqOpenSsdPdfTreeValue)
-                       (mainLifecycleReqReadStorageValue)
-                       (mainLifecyclePrefSsdPdfTreeUriValue)
-                       (mainLifecyclePrefLastPdfUriValue)
-                       (mainLifecycleBuildSdkIntValue)
-                       (mainLifecycleBuildVersionCodesRValue)
-                       (mainLifecycleBuildVersionCodesMValue)
-                       (mainLifecycleReadExternalStoragePermissionValue)
-                       (mainLifecyclePackageManagerPermissionGrantedValue)
-                       (mainLifecycleManageAppAllFilesAccessActionValue)
-                       (mainLifecycleManageAllFilesAccessActionValue)))
-                   (begin)))
+               (begin
+                 (mainLifecycleServerOnResume activity)
+                 (if (ssdBrowserResumeReady
+                       (mainLifecycleReopenSsdBrowserOnResumeRaw activity)
+                       (mainActivityHasDirectDownloadAccess activity (mainLifecycleBuildSdkIntValue)
+                         (mainLifecycleBuildVersionCodesRValue)
+                         (mainLifecycleBuildVersionCodesMValue)
+                         (mainLifecycleReadExternalStoragePermissionValue)
+                         (mainLifecyclePackageManagerPermissionGrantedValue)))
+                     (begin
+                       (mainActivitySetReopenSsdBrowserOnResume activity #f)
+                       (mainActivityOpenPdf activity (mainLifecycleReqOpenPdfValue)
+                         (mainLifecycleReqOpenSsdPdfTreeValue)
+                         (mainLifecycleReqReadStorageValue)
+                         (mainLifecyclePrefSsdPdfTreeUriValue)
+                         (mainLifecyclePrefLastPdfUriValue)
+                         (mainLifecycleBuildSdkIntValue)
+                         (mainLifecycleBuildVersionCodesRValue)
+                         (mainLifecycleBuildVersionCodesMValue)
+                         (mainLifecycleReadExternalStoragePermissionValue)
+                         (mainLifecyclePackageManagerPermissionGrantedValue)
+                         (mainLifecycleManageAppAllFilesAccessActionValue)
+                         (mainLifecycleManageAllFilesAccessActionValue)))
+                     (begin))))
           (def (mainActivityOnPause (activity : MainActivity))
                :
                Unit