capacitor-native-agent 0.3.2 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21,6 +21,11 @@ class NativeAgentPlugin : Plugin() {
21
21
  private var handle: NativeAgentHandle? = null
22
22
  private val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())
23
23
 
24
+ companion object {
25
+ private const val STORAGE_FILE = "CapacitorStorage"
26
+ private const val CONFIG_PATH_KEY = "mobilecron:native-agent-config-path"
27
+ }
28
+
24
29
  // ── Helper: wrap common pattern ────────────────────────────────────
25
30
 
26
31
  private fun withHandle(call: PluginCall, block: (NativeAgentHandle) -> Unit) {
@@ -72,9 +77,10 @@ class NativeAgentPlugin : Plugin() {
72
77
 
73
78
  scope.launch {
74
79
  try {
80
+ val resolvedWorkspacePath = resolvePath(workspacePath)
75
81
  val config = InitConfig(
76
82
  dbPath = resolvePath(dbPath),
77
- workspacePath = resolvePath(workspacePath),
83
+ workspacePath = resolvedWorkspacePath,
78
84
  authProfilesPath = resolvePath(authProfilesPath),
79
85
  )
80
86
  val h = NativeAgentHandle(config)
@@ -86,7 +92,14 @@ class NativeAgentPlugin : Plugin() {
86
92
  notifyListeners("nativeAgentEvent", data)
87
93
  }
88
94
  })
95
+ h.setNotifier(NativeNotifierImpl(context.applicationContext))
96
+ h.persistConfig()
89
97
  handle = h
98
+ context
99
+ .getSharedPreferences(STORAGE_FILE, android.content.Context.MODE_PRIVATE)
100
+ .edit()
101
+ .putString(CONFIG_PATH_KEY, resolveConfigPath(resolvedWorkspacePath))
102
+ .apply()
90
103
  call.resolve()
91
104
  } catch (e: Exception) {
92
105
  call.reject("Failed to initialize NativeAgent: ${e.message}", e)
@@ -429,4 +442,10 @@ class NativeAgentPlugin : Plugin() {
429
442
  path
430
443
  }
431
444
  }
445
+
446
+ private fun resolveConfigPath(workspacePath: String): String {
447
+ val workspace = java.io.File(workspacePath)
448
+ val parent = workspace.parentFile ?: workspace
449
+ return java.io.File(parent, ".native-agent-config.json").absolutePath
450
+ }
432
451
  }
@@ -0,0 +1,65 @@
1
+ package com.t6x.plugins.nativeagent
2
+
3
+ import android.app.Notification
4
+ import android.app.NotificationChannel
5
+ import android.app.NotificationManager
6
+ import android.content.Context
7
+ import android.os.Build
8
+ import org.json.JSONObject
9
+ import uniffi.native_agent_ffi.NativeNotifier
10
+
11
+ class NativeNotifierImpl(
12
+ private val appContext: Context
13
+ ) : NativeNotifier {
14
+ override fun sendNotification(title: String, body: String, dataJson: String): String {
15
+ val channelId = CHANNEL_ID
16
+ ensureChannel(channelId)
17
+
18
+ val notificationId = ((System.currentTimeMillis() and 0x7fffffff) % Int.MAX_VALUE).toInt()
19
+ val icon = appContext.applicationInfo.icon.takeIf { it != 0 } ?: android.R.drawable.ic_dialog_info
20
+ val builder = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
21
+ Notification.Builder(appContext, channelId)
22
+ } else {
23
+ @Suppress("DEPRECATION")
24
+ Notification.Builder(appContext)
25
+ }
26
+
27
+ val notification = builder
28
+ .setContentTitle(title)
29
+ .setContentText(body)
30
+ .setStyle(Notification.BigTextStyle().bigText(body))
31
+ .setSmallIcon(icon)
32
+ .setAutoCancel(true)
33
+ .build()
34
+
35
+ return try {
36
+ val manager = appContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
37
+ manager.notify(notificationId, notification)
38
+ JSONObject()
39
+ .put("notificationId", notificationId)
40
+ .put("dataJson", dataJson)
41
+ .toString()
42
+ } catch (e: SecurityException) {
43
+ JSONObject().put("error", e.message ?: "notification_permission_denied").toString()
44
+ }
45
+ }
46
+
47
+ private fun ensureChannel(channelId: String) {
48
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
49
+ return
50
+ }
51
+ val manager = appContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
52
+ val channel = NotificationChannel(
53
+ channelId,
54
+ "Native Agent Jobs",
55
+ NotificationManager.IMPORTANCE_DEFAULT
56
+ ).apply {
57
+ description = "Background cron notifications from Native Agent"
58
+ }
59
+ manager.createNotificationChannel(channel)
60
+ }
61
+
62
+ private companion object {
63
+ private const val CHANNEL_ID = "native-agent-cron"
64
+ }
65
+ }
@@ -657,6 +657,9 @@ internal interface UniffiForeignFutureCompleteVoid : com.sun.jna.Callback {
657
657
  internal interface UniffiCallbackInterfaceNativeEventCallbackMethod0 : com.sun.jna.Callback {
658
658
  fun callback(`uniffiHandle`: Long,`eventType`: RustBuffer.ByValue,`payloadJson`: RustBuffer.ByValue,`uniffiOutReturn`: Pointer,uniffiCallStatus: UniffiRustCallStatus,)
659
659
  }
660
+ internal interface UniffiCallbackInterfaceNativeNotifierMethod0 : com.sun.jna.Callback {
661
+ fun callback(`uniffiHandle`: Long,`title`: RustBuffer.ByValue,`body`: RustBuffer.ByValue,`dataJson`: RustBuffer.ByValue,`uniffiOutReturn`: RustBuffer,uniffiCallStatus: UniffiRustCallStatus,)
662
+ }
660
663
  @Structure.FieldOrder("onEvent", "uniffiFree")
661
664
  internal open class UniffiVTableCallbackInterfaceNativeEventCallback(
662
665
  @JvmField internal var `onEvent`: UniffiCallbackInterfaceNativeEventCallbackMethod0? = null,
@@ -673,6 +676,30 @@ internal open class UniffiVTableCallbackInterfaceNativeEventCallback(
673
676
  }
674
677
 
675
678
  }
679
+ @Structure.FieldOrder("sendNotification", "uniffiFree")
680
+ internal open class UniffiVTableCallbackInterfaceNativeNotifier(
681
+ @JvmField internal var `sendNotification`: UniffiCallbackInterfaceNativeNotifierMethod0? = null,
682
+ @JvmField internal var `uniffiFree`: UniffiCallbackInterfaceFree? = null,
683
+ ) : Structure() {
684
+ class UniffiByValue(
685
+ `sendNotification`: UniffiCallbackInterfaceNativeNotifierMethod0? = null,
686
+ `uniffiFree`: UniffiCallbackInterfaceFree? = null,
687
+ ): UniffiVTableCallbackInterfaceNativeNotifier(`sendNotification`,`uniffiFree`,), Structure.ByValue
688
+
689
+ internal fun uniffiSetValue(other: UniffiVTableCallbackInterfaceNativeNotifier) {
690
+ `sendNotification` = other.`sendNotification`
691
+ `uniffiFree` = other.`uniffiFree`
692
+ }
693
+
694
+ }
695
+
696
+
697
+
698
+
699
+
700
+
701
+
702
+
676
703
 
677
704
 
678
705
 
@@ -826,6 +853,7 @@ internal interface UniffiLib : Library {
826
853
  uniffiCheckContractApiVersion(lib)
827
854
  uniffiCheckApiChecksums(lib)
828
855
  uniffiCallbackInterfaceNativeEventCallback.register(lib)
856
+ uniffiCallbackInterfaceNativeNotifier.register(lib)
829
857
  }
830
858
  }
