chore: quarantine Quest experiment
This commit is contained in:
@@ -14,7 +14,7 @@ function classifyCiPaths(paths) {
|
||||
const under = (prefixes) => paths.some((path) => prefixes.some((prefix) => path.startsWith(prefix)));
|
||||
|
||||
return {
|
||||
android: forceAll || under(['app/', 'relay-core/', 'relay-ui/', 'ui-preview/', 'quest/', 'gradle/']) || exact([
|
||||
android: forceAll || under(['app/', 'gradle/']) || exact([
|
||||
'build.gradle.kts', 'settings.gradle.kts', 'gradle.properties', 'gradlew', 'gradlew.bat',
|
||||
'scripts/check-android-locales.py', 'scripts/android-locale-harness.py',
|
||||
'scripts/check-android-collection-apis.py', 'scripts/check-android-native-compat.py',
|
||||
|
||||
@@ -16,7 +16,7 @@ const none = {
|
||||
|
||||
assert.deepEqual(classifyCiPaths(['README.md']), none);
|
||||
assert.deepEqual(classifyCiPaths(['desktop/src/cli.ts']), { ...none, desktop: true });
|
||||
assert.deepEqual(classifyCiPaths(['relay-core/src/main/kotlin/Wire.kt']), { ...none, android: true });
|
||||
assert.deepEqual(classifyCiPaths(['experiments/quest/src/main/kotlin/Quest.kt']), none);
|
||||
assert.deepEqual(classifyCiPaths(['scripts/check-android-release-notes.py']), { ...none, android: true });
|
||||
assert.deepEqual(classifyCiPaths(['scripts/check-android-native-compat.py']), { ...none, android: true });
|
||||
assert.deepEqual(classifyCiPaths(['scripts/android_release_artifacts.py']), { ...none, android: true });
|
||||
|
||||
@@ -20,10 +20,6 @@ on:
|
||||
branches: [main, dev]
|
||||
paths:
|
||||
- "app/**"
|
||||
- "relay-core/**"
|
||||
- "relay-ui/**"
|
||||
- "ui-preview/**"
|
||||
- "quest/**"
|
||||
- "gradle/**"
|
||||
- "build.gradle.kts"
|
||||
- "settings.gradle.kts"
|
||||
|
||||
+1
-4
@@ -24,10 +24,7 @@ Thumbs.db
|
||||
local.properties
|
||||
/build/
|
||||
/app/build/
|
||||
/relay-core/build/
|
||||
/relay-ui/build/
|
||||
/ui-preview/build/
|
||||
/quest/build/
|
||||
/experiments/quest/**/build/
|
||||
/app/release/
|
||||
*.apk
|
||||
*.aab
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# Hermes Relay Android UI Design Reference
|
||||
|
||||
Status: design reference for future Android, Quest, and pairing-flow work.
|
||||
Status: design reference for Android and pairing-flow work. The quarantined
|
||||
Quest prototype is retained under `experiments/quest/` for historical context.
|
||||
|
||||
Use this document when a future session asks for mobile UI polish, pairing flow changes, QR scanning, connection setup, onboarding, terminal cockpit, or "make it feel more like Orca." It is intentionally a reference, not an implementation task list.
|
||||
|
||||
@@ -11,7 +12,6 @@ This project should keep its native Android stack:
|
||||
- Kotlin + Jetpack Compose + Material 3 for app chrome and interaction flows.
|
||||
- CameraX + ML Kit for QR scanning.
|
||||
- Android WebView only where it is already the correct tool, such as xterm.
|
||||
- Meta Spatial SDK for Quest/XR surfaces where needed.
|
||||
|
||||
Do not propose a React Native or Expo migration just because Orca's mobile app uses that stack. The useful lesson from Orca is the visual discipline and pairing UX, not the framework choice.
|
||||
|
||||
@@ -205,7 +205,10 @@ Target layout:
|
||||
|
||||
### Quest / XR
|
||||
|
||||
Use this reference for Quest visual tone, but do not force the phone layout into XR. Quest should keep the spatial cockpit concept:
|
||||
The inactive Quest prototype is quarantined under `experiments/quest/` and is
|
||||
not part of the production Android build or normal CI. If development resumes,
|
||||
use this reference for its visual tone, but do not force the phone layout into
|
||||
XR. The spatial cockpit concept was:
|
||||
|
||||
- MorphingSphere and voice pipeline remain first-class.
|
||||
- Terminal panels should be spatial, readable, and anchored.
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
# Hermes Quest
|
||||
|
||||
Spatial SDK Quest app for the Hermes relay terminal cockpit.
|
||||
> **Status: quarantined experiment.** This project is not shipped, supported,
|
||||
> or exercised by normal Hermes-Relay CI. It is preserved as a standalone
|
||||
> prototype for a possible future spatial terminal and voice client.
|
||||
|
||||
Spatial SDK Quest prototype for the Hermes relay terminal cockpit. Its
|
||||
Quest-specific transport and UI modules live beside it so the production
|
||||
Android build remains independent.
|
||||
|
||||
## Build
|
||||
|
||||
@@ -8,19 +14,19 @@ From the repo root:
|
||||
|
||||
```powershell
|
||||
$env:ANDROID_HOME='C:\Users\Bailey\AppData\Local\Android\Sdk'
|
||||
.\gradlew.bat :quest:assembleDebug --console=plain
|
||||
.\gradlew.bat -p experiments\quest assembleDebug --console=plain
|
||||
```
|
||||
|
||||
APK:
|
||||
|
||||
```text
|
||||
quest\build\outputs\apk\debug\quest-debug.apk
|
||||
experiments\quest\build\outputs\apk\debug\quest-debug.apk
|
||||
```
|
||||
|
||||
Install on a connected Quest:
|
||||
|
||||
```powershell
|
||||
adb install -r quest\build\outputs\apk\debug\quest-debug.apk
|
||||
adb install -r experiments\quest\build\outputs\apk\debug\quest-debug.apk
|
||||
adb shell monkey -p com.axiomlabs.hermesquest.debug 1
|
||||
```
|
||||
|
||||
@@ -54,7 +60,9 @@ and MorphingSphere listening/speaking hooks.
|
||||
|
||||
## Tooling
|
||||
|
||||
Use Android Studio for Kotlin, Compose, Gradle, logcat, and direct install/run. Open the repo root when working across `:app`, `:relay-core`, and `:relay-ui`; open `quest/` directly when focusing on Spatial SDK or Meta Spatial Editor tasks.
|
||||
Use Android Studio for Kotlin, Compose, Gradle, logcat, and direct install/run.
|
||||
Open `experiments/quest/` as its own Gradle project. The production repo root
|
||||
does not include this experiment in its project graph.
|
||||
|
||||
Use Meta Quest Developer Hub for headset setup, ADB pairing, install/uninstall, casting, logcat, and quick device state checks.
|
||||
|
||||
@@ -62,8 +70,8 @@ Use Meta Spatial Editor when editing/exporting `.metaspatial`/`.glxf` scenes or
|
||||
|
||||
```powershell
|
||||
$env:ANDROID_HOME='C:\Users\Bailey\AppData\Local\Android\Sdk'
|
||||
.\gradlew.bat :quest:export -Pquest.exportScenes=true --console=plain
|
||||
.\gradlew.bat :quest:hotReload -Pquest.exportScenes=true --console=plain
|
||||
.\gradlew.bat -p experiments\quest export -Pquest.exportScenes=true --console=plain
|
||||
.\gradlew.bat -p experiments\quest hotReload -Pquest.exportScenes=true --console=plain
|
||||
```
|
||||
|
||||
Normal `assembleDebug` does not require Meta Spatial Editor. The app creates a programmatic spatial terminal panel when exported GLXF scene assets are absent.
|
||||
@@ -7,6 +7,7 @@ pluginManagement {
|
||||
plugins {
|
||||
id("com.android.application") version "9.3.2"
|
||||
id("com.android.library") version "9.3.2"
|
||||
id("org.jetbrains.kotlin.jvm") version "2.4.10"
|
||||
id("org.jetbrains.kotlin.plugin.compose") version "2.4.10"
|
||||
id("org.jetbrains.kotlin.plugin.serialization") version "2.4.10"
|
||||
}
|
||||
@@ -20,10 +21,8 @@ dependencyResolutionManagement {
|
||||
}
|
||||
}
|
||||
|
||||
rootProject.name = "quest"
|
||||
rootProject.name = "hermes-quest-experiment"
|
||||
|
||||
include(":relay-core")
|
||||
include(":relay-ui")
|
||||
|
||||
project(":relay-core").projectDir = file("../relay-core")
|
||||
project(":relay-ui").projectDir = file("../relay-ui")
|
||||
include(":ui-preview")
|
||||
@@ -2,8 +2,9 @@
|
||||
|
||||
A JVM-only **Compose for Desktop** module for iterating on presentational
|
||||
composables **on the PC with hot reload** — edit, see it live, no
|
||||
build/deploy/test loop on a device. It is **not shipped**: nothing in the app,
|
||||
plugin, or CLI release builds depends on it.
|
||||
build/deploy/test loop on a device. It belongs only to the quarantined Quest
|
||||
experiment and is **not shipped**: nothing in the production app, plugin, or
|
||||
CLI release builds depends on it.
|
||||
|
||||
## Why this exists
|
||||
|
||||
@@ -21,16 +22,15 @@ module *or* to the shared `MorphingSphereCore.kt` reload live.
|
||||
**Cold run (no hot reload):**
|
||||
|
||||
```bash
|
||||
./gradlew :ui-preview:run
|
||||
./gradlew -p experiments/quest :ui-preview:run
|
||||
```
|
||||
|
||||
> **First-sync check:** this is the only piece of the dev tooling that pins a
|
||||
> Compose Multiplatform version (`org.jetbrains.compose` `1.10.3` in
|
||||
> `build.gradle.kts`) against the repo's Kotlin (`2.3.21`). If a future Kotlin bump
|
||||
> **First-sync check:** this experimental tooling pins a Compose Multiplatform
|
||||
> version (`org.jetbrains.compose` `1.12.0` in `build.gradle.kts`) against the
|
||||
> Quest build's Kotlin (`2.4.10`). If a future Kotlin bump
|
||||
> breaks the pairing, realign per the
|
||||
> [Compose compatibility matrix](https://kotlinlang.org/docs/multiplatform/compose-compatibility-and-versioning.html).
|
||||
> The module is fully additive — removing the `include(":ui-preview")` line in
|
||||
> `settings.gradle.kts` drops it with zero impact on shipped builds.
|
||||
> The module is fully additive inside the quarantined build.
|
||||
|
||||
## What can live here
|
||||
|
||||
@@ -41,16 +41,15 @@ the network must be fed **fake state** from the gallery controls.
|
||||
|
||||
### The single-source-of-truth pattern
|
||||
|
||||
The sphere is the model to copy. Its **algorithm** lives once in
|
||||
`MorphingSphereCore.kt` (pure `kotlin.math`), source-shared into this module from
|
||||
`:relay-ui` and guarded by `MorphingSphereCoreParityTest`. Each surface supplies
|
||||
only a thin renderer:
|
||||
Inside this experiment, the sphere algorithm lives in
|
||||
`relay-ui/.../MorphingSphereCore.kt` (pure `kotlin.math`) and is source-shared
|
||||
into this module. The production Android and web sphere implementations remain
|
||||
separate sources of truth outside the experiment.
|
||||
|
||||
| Surface | Renderer | Lives in |
|
||||
|---|---|---|
|
||||
| Android | `MorphingSphere.kt` (Canvas + `@Preview`) | `:relay-ui`, `:app` |
|
||||
| Desktop | `DesktopSphere.kt` (Canvas, no `@Preview`) | this module |
|
||||
| Web | `sphere.js` | `preview/web/` |
|
||||
| Quest experiment | `MorphingSphere.kt` (Canvas + `@Preview`) | `:relay-ui` |
|
||||
| Desktop experiment | `DesktopSphere.kt` (Canvas, no `@Preview`) | this module |
|
||||
|
||||
To add a component: hoist it to a value-only `@Composable`, add it to
|
||||
`PreviewGallery` in `Main.kt`, and drive it from controls. If it needs logic that
|
||||
@@ -32,7 +32,6 @@ media3 = "1.11.0"
|
||||
androidVad = "2.0.10"
|
||||
sherpaOnnx = "v1.13.4"
|
||||
onnxRuntime = "1.27.0"
|
||||
spatialsdk = "0.13.2"
|
||||
play-app-update = "2.1.0"
|
||||
|
||||
[libraries]
|
||||
@@ -98,17 +97,6 @@ camera-view = { group = "androidx.camera", name = "camera-view", version.ref = "
|
||||
media3-exoplayer = { group = "androidx.media3", name = "media3-exoplayer", version.ref = "media3" }
|
||||
|
||||
# Meta Spatial SDK
|
||||
meta-spatial-sdk-base = { group = "com.meta.spatial", name = "meta-spatial-sdk", version.ref = "spatialsdk" }
|
||||
meta-spatial-sdk-compose = { group = "com.meta.spatial", name = "meta-spatial-sdk-compose", version.ref = "spatialsdk" }
|
||||
meta-spatial-sdk-ovrmetrics = { group = "com.meta.spatial", name = "meta-spatial-sdk-ovrmetrics", version.ref = "spatialsdk" }
|
||||
meta-spatial-sdk-toolkit = { group = "com.meta.spatial", name = "meta-spatial-sdk-toolkit", version.ref = "spatialsdk" }
|
||||
meta-spatial-sdk-vr = { group = "com.meta.spatial", name = "meta-spatial-sdk-vr", version.ref = "spatialsdk" }
|
||||
meta-spatial-sdk-isdk = { group = "com.meta.spatial", name = "meta-spatial-sdk-isdk", version.ref = "spatialsdk" }
|
||||
meta-spatial-sdk-castinputforward = { group = "com.meta.spatial", name = "meta-spatial-sdk-castinputforward", version.ref = "spatialsdk" }
|
||||
meta-spatial-sdk-hotreload = { group = "com.meta.spatial", name = "meta-spatial-sdk-hotreload", version.ref = "spatialsdk" }
|
||||
meta-spatial-sdk-datamodelinspector = { group = "com.meta.spatial", name = "meta-spatial-sdk-datamodelinspector", version.ref = "spatialsdk" }
|
||||
meta-spatial-sdk-uiset = { group = "com.meta.spatial", name = "meta-spatial-sdk-uiset", version.ref = "spatialsdk" }
|
||||
meta-spatial-sdk-mruk = { group = "com.meta.spatial", name = "meta-spatial-sdk-mruk", version.ref = "spatialsdk" }
|
||||
|
||||
# android-vad (Silero) — on-device voice activity detection for barge-in (B2)
|
||||
android-vad-silero = { group = "com.github.gkonovalov.android-vad", name = "silero", version.ref = "androidVad" }
|
||||
|
||||
@@ -27,9 +27,3 @@ dependencyResolutionManagement {
|
||||
|
||||
rootProject.name = "hermes-relay"
|
||||
include(":app")
|
||||
include(":relay-core")
|
||||
include(":relay-ui")
|
||||
// Desktop Compose Hot Reload harness for fast UI iteration. Not shipped — no
|
||||
// release artifact depends on it. See docs/ui-preview / ui-preview/README.md.
|
||||
include(":ui-preview")
|
||||
includeBuild("quest")
|
||||
|
||||
Reference in New Issue
Block a user