Bridge: advertise node capabilities

This commit is contained in:
Peter Steinberger
2025-12-17 20:03:27 +00:00
parent 0677567cdd
commit 079c1d8786
8 changed files with 97 additions and 19 deletions

View File

@@ -178,6 +178,10 @@ class NodeRuntime(context: Context) {
val resolved =
if (storedToken.isNullOrBlank()) {
_statusText.value = "Pairing…"
val caps = buildList {
add("canvas")
if (cameraEnabled.value) add("camera")
}
BridgePairingClient().pairAndHello(
endpoint = endpoint,
hello =
@@ -187,6 +191,7 @@ class NodeRuntime(context: Context) {
token = null,
platform = "Android",
version = "dev",
caps = caps,
),
)
} else {
@@ -209,6 +214,11 @@ class NodeRuntime(context: Context) {
token = authToken,
platform = "Android",
version = "dev",
caps =
buildList {
add("canvas")
if (cameraEnabled.value) add("camera")
},
),
)
}

View File

@@ -3,6 +3,7 @@ package com.steipete.clawdis.node.bridge
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonArray
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.JsonNull
@@ -24,6 +25,7 @@ class BridgePairingClient {
val token: String?,
val platform: String?,
val version: String?,
val caps: List<String>?,
)
data class PairResult(val ok: Boolean, val token: String?, val error: String? = null)
@@ -55,6 +57,7 @@ class BridgePairingClient {
hello.token?.let { put("token", JsonPrimitive(it)) }
hello.platform?.let { put("platform", JsonPrimitive(it)) }
hello.version?.let { put("version", JsonPrimitive(it)) }
hello.caps?.let { put("caps", JsonArray(it.map(::JsonPrimitive))) }
},
)
@@ -76,6 +79,7 @@ class BridgePairingClient {
hello.displayName?.let { put("displayName", JsonPrimitive(it)) }
hello.platform?.let { put("platform", JsonPrimitive(it)) }
hello.version?.let { put("version", JsonPrimitive(it)) }
hello.caps?.let { put("caps", JsonArray(it.map(::JsonPrimitive))) }
},
)

View File

@@ -12,6 +12,7 @@ import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.withContext
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonArray
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.JsonNull
import kotlinx.serialization.json.JsonElement
@@ -39,6 +40,7 @@ class BridgeSession(
val token: String?,
val platform: String?,
val version: String?,
val caps: List<String>?,
)
data class InvokeRequest(val id: String, val command: String, val paramsJson: String?)
@@ -191,6 +193,7 @@ class BridgeSession(
hello.token?.let { put("token", JsonPrimitive(it)) }
hello.platform?.let { put("platform", JsonPrimitive(it)) }
hello.version?.let { put("version", JsonPrimitive(it)) }
hello.caps?.let { put("caps", JsonArray(it.map(::JsonPrimitive))) }
},
)