@glassly/engine 0.3.8-dev.1014 → 0.3.8-dev.1015
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.
- package/build/generated/releaseMetadata.js +3 -3
- package/build/generated/releaseMetadata.js.map +1 -1
- package/build/services/GlassesSensorService.js +1 -1
- package/build/services/GlassesSensorService.js.map +1 -1
- package/package.json +7 -7
- package/src/generated/releaseMetadata.ts +3 -3
- package/src/services/GlassesSensorService.ts +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export const ENGINE_RELEASE_METADATA = Object.freeze({
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"familyBaseVersion": "0.3.8",
|
|
4
|
-
"releaseIdentity": "0.3.8-dev.
|
|
5
|
-
"releaseSetId": "glassly-0.3.8-dev.
|
|
6
|
-
"sourceCommit": "
|
|
4
|
+
"releaseIdentity": "0.3.8-dev.1015",
|
|
5
|
+
"releaseSetId": "glassly-0.3.8-dev.1015",
|
|
6
|
+
"sourceCommit": "5c28c73387e99d17f36887d985459628009a130b",
|
|
7
7
|
"otaManifestUrl": null,
|
|
8
8
|
"otaManifestSha256": null
|
|
9
9
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"releaseMetadata.js","sourceRoot":"","sources":["../../src/generated/releaseMetadata.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,uBAAuB,GAAoC,MAAM,CAAC,MAAM,CAAC;IACpF,eAAe,EAAE,CAAC;IAClB,mBAAmB,EAAE,OAAO;IAC5B,iBAAiB,EAAE,gBAAgB;IACnC,cAAc,EAAE,wBAAwB;IACxC,cAAc,EAAE,0CAA0C;IAC1D,gBAAgB,EAAE,IAAI;IACtB,mBAAmB,EAAE,IAAI;CAC1B,CAAC,CAAA","sourcesContent":["/** Generated by release CI. Do not edit in a release checkout. */\nexport interface EngineReleaseMetadata {\n schemaVersion: 1\n familyBaseVersion: string | null\n releaseIdentity: string | null\n releaseSetId: string | null\n sourceCommit: string | null\n otaManifestUrl: string | null\n otaManifestSha256: string | null\n}\n\nexport const ENGINE_RELEASE_METADATA: Readonly<EngineReleaseMetadata> = Object.freeze({\n \"schemaVersion\": 1,\n \"familyBaseVersion\": \"0.3.8\",\n \"releaseIdentity\": \"0.3.8-dev.
|
|
1
|
+
{"version":3,"file":"releaseMetadata.js","sourceRoot":"","sources":["../../src/generated/releaseMetadata.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,uBAAuB,GAAoC,MAAM,CAAC,MAAM,CAAC;IACpF,eAAe,EAAE,CAAC;IAClB,mBAAmB,EAAE,OAAO;IAC5B,iBAAiB,EAAE,gBAAgB;IACnC,cAAc,EAAE,wBAAwB;IACxC,cAAc,EAAE,0CAA0C;IAC1D,gBAAgB,EAAE,IAAI;IACtB,mBAAmB,EAAE,IAAI;CAC1B,CAAC,CAAA","sourcesContent":["/** Generated by release CI. Do not edit in a release checkout. */\nexport interface EngineReleaseMetadata {\n schemaVersion: 1\n familyBaseVersion: string | null\n releaseIdentity: string | null\n releaseSetId: string | null\n sourceCommit: string | null\n otaManifestUrl: string | null\n otaManifestSha256: string | null\n}\n\nexport const ENGINE_RELEASE_METADATA: Readonly<EngineReleaseMetadata> = Object.freeze({\n \"schemaVersion\": 1,\n \"familyBaseVersion\": \"0.3.8\",\n \"releaseIdentity\": \"0.3.8-dev.1015\",\n \"releaseSetId\": \"glassly-0.3.8-dev.1015\",\n \"sourceCommit\": \"5c28c73387e99d17f36887d985459628009a130b\",\n \"otaManifestUrl\": null,\n \"otaManifestSha256\": null\n})\n"]}
|
|
@@ -109,7 +109,7 @@ export class GlassesSensorService {
|
|
|
109
109
|
});
|
|
110
110
|
}
|
|
111
111
|
commandFailed() {
|
|
112
|
-
fail(MiniappErrorCode.INTERNAL, "Sensor command failed:
|
|
112
|
+
fail(MiniappErrorCode.INTERNAL, "Sensor command failed: the glasses need Glassly custom firmware with this sensor, and on the G2 an active miniapp display");
|
|
113
113
|
}
|
|
114
114
|
/** Miniapps currently subscribed to the glasses compass stream. Replaces the previous set. */
|
|
115
115
|
setCompassSubscribers(apps) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlassesSensorService.js","sourceRoot":"","sources":["../../src/services/GlassesSensorService.ts"],"names":[],"mappings":"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","sourcesContent":["import BluetoothSdk from \"@glassly/bluetooth-sdk/internal\"\nimport {MiniappErrorCode} from \"@glassly/miniapp/protocol\"\nimport {BgTimer} from \"../utils/timers\"\n\ntype Sensor = \"light\" | \"compass\"\ntype Operation = \"query\" | \"start\" | \"stop\"\ntype Options = Record<string, number>\ntype Control = (sensor: Sensor, operation: Operation, options: Options) => Promise<boolean>\ntype Owner = {app: string; options: Options}\n\nconst RANGES: Record<Sensor, Record<string, [number, number]>> = {\n light: {intervalMs: [100, 5000], minDelta: [0, 65535], heartbeatMs: [0, 65535]},\n compass: {intervalMs: [50, 2000], minChangeDegrees: [0, 359]},\n}\nconst COMPASS_DEFAULTS: Options = {intervalMs: 1000, minChangeDegrees: 5}\nconst COMPASS_RETRY_MS = [2000, 4000, 8000]\n\nfunction fail(code: MiniappErrorCode, message: string): never {\n throw Object.assign(new Error(message), {code})\n}\n\nfunction sameOptions(a: Options | null, b: Options | null): boolean {\n if (!a || !b) return a === b\n const keys = new Set([...Object.keys(a), ...Object.keys(b)])\n for (const key of keys) if (a[key] !== b[key]) return false\n return true\n}\n\n/**\n * Light: explicit, miniapp-scoped ownership. A subscriber alone never changes auto brightness.\n * Compass: demand-driven. It runs while any miniapp is subscribed; `start(options)` only\n * records that miniapp's override and everyone is served the smallest interval and\n * threshold requested. Native navigation temporarily borrows both; its stock configuration wins.\n */\nexport class GlassesSensorService {\n private lightOwner: Owner | null = null\n private compassSubscribers = new Set<string>()\n private compassOverrides = new Map<string, Options>()\n /** Options the firmware currently runs; null while stopped. */\n private compassApplied: Options | null = null\n private compassRetry: number | null = null\n private compassRetryAttempt = 0\n private pending: Promise<unknown> = Promise.resolve()\n private navigationActive = false\n private generation = 0\n\n constructor(private readonly control: Control) {}\n\n private serial<T>(work: () => Promise<T>): Promise<T> {\n const next = this.pending.then(work)\n this.pending = next.catch(() => {})\n return next\n }\n\n private validate(payload: Record<string, unknown>): {sensor: Sensor; operation: Operation; options: Options} {\n const sensor = payload.sensor\n const operation = payload.operation\n if (sensor !== \"light\" && sensor !== \"compass\") fail(MiniappErrorCode.INVALID_ARGUMENT, \"Unknown sensor\")\n if (operation !== \"start\" && operation !== \"stop\" && !(sensor === \"light\" && operation === \"query\")) {\n fail(MiniappErrorCode.INVALID_ARGUMENT, \"Unknown sensor operation\")\n }\n const raw = payload.options ?? {}\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw))\n fail(MiniappErrorCode.INVALID_ARGUMENT, \"Invalid sensor options\")\n const ranges = RANGES[sensor]\n const options: Options = {}\n for (const [key, value] of Object.entries(raw)) {\n const range = Object.prototype.hasOwnProperty.call(ranges, key) ? ranges[key] : undefined\n if (!range || typeof value !== \"number\" || !Number.isInteger(value) || value < range[0] || value > range[1]) {\n fail(MiniappErrorCode.INVALID_ARGUMENT, `Invalid ${key}`)\n }\n options[key] = value\n }\n return {sensor, operation, options}\n }\n\n request(app: string, payload: Record<string, unknown>): Promise<void> {\n const generation = this.generation\n return this.serial(async () => {\n if (generation !== this.generation) fail(MiniappErrorCode.NOT_CONNECTED, \"Glasses disconnected\")\n const {sensor, operation, options} = this.validate(payload)\n if (sensor === \"compass\") {\n if (operation === \"start\") this.compassOverrides.set(app, options)\n else this.compassOverrides.delete(app)\n if (this.navigationActive) return\n await this.applyCompass(generation, true)\n return\n }\n const owner = this.lightOwner\n if (operation !== \"query\" && owner && owner.app !== app) {\n fail(MiniappErrorCode.INVALID_ARGUMENT, \"This sensor is controlled by another miniapp\")\n }\n if (operation === \"stop\" && !owner) return\n if (this.navigationActive) {\n if (operation === \"stop\") {\n this.lightOwner = null\n return\n }\n fail(MiniappErrorCode.INVALID_ARGUMENT, \"Native navigation currently owns the glasses sensors\")\n }\n // Keep cleanup ownership even after an ambiguous transport failure: the firmware\n // may have applied the command before its ACK was lost.\n if (operation === \"start\") this.lightOwner = {app, options}\n if (!(await this.control(\"light\", operation, options))) this.commandFailed()\n if (generation !== this.generation) fail(MiniappErrorCode.NOT_CONNECTED, \"Glasses disconnected\")\n if (operation === \"stop\") this.lightOwner = null\n })\n }\n\n private commandFailed(): never {\n fail(\n MiniappErrorCode.INTERNAL,\n \"Sensor command failed: connect G2 custom firmware and keep its miniapp display active\",\n )\n }\n\n /** Miniapps currently subscribed to the glasses compass stream. Replaces the previous set. */\n setCompassSubscribers(apps: Iterable<string>): Promise<void> {\n const generation = this.generation\n return this.serial(async () => {\n this.compassSubscribers = new Set(apps)\n if (generation !== this.generation || this.navigationActive) return\n await this.applyCompass(generation, false)\n })\n }\n\n private compassDemand(): Options | null {\n if (this.compassSubscribers.size === 0 && this.compassOverrides.size === 0) return null\n const requests = [...this.compassOverrides.values()].map((o) => ({...COMPASS_DEFAULTS, ...o}))\n for (const app of this.compassSubscribers) if (!this.compassOverrides.has(app)) requests.push(COMPASS_DEFAULTS)\n const demand: Options = {}\n for (const key of Object.keys(COMPASS_DEFAULTS)) demand[key] = Math.min(...requests.map((r) => r[key]))\n return demand\n }\n\n /**\n * Bring the firmware in line with current demand. Explicit requests surface failures;\n * subscription-driven applies stay silent (stock firmware, no CFW carrier yet) and retry\n * a few times so a compass subscribed before firmware classification still starts.\n */\n private async applyCompass(generation: number, explicit: boolean): Promise<void> {\n this.clearCompassRetry()\n const demand = this.compassDemand()\n if (sameOptions(demand, this.compassApplied)) return\n if (!demand) {\n const ok = await this.control(\"compass\", \"stop\", {})\n if (generation === this.generation) this.compassApplied = null\n if (!ok && explicit) this.commandFailed()\n return\n }\n const ok = await this.control(\"compass\", \"start\", demand)\n if (generation !== this.generation) {\n if (explicit) fail(MiniappErrorCode.NOT_CONNECTED, \"Glasses disconnected\")\n return\n }\n if (ok) {\n this.compassApplied = demand\n this.compassRetryAttempt = 0\n return\n }\n if (explicit) this.commandFailed()\n const delay = COMPASS_RETRY_MS[this.compassRetryAttempt]\n if (delay === undefined) return\n this.compassRetryAttempt++\n this.compassRetry = BgTimer.setTimeout(() => {\n this.compassRetry = null\n void this.resync()\n }, delay)\n }\n\n private clearCompassRetry(): void {\n if (this.compassRetry != null) BgTimer.clearTimeout(this.compassRetry)\n this.compassRetry = null\n }\n\n /** Re-apply compass demand after the glasses connect or their firmware is classified. */\n resync(): Promise<void> {\n const generation = this.generation\n return this.serial(async () => {\n if (generation !== this.generation || this.navigationActive) return\n await this.applyCompass(generation, false).catch(() => {})\n })\n }\n\n release(app: string): Promise<void> {\n const generation = this.generation\n return this.serial(async () => {\n if (generation !== this.generation) return\n const hadSubscription = this.compassSubscribers.delete(app)\n const hadOverride = this.compassOverrides.delete(app)\n const hadCompass = hadSubscription || hadOverride\n if (this.lightOwner?.app === app) {\n if (!this.navigationActive) await this.control(\"light\", \"stop\", {}).catch(() => false)\n this.lightOwner = null\n }\n if (hadCompass && !this.navigationActive) await this.applyCompass(generation, false).catch(() => {})\n })\n }\n\n setNavigationActive(active: boolean): Promise<void> {\n const generation = this.generation\n return this.serial(async () => {\n if (generation !== this.generation) return\n if (this.navigationActive === active) return\n this.navigationActive = active\n this.clearCompassRetry()\n if (active) {\n if (this.lightOwner) await this.control(\"light\", \"stop\", {}).catch(() => false)\n if (this.compassApplied) await this.control(\"compass\", \"stop\", {}).catch(() => false)\n this.compassApplied = null\n return\n }\n if (this.lightOwner) await this.control(\"light\", \"start\", this.lightOwner.options).catch(() => false)\n this.compassRetryAttempt = 0\n await this.applyCompass(generation, false).catch(() => {})\n })\n }\n\n /** Never replay requests from an old miniapp connection onto a new pair of glasses. */\n disconnected(): void {\n this.generation++\n this.clearCompassRetry()\n this.compassRetryAttempt = 0\n this.lightOwner = null\n this.compassApplied = null\n this.navigationActive = false\n }\n}\n\nconst glassesSensorService = new GlassesSensorService((sensor, operation, options) =>\n BluetoothSdk.glassesSensorControl(sensor, operation, options),\n)\nexport default glassesSensorService\n"]}
|
|
1
|
+
{"version":3,"file":"GlassesSensorService.js","sourceRoot":"","sources":["../../src/services/GlassesSensorService.ts"],"names":[],"mappings":"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","sourcesContent":["import BluetoothSdk from \"@glassly/bluetooth-sdk/internal\"\nimport {MiniappErrorCode} from \"@glassly/miniapp/protocol\"\nimport {BgTimer} from \"../utils/timers\"\n\ntype Sensor = \"light\" | \"compass\"\ntype Operation = \"query\" | \"start\" | \"stop\"\ntype Options = Record<string, number>\ntype Control = (sensor: Sensor, operation: Operation, options: Options) => Promise<boolean>\ntype Owner = {app: string; options: Options}\n\nconst RANGES: Record<Sensor, Record<string, [number, number]>> = {\n light: {intervalMs: [100, 5000], minDelta: [0, 65535], heartbeatMs: [0, 65535]},\n compass: {intervalMs: [50, 2000], minChangeDegrees: [0, 359]},\n}\nconst COMPASS_DEFAULTS: Options = {intervalMs: 1000, minChangeDegrees: 5}\nconst COMPASS_RETRY_MS = [2000, 4000, 8000]\n\nfunction fail(code: MiniappErrorCode, message: string): never {\n throw Object.assign(new Error(message), {code})\n}\n\nfunction sameOptions(a: Options | null, b: Options | null): boolean {\n if (!a || !b) return a === b\n const keys = new Set([...Object.keys(a), ...Object.keys(b)])\n for (const key of keys) if (a[key] !== b[key]) return false\n return true\n}\n\n/**\n * Light: explicit, miniapp-scoped ownership. A subscriber alone never changes auto brightness.\n * Compass: demand-driven. It runs while any miniapp is subscribed; `start(options)` only\n * records that miniapp's override and everyone is served the smallest interval and\n * threshold requested. Native navigation temporarily borrows both; its stock configuration wins.\n */\nexport class GlassesSensorService {\n private lightOwner: Owner | null = null\n private compassSubscribers = new Set<string>()\n private compassOverrides = new Map<string, Options>()\n /** Options the firmware currently runs; null while stopped. */\n private compassApplied: Options | null = null\n private compassRetry: number | null = null\n private compassRetryAttempt = 0\n private pending: Promise<unknown> = Promise.resolve()\n private navigationActive = false\n private generation = 0\n\n constructor(private readonly control: Control) {}\n\n private serial<T>(work: () => Promise<T>): Promise<T> {\n const next = this.pending.then(work)\n this.pending = next.catch(() => {})\n return next\n }\n\n private validate(payload: Record<string, unknown>): {sensor: Sensor; operation: Operation; options: Options} {\n const sensor = payload.sensor\n const operation = payload.operation\n if (sensor !== \"light\" && sensor !== \"compass\") fail(MiniappErrorCode.INVALID_ARGUMENT, \"Unknown sensor\")\n if (operation !== \"start\" && operation !== \"stop\" && !(sensor === \"light\" && operation === \"query\")) {\n fail(MiniappErrorCode.INVALID_ARGUMENT, \"Unknown sensor operation\")\n }\n const raw = payload.options ?? {}\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw))\n fail(MiniappErrorCode.INVALID_ARGUMENT, \"Invalid sensor options\")\n const ranges = RANGES[sensor]\n const options: Options = {}\n for (const [key, value] of Object.entries(raw)) {\n const range = Object.prototype.hasOwnProperty.call(ranges, key) ? ranges[key] : undefined\n if (!range || typeof value !== \"number\" || !Number.isInteger(value) || value < range[0] || value > range[1]) {\n fail(MiniappErrorCode.INVALID_ARGUMENT, `Invalid ${key}`)\n }\n options[key] = value\n }\n return {sensor, operation, options}\n }\n\n request(app: string, payload: Record<string, unknown>): Promise<void> {\n const generation = this.generation\n return this.serial(async () => {\n if (generation !== this.generation) fail(MiniappErrorCode.NOT_CONNECTED, \"Glasses disconnected\")\n const {sensor, operation, options} = this.validate(payload)\n if (sensor === \"compass\") {\n if (operation === \"start\") this.compassOverrides.set(app, options)\n else this.compassOverrides.delete(app)\n if (this.navigationActive) return\n await this.applyCompass(generation, true)\n return\n }\n const owner = this.lightOwner\n if (operation !== \"query\" && owner && owner.app !== app) {\n fail(MiniappErrorCode.INVALID_ARGUMENT, \"This sensor is controlled by another miniapp\")\n }\n if (operation === \"stop\" && !owner) return\n if (this.navigationActive) {\n if (operation === \"stop\") {\n this.lightOwner = null\n return\n }\n fail(MiniappErrorCode.INVALID_ARGUMENT, \"Native navigation currently owns the glasses sensors\")\n }\n // Keep cleanup ownership even after an ambiguous transport failure: the firmware\n // may have applied the command before its ACK was lost.\n if (operation === \"start\") this.lightOwner = {app, options}\n if (!(await this.control(\"light\", operation, options))) this.commandFailed()\n if (generation !== this.generation) fail(MiniappErrorCode.NOT_CONNECTED, \"Glasses disconnected\")\n if (operation === \"stop\") this.lightOwner = null\n })\n }\n\n private commandFailed(): never {\n fail(\n MiniappErrorCode.INTERNAL,\n \"Sensor command failed: the glasses need Glassly custom firmware with this sensor, and on the G2 an active miniapp display\",\n )\n }\n\n /** Miniapps currently subscribed to the glasses compass stream. Replaces the previous set. */\n setCompassSubscribers(apps: Iterable<string>): Promise<void> {\n const generation = this.generation\n return this.serial(async () => {\n this.compassSubscribers = new Set(apps)\n if (generation !== this.generation || this.navigationActive) return\n await this.applyCompass(generation, false)\n })\n }\n\n private compassDemand(): Options | null {\n if (this.compassSubscribers.size === 0 && this.compassOverrides.size === 0) return null\n const requests = [...this.compassOverrides.values()].map((o) => ({...COMPASS_DEFAULTS, ...o}))\n for (const app of this.compassSubscribers) if (!this.compassOverrides.has(app)) requests.push(COMPASS_DEFAULTS)\n const demand: Options = {}\n for (const key of Object.keys(COMPASS_DEFAULTS)) demand[key] = Math.min(...requests.map((r) => r[key]))\n return demand\n }\n\n /**\n * Bring the firmware in line with current demand. Explicit requests surface failures;\n * subscription-driven applies stay silent (stock firmware, no CFW carrier yet) and retry\n * a few times so a compass subscribed before firmware classification still starts.\n */\n private async applyCompass(generation: number, explicit: boolean): Promise<void> {\n this.clearCompassRetry()\n const demand = this.compassDemand()\n if (sameOptions(demand, this.compassApplied)) return\n if (!demand) {\n const ok = await this.control(\"compass\", \"stop\", {})\n if (generation === this.generation) this.compassApplied = null\n if (!ok && explicit) this.commandFailed()\n return\n }\n const ok = await this.control(\"compass\", \"start\", demand)\n if (generation !== this.generation) {\n if (explicit) fail(MiniappErrorCode.NOT_CONNECTED, \"Glasses disconnected\")\n return\n }\n if (ok) {\n this.compassApplied = demand\n this.compassRetryAttempt = 0\n return\n }\n if (explicit) this.commandFailed()\n const delay = COMPASS_RETRY_MS[this.compassRetryAttempt]\n if (delay === undefined) return\n this.compassRetryAttempt++\n this.compassRetry = BgTimer.setTimeout(() => {\n this.compassRetry = null\n void this.resync()\n }, delay)\n }\n\n private clearCompassRetry(): void {\n if (this.compassRetry != null) BgTimer.clearTimeout(this.compassRetry)\n this.compassRetry = null\n }\n\n /** Re-apply compass demand after the glasses connect or their firmware is classified. */\n resync(): Promise<void> {\n const generation = this.generation\n return this.serial(async () => {\n if (generation !== this.generation || this.navigationActive) return\n await this.applyCompass(generation, false).catch(() => {})\n })\n }\n\n release(app: string): Promise<void> {\n const generation = this.generation\n return this.serial(async () => {\n if (generation !== this.generation) return\n const hadSubscription = this.compassSubscribers.delete(app)\n const hadOverride = this.compassOverrides.delete(app)\n const hadCompass = hadSubscription || hadOverride\n if (this.lightOwner?.app === app) {\n if (!this.navigationActive) await this.control(\"light\", \"stop\", {}).catch(() => false)\n this.lightOwner = null\n }\n if (hadCompass && !this.navigationActive) await this.applyCompass(generation, false).catch(() => {})\n })\n }\n\n setNavigationActive(active: boolean): Promise<void> {\n const generation = this.generation\n return this.serial(async () => {\n if (generation !== this.generation) return\n if (this.navigationActive === active) return\n this.navigationActive = active\n this.clearCompassRetry()\n if (active) {\n if (this.lightOwner) await this.control(\"light\", \"stop\", {}).catch(() => false)\n if (this.compassApplied) await this.control(\"compass\", \"stop\", {}).catch(() => false)\n this.compassApplied = null\n return\n }\n if (this.lightOwner) await this.control(\"light\", \"start\", this.lightOwner.options).catch(() => false)\n this.compassRetryAttempt = 0\n await this.applyCompass(generation, false).catch(() => {})\n })\n }\n\n /** Never replay requests from an old miniapp connection onto a new pair of glasses. */\n disconnected(): void {\n this.generation++\n this.clearCompassRetry()\n this.compassRetryAttempt = 0\n this.lightOwner = null\n this.compassApplied = null\n this.navigationActive = false\n }\n}\n\nconst glassesSensorService = new GlassesSensorService((sensor, operation, options) =>\n BluetoothSdk.glassesSensorControl(sensor, operation, options),\n)\nexport default glassesSensorService\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@glassly/engine",
|
|
3
|
-
"version": "0.3.8-dev.
|
|
3
|
+
"version": "0.3.8-dev.1015",
|
|
4
4
|
"description": "Glassly Engine — miniapp registry, WebView bridge, and miniapp store",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"react-native": "src/index.ts",
|
|
@@ -97,17 +97,17 @@
|
|
|
97
97
|
"registry": "https://registry.npmjs.org/"
|
|
98
98
|
},
|
|
99
99
|
"dependencies": {
|
|
100
|
-
"@glassly/bluetooth-sdk": "0.3.8-dev.
|
|
101
|
-
"@glassly/cloud-client": "0.3.8-dev.
|
|
102
|
-
"@glassly/cloud-protocol": "0.3.8-dev.
|
|
103
|
-
"@glassly/crust": "0.3.8-dev.
|
|
104
|
-
"@glassly/miniapp": "0.3.8-dev.
|
|
100
|
+
"@glassly/bluetooth-sdk": "0.3.8-dev.1015",
|
|
101
|
+
"@glassly/cloud-client": "0.3.8-dev.1015",
|
|
102
|
+
"@glassly/cloud-protocol": "0.3.8-dev.1015",
|
|
103
|
+
"@glassly/crust": "0.3.8-dev.1015",
|
|
104
|
+
"@glassly/miniapp": "0.3.8-dev.1015",
|
|
105
105
|
"buffer": "^6.0.3",
|
|
106
106
|
"events": "^3.3.0",
|
|
107
107
|
"react-native-marked": "8.3.2",
|
|
108
108
|
"semver": "^7.7.4",
|
|
109
109
|
"typesafe-ts": "^1.7.1",
|
|
110
|
-
"@glassly/llm-providers": "0.3.8-dev.
|
|
110
|
+
"@glassly/llm-providers": "0.3.8-dev.1015",
|
|
111
111
|
"@huggingface/jinja": "^0.5.9",
|
|
112
112
|
"jsonrepair": "^3.12.0"
|
|
113
113
|
},
|
|
@@ -12,9 +12,9 @@ export interface EngineReleaseMetadata {
|
|
|
12
12
|
export const ENGINE_RELEASE_METADATA: Readonly<EngineReleaseMetadata> = Object.freeze({
|
|
13
13
|
"schemaVersion": 1,
|
|
14
14
|
"familyBaseVersion": "0.3.8",
|
|
15
|
-
"releaseIdentity": "0.3.8-dev.
|
|
16
|
-
"releaseSetId": "glassly-0.3.8-dev.
|
|
17
|
-
"sourceCommit": "
|
|
15
|
+
"releaseIdentity": "0.3.8-dev.1015",
|
|
16
|
+
"releaseSetId": "glassly-0.3.8-dev.1015",
|
|
17
|
+
"sourceCommit": "5c28c73387e99d17f36887d985459628009a130b",
|
|
18
18
|
"otaManifestUrl": null,
|
|
19
19
|
"otaManifestSha256": null
|
|
20
20
|
})
|
|
@@ -110,7 +110,7 @@ export class GlassesSensorService {
|
|
|
110
110
|
private commandFailed(): never {
|
|
111
111
|
fail(
|
|
112
112
|
MiniappErrorCode.INTERNAL,
|
|
113
|
-
"Sensor command failed:
|
|
113
|
+
"Sensor command failed: the glasses need Glassly custom firmware with this sensor, and on the G2 an active miniapp display",
|
|
114
114
|
)
|
|
115
115
|
}
|
|
116
116
|
|