831
859
 
@@ -879,6 +907,8 @@ internal interface UniffiLib : Library {
879
907
  ): RustBuffer.ByValue
880
908
  fun uniffi_native_agent_ffi_fn_method_nativeagenthandle_load_session(`ptr`: Pointer,`sessionKey`: RustBuffer.ByValue,uniffi_out_err: UniffiRustCallStatus,
881
909
  ): RustBuffer.ByValue
910
+ fun uniffi_native_agent_ffi_fn_method_nativeagenthandle_persist_config(`ptr`: Pointer,uniffi_out_err: UniffiRustCallStatus,
911
+ ): Unit
882
912
  fun uniffi_native_agent_ffi_fn_method_nativeagenthandle_refresh_token(`ptr`: Pointer,`provider`: RustBuffer.ByValue,uniffi_out_err: UniffiRustCallStatus,
883
913
  ): RustBuffer.ByValue
884
914
  fun uniffi_native_agent_ffi_fn_method_nativeagenthandle_remove_cron_job(`ptr`: Pointer,`id`: RustBuffer.ByValue,uniffi_out_err: UniffiRustCallStatus,
@@ -905,6 +935,8 @@ internal interface UniffiLib : Library {
905
935
  ): Unit
906
936
  fun uniffi_native_agent_ffi_fn_method_nativeagenthandle_set_heartbeat_config(`ptr`: Pointer,`configJson`: RustBuffer.ByValue,uniffi_out_err: UniffiRustCallStatus,
907
937
  ): Unit
938
+ fun uniffi_native_agent_ffi_fn_method_nativeagenthandle_set_notifier(`ptr`: Pointer,`notifier`: Long,uniffi_out_err: UniffiRustCallStatus,
939
+ ): Unit
908
940
  fun uniffi_native_agent_ffi_fn_method_nativeagenthandle_set_scheduler_config(`ptr`: Pointer,`configJson`: RustBuffer.ByValue,uniffi_out_err: UniffiRustCallStatus,
909
941
  ): Unit
910
942
  fun uniffi_native_agent_ffi_fn_method_nativeagenthandle_start_mcp(`ptr`: Pointer,`toolsJson`: RustBuffer.ByValue,uniffi_out_err: UniffiRustCallStatus,
@@ -919,6 +951,10 @@ internal interface UniffiLib : Library {
919
951
  ): Unit
920
952
  fun uniffi_native_agent_ffi_fn_init_callback_vtable_nativeeventcallback(`vtable`: UniffiVTableCallbackInterfaceNativeEventCallback,
921
953
  ): Unit
954
+ fun uniffi_native_agent_ffi_fn_init_callback_vtable_nativenotifier(`vtable`: UniffiVTableCallbackInterfaceNativeNotifier,
955
+ ): Unit
956
+ fun uniffi_native_agent_ffi_fn_func_create_handle_from_persisted_config(`configPath`: RustBuffer.ByValue,uniffi_out_err: UniffiRustCallStatus,
957
+ ): Pointer
922
958
  fun uniffi_native_agent_ffi_fn_func_init_workspace(`config`: RustBuffer.ByValue,uniffi_out_err: UniffiRustCallStatus,
923
959
  ): Unit
924
960
  fun ffi_native_agent_ffi_rustbuffer_alloc(`size`: Long,uniffi_out_err: UniffiRustCallStatus,
@@ -1033,6 +1069,8 @@ internal interface UniffiLib : Library {
1033
1069
  ): Unit
1034
1070
  fun ffi_native_agent_ffi_rust_future_complete_void(`handle`: Long,uniffi_out_err: UniffiRustCallStatus,
1035
1071
  ): Unit
1072
+ fun uniffi_native_agent_ffi_checksum_func_create_handle_from_persisted_config(
1073
+ ): Short
1036
1074
  fun uniffi_native_agent_ffi_checksum_func_init_workspace(
1037
1075
  ): Short
1038
1076
  fun uniffi_native_agent_ffi_checksum_method_nativeagenthandle_abort(
@@ -1073,6 +1111,8 @@ internal interface UniffiLib : Library {
1073
1111
  ): Short
1074
1112
  fun uniffi_native_agent_ffi_checksum_method_nativeagenthandle_load_session(
1075
1113
  ): Short
1114
+ fun uniffi_native_agent_ffi_checksum_method_nativeagenthandle_persist_config(
1115
+ ): Short
1076
1116
  fun uniffi_native_agent_ffi_checksum_method_nativeagenthandle_refresh_token(
1077
1117
  ): Short
1078
1118
  fun uniffi_native_agent_ffi_checksum_method_nativeagenthandle_remove_cron_job(
@@ -1099,6 +1139,8 @@ internal interface UniffiLib : Library {
1099
1139
  ): Short
1100
1140
  fun uniffi_native_agent_ffi_checksum_method_nativeagenthandle_set_heartbeat_config(
1101
1141
  ): Short
1142
+ fun uniffi_native_agent_ffi_checksum_method_nativeagenthandle_set_notifier(
1143
+ ): Short
1102
1144
  fun uniffi_native_agent_ffi_checksum_method_nativeagenthandle_set_scheduler_config(
1103
1145
  ): Short
1104
1146
  fun uniffi_native_agent_ffi_checksum_method_nativeagenthandle_start_mcp(
@@ -1115,6 +1157,8 @@ internal interface UniffiLib : Library {
1115
1157
  ): Short
1116
1158
  fun uniffi_native_agent_ffi_checksum_method_nativeeventcallback_on_event(
1117
1159
  ): Short
1160
+ fun uniffi_native_agent_ffi_checksum_method_nativenotifier_send_notification(
1161
+ ): Short
1118
1162
  fun ffi_native_agent_ffi_uniffi_contract_version(
1119
1163
  ): Int
1120
1164
 
@@ -1132,6 +1176,9 @@ private fun uniffiCheckContractApiVersion(lib: UniffiLib) {
1132
1176
 
1133
1177
  @Suppress("UNUSED_PARAMETER")
1134
1178
  private fun uniffiCheckApiChecksums(lib: UniffiLib) {
1179
+ if (lib.uniffi_native_agent_ffi_checksum_func_create_handle_from_persisted_config() != 41643.toShort()) {
1180
+ throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
1181
+ }
1135
1182
  if (lib.uniffi_native_agent_ffi_checksum_func_init_workspace() != 39423.toShort()) {
1136
1183
  throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
1137
1184
  }
@@ -1192,6 +1239,9 @@ private fun uniffiCheckApiChecksums(lib: UniffiLib) {
1192
1239
  if (lib.uniffi_native_agent_ffi_checksum_method_nativeagenthandle_load_session() != 39832.toShort()) {
1193
1240
  throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
1194
1241
  }
1242
+ if (lib.uniffi_native_agent_ffi_checksum_method_nativeagenthandle_persist_config() != 63110.toShort()) {
1243
+ throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
1244
+ }
1195
1245
  if (lib.uniffi_native_agent_ffi_checksum_method_nativeagenthandle_refresh_token() != 13290.toShort()) {
1196
1246
  throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
1197
1247
  }
@@ -1231,6 +1281,9 @@ private fun uniffiCheckApiChecksums(lib: UniffiLib) {
1231
1281
  if (lib.uniffi_native_agent_ffi_checksum_method_nativeagenthandle_set_heartbeat_config() != 33968.toShort()) {
1232
1282
  throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
1233
1283
  }
1284
+ if (lib.uniffi_native_agent_ffi_checksum_method_nativeagenthandle_set_notifier() != 58795.toShort()) {
1285
+ throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
1286
+ }
1234
1287
  if (lib.uniffi_native_agent_ffi_checksum_method_nativeagenthandle_set_scheduler_config() != 18609.toShort()) {
1235
1288
  throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
1236
1289
  }
@@ -1255,6 +1308,9 @@ private fun uniffiCheckApiChecksums(lib: UniffiLib) {
1255
1308
  if (lib.uniffi_native_agent_ffi_checksum_method_nativeeventcallback_on_event() != 29742.toShort()) {
1256
1309
  throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
1257
1310
  }
1311
+ if (lib.uniffi_native_agent_ffi_checksum_method_nativenotifier_send_notification() != 9573.toShort()) {
1312
+ throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
1313
+ }
1258
1314
  }
1259
1315
 
1260
1316
  // Async support
@@ -1692,6 +1748,8 @@ public interface NativeAgentHandleInterface {
1692
1748
  */
1693
1749
  fun `loadSession`(`sessionKey`: kotlin.String): kotlin.String
1694
1750
 
1751
+ fun `persistConfig`()
1752
+
1695
1753
  /**
1696
1754
  * Refresh an OAuth token.
1697
1755
  */
@@ -1757,6 +1815,8 @@ public interface NativeAgentHandleInterface {
1757
1815
  */
1758
1816
  fun `setHeartbeatConfig`(`configJson`: kotlin.String)
1759
1817
 
1818
+ fun `setNotifier`(`notifier`: NativeNotifier)
1819
+
1760
1820
  /**
1761
1821
  * Set scheduler config.
1762
1822
  */
@@ -2185,6 +2245,18 @@ open class NativeAgentHandle: Disposable, AutoCloseable, NativeAgentHandleInterf
2185
2245
 
2186
2246
 
2187
2247
 
2248
+ @Throws(NativeAgentException::class)override fun `persistConfig`()
2249
+ =
2250
+ callWithPointer {
2251
+ uniffiRustCallWithError(NativeAgentException) { _status ->
2252
+ UniffiLib.INSTANCE.uniffi_native_agent_ffi_fn_method_nativeagenthandle_persist_config(
2253
+ it, _status)
2254
+ }
2255
+ }
2256
+
2257
+
2258
+
2259
+
2188
2260
  /**
2189
2261
  * Refresh an OAuth token.
2190
2262
  */
@@ -2383,6 +2455,18 @@ open class NativeAgentHandle: Disposable, AutoCloseable, NativeAgentHandleInterf
2383
2455
 
2384
2456
 
2385
2457
 
2458
+ @Throws(NativeAgentException::class)override fun `setNotifier`(`notifier`: NativeNotifier)
2459
+ =
2460
+ callWithPointer {
2461
+ uniffiRustCallWithError(NativeAgentException) { _status ->
2462
+ UniffiLib.INSTANCE.uniffi_native_agent_ffi_fn_method_nativeagenthandle_set_notifier(
2463
+ it, FfiConverterTypeNativeNotifier.lower(`notifier`),_status)
2464
+ }
2465
+ }
2466
+
2467
+
2468
+
2469
+
2386
2470
  /**
2387
2471
  * Set scheduler config.
2388
2472
  */
@@ -2634,6 +2718,49 @@ public object FfiConverterTypeInitConfig: FfiConverterRustBuffer<InitConfig> {
2634
2718
 
2635
2719
 
2636
2720
 
2721
+ /**
2722
+ * Buffered event emitted while no foreground callback is attached.
2723
+ */
2724
+ data class PendingEvent (
2725
+ var `id`: kotlin.Long,
2726
+ var `eventType`: kotlin.String,
2727
+ var `payloadJson`: kotlin.String,
2728
+ var `createdAt`: kotlin.Long
2729
+ ) {
2730
+
2731
+ companion object
2732
+ }
2733
+
2734
+ /**
2735
+ * @suppress
2736
+ */
2737
+ public object FfiConverterTypePendingEvent: FfiConverterRustBuffer<PendingEvent> {
2738
+ override fun read(buf: ByteBuffer): PendingEvent {
2739
+ return PendingEvent(
2740
+ FfiConverterLong.read(buf),
2741
+ FfiConverterString.read(buf),
2742
+ FfiConverterString.read(buf),
2743
+ FfiConverterLong.read(buf),
2744
+ )
2745
+ }
2746
+
2747
+ override fun allocationSize(value: PendingEvent) = (
2748
+ FfiConverterLong.allocationSize(value.`id`) +
2749
+ FfiConverterString.allocationSize(value.`eventType`) +
2750
+ FfiConverterString.allocationSize(value.`payloadJson`) +
2751
+ FfiConverterLong.allocationSize(value.`createdAt`)
2752
+ )
2753
+
2754
+ override fun write(value: PendingEvent, buf: ByteBuffer) {
2755
+ FfiConverterLong.write(value.`id`, buf)
2756
+ FfiConverterString.write(value.`eventType`, buf)
2757
+ FfiConverterString.write(value.`payloadJson`, buf)
2758
+ FfiConverterLong.write(value.`createdAt`, buf)
2759
+ }
2760
+ }
2761
+
2762
+
2763
+
2637
2764
  /**
2638
2765
  * Parameters for sending a message.
2639
2766
  */
@@ -3007,6 +3134,64 @@ public object FfiConverterTypeNativeEventCallback: FfiConverterCallbackInterface
3007
3134
 
3008
3135
 
3009
3136
 
3137
+
3138
+ /**
3139
+ * Callback interface for platform-native notification delivery.
3140
+ */
3141
+ public interface NativeNotifier {
3142
+
3143
+ fun `sendNotification`(`title`: kotlin.String, `body`: kotlin.String, `dataJson`: kotlin.String): kotlin.String
3144
+
3145
+ companion object
3146
+ }
3147
+
3148
+
3149
+
3150
+ // Put the implementation in an object so we don't pollute the top-level namespace
3151
+ internal object uniffiCallbackInterfaceNativeNotifier {
3152
+ internal object `sendNotification`: UniffiCallbackInterfaceNativeNotifierMethod0 {
3153
+ override fun callback(`uniffiHandle`: Long,`title`: RustBuffer.ByValue,`body`: RustBuffer.ByValue,`dataJson`: RustBuffer.ByValue,`uniffiOutReturn`: RustBuffer,uniffiCallStatus: UniffiRustCallStatus,) {
3154
+ val uniffiObj = FfiConverterTypeNativeNotifier.handleMap.get(uniffiHandle)
3155
+ val makeCall = { ->
3156
+ uniffiObj.`sendNotification`(
3157
+ FfiConverterString.lift(`title`),
3158
+ FfiConverterString.lift(`body`),
3159
+ FfiConverterString.lift(`dataJson`),
3160
+ )
3161
+ }
3162
+ val writeReturn = { value: kotlin.String -> uniffiOutReturn.setValue(FfiConverterString.lower(value)) }
3163
+ uniffiTraitInterfaceCall(uniffiCallStatus, makeCall, writeReturn)
3164
+ }
3165
+ }
3166
+
3167
+ internal object uniffiFree: UniffiCallbackInterfaceFree {
3168
+ override fun callback(handle: Long) {
3169
+ FfiConverterTypeNativeNotifier.handleMap.remove(handle)
3170
+ }
3171
+ }
3172
+
3173
+ internal var vtable = UniffiVTableCallbackInterfaceNativeNotifier.UniffiByValue(
3174
+ `sendNotification`,
3175
+ uniffiFree,
3176
+ )
3177
+
3178
+ // Registers the foreign callback with the Rust side.
3179
+ // This method is generated for each callback interface.
3180
+ internal fun register(lib: UniffiLib) {
3181
+ lib.uniffi_native_agent_ffi_fn_init_callback_vtable_nativenotifier(vtable)
3182
+ }
3183
+ }
3184
+
3185
+ /**
3186
+ * The ffiConverter which transforms the Callbacks in to handles to pass to Rust.
3187
+ *
3188
+ * @suppress
3189
+ */
3190
+ public object FfiConverterTypeNativeNotifier: FfiConverterCallbackInterface<NativeNotifier>()
3191
+
3192
+
3193
+
3194
+
3010
3195
  /**
3011
3196
  * @suppress
3012
3197
  */
@@ -3067,6 +3252,16 @@ public object FfiConverterOptionalString: FfiConverterRustBuffer<kotlin.String?>
3067
3252
  }
3068
3253
  }
3069
3254
  }
3255
+ @Throws(NativeAgentException::class) fun `createHandleFromPersistedConfig`(`configPath`: kotlin.String): NativeAgentHandle {
3256
+ return FfiConverterTypeNativeAgentHandle.lift(
3257
+ uniffiRustCallWithError(NativeAgentException) { _status ->
3258
+ UniffiLib.INSTANCE.uniffi_native_agent_ffi_fn_func_create_handle_from_persisted_config(
3259
+ FfiConverterString.lower(`configPath`),_status)
3260
+ }
3261
+ )
3262
+ }
3263
+
3264
+
3070
3265
  /**
3071
3266
  * Standalone workspace initialization for cold-start paths.
3072
3267
  */
@@ -137,7 +137,7 @@ export interface TokenUsage {
137
137
  outputTokens: number;
138
138
  totalTokens: number;
139
139
  }
140
- export type NativeAgentEventType = 'text_delta' | 'thinking' | 'tool_use' | 'tool_result' | 'mcp_tool_call' | 'user_message' | 'retry' | 'agent.completed' | 'agent.error' | 'approval_request' | 'wake.no_jobs' | 'wake.jobs_found' | 'max_turns_reached' | 'heartbeat.started' | 'heartbeat.completed' | 'heartbeat.skipped' | 'cron.job.started' | 'cron.job.completed' | 'cron.job.error' | 'cron.notification' | 'scheduler.status';
140
+ export type NativeAgentEventType = 'text_delta' | 'thinking' | 'tool_use' | 'tool_result' | 'mcp_tool_call' | 'user_message' | 'retry' | 'agent.completed' | 'agent.error' | 'approval_request' | 'wake.no_jobs' | 'wake.jobs_found' | 'agent.background_timeout' | 'max_turns_reached' | 'heartbeat.started' | 'heartbeat.completed' | 'heartbeat.skipped' | 'cron.job.started' | 'cron.job.completed' | 'cron.job.error' | 'cron.notification' | 'scheduler.status';
141
141
  export interface NativeAgentEvent {
142
142
  eventType: string;
143
143
  payloadJson: string;
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"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"}
@@ -598,6 +598,8 @@ public protocol NativeAgentHandleProtocol : AnyObject {
598
598
  */
599
599
  func loadSession(sessionKey: String) throws -> String
600
600
 
601
+ func persistConfig() throws
602
+
601
603
  /**
602
604
  * Refresh an OAuth token.
603
605
  */
@@ -663,6 +665,8 @@ public protocol NativeAgentHandleProtocol : AnyObject {
663
665
  */
664
666
  func setHeartbeatConfig(configJson: String) throws
665
667
 
668
+ func setNotifier(notifier: NativeNotifier) throws
669
+
666
670
  /**
667
671
  * Set scheduler config.
668
672
  */
@@ -958,6 +962,12 @@ open func loadSession(sessionKey: String)throws -> String {
958
962
  FfiConverterString.lower(sessionKey),$0
959
963
  )
960
964
  })
965
+ }
966
+
967
+ open func persistConfig()throws {try rustCallWithError(FfiConverterTypeNativeAgentError.lift) {
968
+ uniffi_native_agent_ffi_fn_method_nativeagenthandle_persist_config(self.uniffiClonePointer(),$0
969
+ )
970
+ }
961
971
  }
962
972
 
963
973
  /**
@@ -1102,6 +1112,13 @@ open func setHeartbeatConfig(configJson: String)throws {try rustCallWithError(F
1102
1112
  FfiConverterString.lower(configJson),$0
1103
1113
  )
1104
1114
  }
1115
+ }
1116
+
1117
+ open func setNotifier(notifier: NativeNotifier)throws {try rustCallWithError(FfiConverterTypeNativeAgentError.lift) {
1118
+ uniffi_native_agent_ffi_fn_method_nativeagenthandle_set_notifier(self.uniffiClonePointer(),
1119
+ FfiConverterCallbackInterfaceNativeNotifier.lower(notifier),$0
1120
+ )
1121
+ }
1105
1122
  }
1106
1123
 
1107
1124
  /**
@@ -1466,6 +1483,91 @@ public func FfiConverterTypeInitConfig_lower(_ value: InitConfig) -> RustBuffer
1466
1483
  }
1467
1484
 
1468
1485
 
1486
+ /**
1487
+ * Buffered event emitted while no foreground callback is attached.
1488
+ */
1489
+ public struct PendingEvent {
1490
+ public var id: Int64
1491
+ public var eventType: String
1492
+ public var payloadJson: String
1493
+ public var createdAt: Int64
1494
+
1495
+ // Default memberwise initializers are never public by default, so we
1496
+ // declare one manually.
1497
+ public init(id: Int64, eventType: String, payloadJson: String, createdAt: Int64) {
1498
+ self.id = id
1499
+ self.eventType = eventType
1500
+ self.payloadJson = payloadJson
1501
+ self.createdAt = createdAt
1502
+ }
1503
+ }
1504
+
1505
+
1506
+
1507
+ extension PendingEvent: Equatable, Hashable {
1508
+ public static func ==(lhs: PendingEvent, rhs: PendingEvent) -> Bool {
1509
+ if lhs.id != rhs.id {
1510
+ return false
1511
+ }
1512
+ if lhs.eventType != rhs.eventType {
1513
+ return false
1514
+ }
1515
+ if lhs.payloadJson != rhs.payloadJson {
1516
+ return false
1517
+ }
1518
+ if lhs.createdAt != rhs.createdAt {
1519
+ return false
1520
+ }
1521
+ return true
1522
+ }
1523
+
1524
+ public func hash(into hasher: inout Hasher) {
1525
+ hasher.combine(id)
1526
+ hasher.combine(eventType)
1527
+ hasher.combine(payloadJson)
1528
+ hasher.combine(createdAt)
1529
+ }
1530
+ }
1531
+
1532
+
1533
+ #if swift(>=5.8)
1534
+ @_documentation(visibility: private)
1535
+ #endif
1536
+ public struct FfiConverterTypePendingEvent: FfiConverterRustBuffer {
1537
+ public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> PendingEvent {
1538
+ return
1539
+ try PendingEvent(
1540
+ id: FfiConverterInt64.read(from: &buf),
1541
+ eventType: FfiConverterString.read(from: &buf),
1542
+ payloadJson: FfiConverterString.read(from: &buf),
1543
+ createdAt: FfiConverterInt64.read(from: &buf)
1544
+ )
1545
+ }
1546
+
1547
+ public static func write(_ value: PendingEvent, into buf: inout [UInt8]) {
1548
+ FfiConverterInt64.write(value.id, into: &buf)
1549
+ FfiConverterString.write(value.eventType, into: &buf)
1550
+ FfiConverterString.write(value.payloadJson, into: &buf)
1551
+ FfiConverterInt64.write(value.createdAt, into: &buf)
1552
+ }
1553
+ }
1554
+
1555
+
1556
+ #if swift(>=5.8)
1557
+ @_documentation(visibility: private)
1558
+ #endif
1559
+ public func FfiConverterTypePendingEvent_lift(_ buf: RustBuffer) throws -> PendingEvent {
1560
+ return try FfiConverterTypePendingEvent.lift(buf)
1561
+ }
1562
+
1563
+ #if swift(>=5.8)
1564
+ @_documentation(visibility: private)
1565
+ #endif
1566
+ public func FfiConverterTypePendingEvent_lower(_ value: PendingEvent) -> RustBuffer {
1567
+ return FfiConverterTypePendingEvent.lower(value)
1568
+ }
1569
+
1570
+
1469
1571
  /**
1470
1572
  * Parameters for sending a message.
1471
1573
  */
@@ -1886,6 +1988,112 @@ extension FfiConverterCallbackInterfaceNativeEventCallback : FfiConverter {
1886
1988
  }
1887
1989
  }
1888
1990
 
1991
+
1992
+
1993
+
1994
+ /**
1995
+ * Callback interface for platform-native notification delivery.
1996
+ */
1997
+ public protocol NativeNotifier : AnyObject {
1998
+
1999
+ func sendNotification(title: String, body: String, dataJson: String) -> String
2000
+
2001
+ }
2002
+
2003
+
2004
+
2005
+ // Put the implementation in a struct so we don't pollute the top-level namespace
2006
+ fileprivate struct UniffiCallbackInterfaceNativeNotifier {
2007
+
2008
+ // Create the VTable using a series of closures.
2009
+ // Swift automatically converts these into C callback functions.
2010
+ static var vtable: UniffiVTableCallbackInterfaceNativeNotifier = UniffiVTableCallbackInterfaceNativeNotifier(
2011
+ sendNotification: { (
2012
+ uniffiHandle: UInt64,
2013
+ title: RustBuffer,
2014
+ body: RustBuffer,
2015
+ dataJson: RustBuffer,
2016
+ uniffiOutReturn: UnsafeMutablePointer<RustBuffer>,
2017
+ uniffiCallStatus: UnsafeMutablePointer<RustCallStatus>
2018
+ ) in
2019
+ let makeCall = {
2020
+ () throws -> String in
2021
+ guard let uniffiObj = try? FfiConverterCallbackInterfaceNativeNotifier.handleMap.get(handle: uniffiHandle) else {
2022
+ throw UniffiInternalError.unexpectedStaleHandle
2023
+ }
2024
+ return uniffiObj.sendNotification(
2025
+ title: try FfiConverterString.lift(title),
2026
+ body: try FfiConverterString.lift(body),
2027
+ dataJson: try FfiConverterString.lift(dataJson)
2028
+ )
2029
+ }
2030
+
2031
+
2032
+ let writeReturn = { uniffiOutReturn.pointee = FfiConverterString.lower($0) }
2033
+ uniffiTraitInterfaceCall(
2034
+ callStatus: uniffiCallStatus,
2035
+ makeCall: makeCall,
2036
+ writeReturn: writeReturn
2037
+ )
2038
+ },
2039
+ uniffiFree: { (uniffiHandle: UInt64) -> () in
2040
+ let result = try? FfiConverterCallbackInterfaceNativeNotifier.handleMap.remove(handle: uniffiHandle)
2041
+ if result == nil {
2042
+ print("Uniffi callback interface NativeNotifier: handle missing in uniffiFree")
2043
+ }
2044
+ }
2045
+ )
2046
+ }
2047
+
2048
+ private func uniffiCallbackInitNativeNotifier() {
2049
+ uniffi_native_agent_ffi_fn_init_callback_vtable_nativenotifier(&UniffiCallbackInterfaceNativeNotifier.vtable)
2050
+ }
2051
+
2052
+ // FfiConverter protocol for callback interfaces
2053
+ #if swift(>=5.8)
2054
+ @_documentation(visibility: private)
2055
+ #endif
2056
+ fileprivate struct FfiConverterCallbackInterfaceNativeNotifier {
2057
+ fileprivate static var handleMap = UniffiHandleMap<NativeNotifier>()
2058
+ }
2059
+
2060
+ #if swift(>=5.8)
2061
+ @_documentation(visibility: private)
2062
+ #endif
2063
+ extension FfiConverterCallbackInterfaceNativeNotifier : FfiConverter {
2064
+ typealias SwiftType = NativeNotifier
2065
+ typealias FfiType = UInt64
2066
+
2067
+ #if swift(>=5.8)
2068
+ @_documentation(visibility: private)
2069
+ #endif
2070
+ public static func lift(_ handle: UInt64) throws -> SwiftType {
2071
+ try handleMap.get(handle: handle)
2072
+ }
2073
+
2074
+ #if swift(>=5.8)
2075
+ @_documentation(visibility: private)
2076
+ #endif
2077
+ public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> SwiftType {
2078
+ let handle: UInt64 = try readInt(&buf)
2079
+ return try lift(handle)
2080
+ }
2081
+
2082
+ #if swift(>=5.8)
2083
+ @_documentation(visibility: private)
2084
+ #endif
2085
+ public static func lower(_ v: SwiftType) -> UInt64 {
2086
+ return handleMap.insert(obj: v)
2087
+ }
2088
+
2089
+ #if swift(>=5.8)
2090
+ @_documentation(visibility: private)
2091
+ #endif
2092
+ public static func write(_ v: SwiftType, into buf: inout [UInt8]) {
2093
+ writeInt(&buf, lower(v))
2094
+ }
2095
+ }
2096
+
1889
2097
  #if swift(>=5.8)
1890
2098
  @_documentation(visibility: private)
1891
2099
  #endif
@@ -1933,6 +2141,13 @@ fileprivate struct FfiConverterOptionString: FfiConverterRustBuffer {
1933
2141
  }
1934
2142
  }
1935
2143
  }
2144
+ public func createHandleFromPersistedConfig(configPath: String)throws -> NativeAgentHandle {
2145
+ return try FfiConverterTypeNativeAgentHandle.lift(try rustCallWithError(FfiConverterTypeNativeAgentError.lift) {
2146
+ uniffi_native_agent_ffi_fn_func_create_handle_from_persisted_config(
2147
+ FfiConverterString.lower(configPath),$0
2148
+ )
2149
+ })
2150
+ }
1936
2151
  /**
1937
2152
  * Standalone workspace initialization for cold-start paths.
1938
2153
  */
@@ -1958,6 +2173,9 @@ private var initializationResult: InitializationResult = {
1958
2173
  if bindings_contract_version != scaffolding_contract_version {
1959
2174
  return InitializationResult.contractVersionMismatch
1960
2175
  }
2176
+ if (uniffi_native_agent_ffi_checksum_func_create_handle_from_persisted_config() != 41643) {
2177
+ return InitializationResult.apiChecksumMismatch
2178
+ }
1961
2179
  if (uniffi_native_agent_ffi_checksum_func_init_workspace() != 39423) {
1962
2180
  return InitializationResult.apiChecksumMismatch
1963
2181
  }
@@ -2018,6 +2236,9 @@ private var initializationResult: InitializationResult = {
2018
2236
  if (uniffi_native_agent_ffi_checksum_method_nativeagenthandle_load_session() != 39832) {
2019
2237
  return InitializationResult.apiChecksumMismatch
2020
2238
  }
2239
+ if (uniffi_native_agent_ffi_checksum_method_nativeagenthandle_persist_config() != 63110) {
2240
+ return InitializationResult.apiChecksumMismatch
2241
+ }
2021
2242
  if (uniffi_native_agent_ffi_checksum_method_nativeagenthandle_refresh_token() != 13290) {
2022
2243
  return InitializationResult.apiChecksumMismatch
2023
2244
  }
@@ -2057,6 +2278,9 @@ private var initializationResult: InitializationResult = {
2057
2278
  if (uniffi_native_agent_ffi_checksum_method_nativeagenthandle_set_heartbeat_config() != 33968) {
2058
2279
  return InitializationResult.apiChecksumMismatch
2059
2280
  }
2281
+ if (uniffi_native_agent_ffi_checksum_method_nativeagenthandle_set_notifier() != 58795) {
2282
+ return InitializationResult.apiChecksumMismatch
2283
+ }
2060
2284
  if (uniffi_native_agent_ffi_checksum_method_nativeagenthandle_set_scheduler_config() != 18609) {
2061
2285
  return InitializationResult.apiChecksumMismatch
2062
2286
  }
@@ -2081,8 +2305,12 @@ private var initializationResult: InitializationResult = {
2081
2305
  if (uniffi_native_agent_ffi_checksum_method_nativeeventcallback_on_event() != 29742) {
2082
2306
  return InitializationResult.apiChecksumMismatch
2083
2307
  }
2308
+ if (uniffi_native_agent_ffi_checksum_method_nativenotifier_send_notification() != 9573) {
2309
+ return InitializationResult.apiChecksumMismatch
2310
+ }
2084
2311
 
2085
2312
  uniffiCallbackInitNativeEventCallback()
2313
+ uniffiCallbackInitNativeNotifier()
2086
2314
  return InitializationResult.ok
2087
2315
  }()
2088
2316
 
@@ -257,6 +257,13 @@ typedef void (*UniffiCallbackInterfaceNativeEventCallbackMethod0)(uint64_t, Rust
257
257
  RustCallStatus *_Nonnull uniffiCallStatus
258
258
  );
259
259
 
260
+ #endif
261
+ #ifndef UNIFFI_FFIDEF_CALLBACK_INTERFACE_NATIVE_NOTIFIER_METHOD0
262
+ #define UNIFFI_FFIDEF_CALLBACK_INTERFACE_NATIVE_NOTIFIER_METHOD0
263
+ typedef void (*UniffiCallbackInterfaceNativeNotifierMethod0)(uint64_t, RustBuffer, RustBuffer, RustBuffer, RustBuffer* _Nonnull,
264
+ RustCallStatus *_Nonnull uniffiCallStatus
265
+ );
266
+
260
267
  #endif
261
268
  #ifndef UNIFFI_FFIDEF_V_TABLE_CALLBACK_INTERFACE_NATIVE_EVENT_CALLBACK
262
269
  #define UNIFFI_FFIDEF_V_TABLE_CALLBACK_INTERFACE_NATIVE_EVENT_CALLBACK
@@ -265,6 +272,14 @@ typedef struct UniffiVTableCallbackInterfaceNativeEventCallback {
265
272
  UniffiCallbackInterfaceFree _Nonnull uniffiFree;
266
273
  } UniffiVTableCallbackInterfaceNativeEventCallback;
267
274
 
275
+ #endif
276
+ #ifndef UNIFFI_FFIDEF_V_TABLE_CALLBACK_INTERFACE_NATIVE_NOTIFIER
277
+ #define UNIFFI_FFIDEF_V_TABLE_CALLBACK_INTERFACE_NATIVE_NOTIFIER
278
+ typedef struct UniffiVTableCallbackInterfaceNativeNotifier {
279
+ UniffiCallbackInterfaceNativeNotifierMethod0 _Nonnull sendNotification;
280
+ UniffiCallbackInterfaceFree _Nonnull uniffiFree;
281
+ } UniffiVTableCallbackInterfaceNativeNotifier;
282
+
268
283
  #endif
269
284
  #ifndef UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_FN_CLONE_NATIVEAGENTHANDLE
270
285
  #define UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_FN_CLONE_NATIVEAGENTHANDLE
@@ -376,6 +391,11 @@ RustBuffer uniffi_native_agent_ffi_fn_method_nativeagenthandle_list_skills(void*
376
391
  RustBuffer uniffi_native_agent_ffi_fn_method_nativeagenthandle_load_session(void*_Nonnull ptr, RustBuffer session_key, RustCallStatus *_Nonnull out_status
377
392
  );
378
393
  #endif
394
+ #ifndef UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_FN_METHOD_NATIVEAGENTHANDLE_PERSIST_CONFIG
395
+ #define UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_FN_METHOD_NATIVEAGENTHANDLE_PERSIST_CONFIG
396
+ void uniffi_native_agent_ffi_fn_method_nativeagenthandle_persist_config(void*_Nonnull ptr, RustCallStatus *_Nonnull out_status
397
+ );
398
+ #endif
379
399
  #ifndef UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_FN_METHOD_NATIVEAGENTHANDLE_REFRESH_TOKEN
380
400
  #define UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_FN_METHOD_NATIVEAGENTHANDLE_REFRESH_TOKEN
381
401
  RustBuffer uniffi_native_agent_ffi_fn_method_nativeagenthandle_refresh_token(void*_Nonnull ptr, RustBuffer provider, RustCallStatus *_Nonnull out_status
@@ -441,6 +461,11 @@ void uniffi_native_agent_ffi_fn_method_nativeagenthandle_set_event_callback(void
441
461
  void uniffi_native_agent_ffi_fn_method_nativeagenthandle_set_heartbeat_config(void*_Nonnull ptr, RustBuffer config_json, RustCallStatus *_Nonnull out_status
442
462
  );
443
463
  #endif
464
+ #ifndef UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_FN_METHOD_NATIVEAGENTHANDLE_SET_NOTIFIER
465
+ #define UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_FN_METHOD_NATIVEAGENTHANDLE_SET_NOTIFIER
466
+ void uniffi_native_agent_ffi_fn_method_nativeagenthandle_set_notifier(void*_Nonnull ptr, uint64_t notifier, RustCallStatus *_Nonnull out_status
467
+ );
468
+ #endif
444
469
  #ifndef UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_FN_METHOD_NATIVEAGENTHANDLE_SET_SCHEDULER_CONFIG
445
470
  #define UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_FN_METHOD_NATIVEAGENTHANDLE_SET_SCHEDULER_CONFIG
446
471
  void uniffi_native_agent_ffi_fn_method_nativeagenthandle_set_scheduler_config(void*_Nonnull ptr, RustBuffer config_json, RustCallStatus *_Nonnull out_status
@@ -476,6 +501,16 @@ void uniffi_native_agent_ffi_fn_method_nativeagenthandle_update_skill(void*_Nonn
476
501
  void uniffi_native_agent_ffi_fn_init_callback_vtable_nativeeventcallback(UniffiVTableCallbackInterfaceNativeEventCallback* _Nonnull vtable
477
502
  );
478
503
  #endif
504
+ #ifndef UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_FN_INIT_CALLBACK_VTABLE_NATIVENOTIFIER
505
+ #define UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_FN_INIT_CALLBACK_VTABLE_NATIVENOTIFIER
506
+ void uniffi_native_agent_ffi_fn_init_callback_vtable_nativenotifier(UniffiVTableCallbackInterfaceNativeNotifier* _Nonnull vtable
507
+ );
508
+ #endif
509
+ #ifndef UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_FN_FUNC_CREATE_HANDLE_FROM_PERSISTED_CONFIG
510
+ #define UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_FN_FUNC_CREATE_HANDLE_FROM_PERSISTED_CONFIG
511
+ void*_Nonnull uniffi_native_agent_ffi_fn_func_create_handle_from_persisted_config(RustBuffer config_path, RustCallStatus *_Nonnull out_status
512
+ );
513
+ #endif
479
514
  #ifndef UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_FN_FUNC_INIT_WORKSPACE
480
515
  #define UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_FN_FUNC_INIT_WORKSPACE
481
516
  void uniffi_native_agent_ffi_fn_func_init_workspace(RustBuffer config, RustCallStatus *_Nonnull out_status
@@ -759,6 +794,12 @@ void ffi_native_agent_ffi_rust_future_free_void(uint64_t handle
759
794
  #ifndef UNIFFI_FFIDEF_FFI_NATIVE_AGENT_FFI_RUST_FUTURE_COMPLETE_VOID
760
795
  #define UNIFFI_FFIDEF_FFI_NATIVE_AGENT_FFI_RUST_FUTURE_COMPLETE_VOID
761
796
  void ffi_native_agent_ffi_rust_future_complete_void(uint64_t handle, RustCallStatus *_Nonnull out_status
797
+ );
798
+ #endif
799
+ #ifndef UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_CHECKSUM_FUNC_CREATE_HANDLE_FROM_PERSISTED_CONFIG
800
+ #define UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_CHECKSUM_FUNC_CREATE_HANDLE_FROM_PERSISTED_CONFIG
801
+ uint16_t uniffi_native_agent_ffi_checksum_func_create_handle_from_persisted_config(void
802
+
762
803
  );
763
804
  #endif
764
805
  #ifndef UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_CHECKSUM_FUNC_INIT_WORKSPACE
@@ -879,6 +920,12 @@ uint16_t uniffi_native_agent_ffi_checksum_method_nativeagenthandle_list_skills(v
879
920
  #define UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_CHECKSUM_METHOD_NATIVEAGENTHANDLE_LOAD_SESSION
880
921
  uint16_t uniffi_native_agent_ffi_checksum_method_nativeagenthandle_load_session(void
881
922
 
923
+ );
924
+ #endif
925
+ #ifndef UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_CHECKSUM_METHOD_NATIVEAGENTHANDLE_PERSIST_CONFIG
926
+ #define UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_CHECKSUM_METHOD_NATIVEAGENTHANDLE_PERSIST_CONFIG
927
+ uint16_t uniffi_native_agent_ffi_checksum_method_nativeagenthandle_persist_config(void
928
+
882
929
  );
883
930
  #endif
884
931
  #ifndef UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_CHECKSUM_METHOD_NATIVEAGENTHANDLE_REFRESH_TOKEN
@@ -957,6 +1004,12 @@ uint16_t uniffi_native_agent_ffi_checksum_method_nativeagenthandle_set_event_cal
957
1004
  #define UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_CHECKSUM_METHOD_NATIVEAGENTHANDLE_SET_HEARTBEAT_CONFIG
958
1005
  uint16_t uniffi_native_agent_ffi_checksum_method_nativeagenthandle_set_heartbeat_config(void
959
1006
 
1007
+ );
1008
+ #endif
1009
+ #ifndef UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_CHECKSUM_METHOD_NATIVEAGENTHANDLE_SET_NOTIFIER
1010
+ #define UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_CHECKSUM_METHOD_NATIVEAGENTHANDLE_SET_NOTIFIER
1011
+ uint16_t uniffi_native_agent_ffi_checksum_method_nativeagenthandle_set_notifier(void
1012
+
960
1013
  );
961
1014
  #endif
962
1015
  #ifndef UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_CHECKSUM_METHOD_NATIVEAGENTHANDLE_SET_SCHEDULER_CONFIG
@@ -1005,6 +1058,12 @@ uint16_t uniffi_native_agent_ffi_checksum_constructor_nativeagenthandle_new(void
1005
1058
  #define UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_CHECKSUM_METHOD_NATIVEEVENTCALLBACK_ON_EVENT
1006
1059
  uint16_t uniffi_native_agent_ffi_checksum_method_nativeeventcallback_on_event(void
1007
1060
 
1061
+ );
1062
+ #endif
1063
+ #ifndef UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_CHECKSUM_METHOD_NATIVENOTIFIER_SEND_NOTIFICATION
1064
+ #define UNIFFI_FFIDEF_UNIFFI_NATIVE_AGENT_FFI_CHECKSUM_METHOD_NATIVENOTIFIER_SEND_NOTIFICATION
1065
+ uint16_t uniffi_native_agent_ffi_checksum_method_nativenotifier_send_notification(void
1066
+
1008
1067
  );
1009
1068
  #endif
1010
1069
  #ifndef UNIFFI_FFIDEF_FFI_NATIVE_AGENT_FFI_UNIFFI_CONTRACT_VERSION
@@ -3,6 +3,7 @@ import Capacitor
3
3
 
4
4
  @objc(NativeAgentPlugin)
5
5
  public class NativeAgentPlugin: CAPPlugin, CAPBridgedPlugin {
6
+ private static let configPathKey = "mobilecron:native-agent-config-path"
6
7
  public let identifier = "NativeAgentPlugin"
7
8
  public let jsName = "NativeAgent"
8
9
  public let pluginMethods: [CAPPluginMethod] = [
@@ -82,6 +83,13 @@ public class NativeAgentPlugin: CAPPlugin, CAPBridgedPlugin {
82
83
  return path
83
84
  }
84
85
 
86
+ private func resolveConfigPath(workspacePath: String) -> String {
87
+ URL(fileURLWithPath: workspacePath)
88
+ .deletingLastPathComponent()
89
+ .appendingPathComponent(".native-agent-config.json")
90
+ .path
91
+ }
92
+
85
93
  private func withHandle(_ call: CAPPluginCall, _ block: @escaping (NativeAgentHandle) -> Void) {
86
94
  guard let h = handle else {
87
95
  return call.reject("NativeAgent not initialized — call initialize() first")
@@ -136,14 +144,21 @@ public class NativeAgentPlugin: CAPPlugin, CAPBridgedPlugin {
136
144
 
137
145
  DispatchQueue.global(qos: .userInitiated).async { [self] in
138
146
  do {
147
+ let resolvedWorkspacePath = self.resolvePath(workspacePath)
139
148
  let config = InitConfig(
140
149
  dbPath: self.resolvePath(dbPath),
141
- workspacePath: self.resolvePath(workspacePath),
150
+ workspacePath: resolvedWorkspacePath,
142
151
  authProfilesPath: self.resolvePath(authProfilesPath)
143
152
  )
144
153
  let h = try NativeAgentHandle(config: config)
145
154
  try h.setEventCallback(callback: NativeAgentEventBridge(plugin: self))
155
+ try h.setNotifier(notifier: NativeNotifierImpl())
156
+ try h.persistConfig()
146
157
  self.handle = h
158
+ UserDefaults.standard.set(
159
+ self.resolveConfigPath(workspacePath: resolvedWorkspacePath),
160
+ forKey: Self.configPathKey
161
+ )
147
162
  call.resolve()
148
163
  } catch {
149
164
  call.reject("Failed to initialize NativeAgent: \(error.localizedDescription)")
@@ -0,0 +1,25 @@
1
+ import Foundation
2
+ import UserNotifications
3
+
4
+ public final class NativeNotifierImpl: NativeNotifier {
5
+ public init() {}
6
+
7
+ public func sendNotification(title: String, body: String, dataJson: String) -> String {
8
+ let identifier = UUID().uuidString
9
+ let content = UNMutableNotificationContent()
10
+ content.title = title
11
+ content.body = body
12
+ if let data = dataJson.data(using: .utf8),
13
+ let json = try? JSONSerialization.jsonObject(with: data) as? [AnyHashable: Any] {
14
+ content.userInfo = json
15
+ }
16
+
17
+ let request = UNNotificationRequest(
18
+ identifier: identifier,
19
+ content: content,
20
+ trigger: nil
21
+ )
22
+ UNUserNotificationCenter.current().add(request)
23
+ return identifier
24
+ }
25
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "capacitor-native-agent",
3
- "version": "0.3.2",
3
+ "version": "0.3.4",
4
4
  "description": "Native AI agent loop for Capacitor — runs LLM completions, tool execution, and cron jobs in native Rust, enabling background execution.",
5
5
  "main": "dist/esm/index.js",
6
6
  "types": "dist/esm/index.d.ts",