@glassly/engine 0.3.0-dev.478 → 0.3.0-dev.486
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/LocalDisplayManager.d.ts +1 -2
- package/build/services/LocalDisplayManager.d.ts.map +1 -1
- package/build/services/LocalDisplayManager.js +1 -2
- package/build/services/LocalDisplayManager.js.map +1 -1
- package/build/services/LocalMiniappRuntime.d.ts.map +1 -1
- package/build/services/LocalMiniappRuntime.js +7 -2
- package/build/services/LocalMiniappRuntime.js.map +1 -1
- package/build/utils/display/scene/anchor.d.ts +1 -2
- package/build/utils/display/scene/anchor.d.ts.map +1 -1
- package/build/utils/display/scene/anchor.js +1 -2
- package/build/utils/display/scene/anchor.js.map +1 -1
- package/package.json +7 -7
- package/src/generated/releaseMetadata.ts +3 -3
- package/src/services/LocalDisplayManager.ts +1 -2
- package/src/services/LocalMiniappRuntime.ts +5 -2
- package/src/utils/display/scene/anchor.ts +1 -2
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
* Anchor resolution — turn corner-anchored boxes into plain top-left boxes
|
|
3
3
|
* against the device's real canvas. Runs in emitScene BEFORE the canPosition
|
|
4
4
|
* branch so both processScene (clamping) and degradeScene (reading order)
|
|
5
|
-
* only ever see concrete coordinates.
|
|
6
|
-
* notes/superpowers/specs/2026-08-10-anchored-render-boxes.md
|
|
5
|
+
* only ever see concrete coordinates.
|
|
7
6
|
*/
|
|
8
7
|
import type { SceneElementInput } from "./types";
|
|
9
8
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anchor.d.ts","sourceRoot":"","sources":["../../../../src/utils/display/scene/anchor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"anchor.d.ts","sourceRoot":"","sources":["../../../../src/utils/display/scene/anchor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAA0B,iBAAiB,EAAC,MAAM,SAAS,CAAA;AAcvE;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,iBAAiB,EAAE,EACnC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,iBAAiB,EAAE,CAKrB"}
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
* Anchor resolution — turn corner-anchored boxes into plain top-left boxes
|
|
3
3
|
* against the device's real canvas. Runs in emitScene BEFORE the canPosition
|
|
4
4
|
* branch so both processScene (clamping) and degradeScene (reading order)
|
|
5
|
-
* only ever see concrete coordinates.
|
|
6
|
-
* notes/superpowers/specs/2026-08-10-anchored-render-boxes.md
|
|
5
|
+
* only ever see concrete coordinates.
|
|
7
6
|
*/
|
|
8
7
|
function resolveBox(box, width, height) {
|
|
9
8
|
const { anchor, x, y, w, h } = box;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anchor.js","sourceRoot":"","sources":["../../../../src/utils/display/scene/anchor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"anchor.js","sourceRoot":"","sources":["../../../../src/utils/display/scene/anchor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,SAAS,UAAU,CAAC,GAAkB,EAAE,KAAa,EAAE,MAAc;IACnE,MAAM,EAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC,GAAG,GAAG,CAAA;IAChC,MAAM,KAAK,GAAG,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,cAAc,CAAA;IACjE,MAAM,MAAM,GAAG,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,cAAc,CAAA;IACpE,OAAO;QACL,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;QACD,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAmC,EACnC,KAAa,EACb,MAAc;IAEd,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACtB,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO,EAAE,CAAA;QACzE,OAAO,EAAC,GAAG,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,EAAC,CAAA;IACxD,CAAC,CAAC,CAAA;AACJ,CAAC","sourcesContent":["/**\n * Anchor resolution — turn corner-anchored boxes into plain top-left boxes\n * against the device's real canvas. Runs in emitScene BEFORE the canPosition\n * branch so both processScene (clamping) and degradeScene (reading order)\n * only ever see concrete coordinates.\n */\n\nimport type {SceneBox, SceneBoxInput, SceneElementInput} from \"./types\"\n\nfunction resolveBox(box: SceneBoxInput, width: number, height: number): SceneBox {\n const {anchor, x, y, w, h} = box\n const right = anchor === \"top-right\" || anchor === \"bottom-right\"\n const bottom = anchor === \"bottom-left\" || anchor === \"bottom-right\"\n return {\n x: right ? width - x - w : x,\n y: bottom ? height - y - h : y,\n w,\n h,\n }\n}\n\n/**\n * Resolve every anchored box in a scene to top-left coordinates on a W×H\n * canvas. Unanchored elements pass through unchanged (same reference — no\n * copy churn on the common path), as do malformed ones so processScene's\n * validation still sees and reports them. Non-finite insets survive the\n * subtraction as non-finite and are dropped by the same validation.\n */\nexport function resolveAnchors(\n input: readonly SceneElementInput[],\n width: number,\n height: number,\n): SceneElementInput[] {\n return input.map((el) => {\n if (!el || typeof el !== \"object\" || !el.box || !el.box.anchor) return el\n return {...el, box: resolveBox(el.box, width, height)}\n })\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@glassly/engine",
|
|
3
|
-
"version": "0.3.0-dev.
|
|
3
|
+
"version": "0.3.0-dev.486",
|
|
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.0-dev.
|
|
101
|
-
"@glassly/cloud-client": "0.3.0-dev.
|
|
102
|
-
"@glassly/cloud-protocol": "0.3.0-dev.
|
|
103
|
-
"@glassly/crust": "0.3.0-dev.
|
|
104
|
-
"@glassly/miniapp": "0.3.0-dev.
|
|
100
|
+
"@glassly/bluetooth-sdk": "0.3.0-dev.486",
|
|
101
|
+
"@glassly/cloud-client": "0.3.0-dev.486",
|
|
102
|
+
"@glassly/cloud-protocol": "0.3.0-dev.486",
|
|
103
|
+
"@glassly/crust": "0.3.0-dev.486",
|
|
104
|
+
"@glassly/miniapp": "0.3.0-dev.486",
|
|
105
105
|
"buffer": "^6.0.3",
|
|
106
106
|
"events": "^3.3.0",
|
|
107
107
|
"react-native-marked": "8.1.1",
|
|
108
108
|
"semver": "^7.7.4",
|
|
109
109
|
"typesafe-ts": "^1.7.1",
|
|
110
|
-
"@glassly/llm-providers": "0.3.0-dev.
|
|
110
|
+
"@glassly/llm-providers": "0.3.0-dev.486"
|
|
111
111
|
},
|
|
112
112
|
"devDependencies": {
|
|
113
113
|
"@glassly/llm-providers": "workspace:*",
|
|
@@ -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.0",
|
|
15
|
-
"releaseIdentity": "0.3.0-dev.
|
|
16
|
-
"releaseSetId": "glassly-0.3.0-dev.
|
|
17
|
-
"sourceCommit": "
|
|
15
|
+
"releaseIdentity": "0.3.0-dev.486",
|
|
16
|
+
"releaseSetId": "glassly-0.3.0-dev.486",
|
|
17
|
+
"sourceCommit": "f220bbd6fd461d67ec16f43df8c309bfa9e92760",
|
|
18
18
|
"otaManifestUrl": null,
|
|
19
19
|
"otaManifestSha256": null
|
|
20
20
|
})
|
|
@@ -10,8 +10,7 @@
|
|
|
10
10
|
* - core-app vs background-app arbitration with a background lock
|
|
11
11
|
*
|
|
12
12
|
* Scope is deliberately local-only. Cloud-originated displays are untouched
|
|
13
|
-
* and may race with local displays during dev; that's acceptable
|
|
14
|
-
* (notes/archive/agents/local-display-manager-plan.md).
|
|
13
|
+
* and may race with local displays during dev; that's acceptable.
|
|
15
14
|
*
|
|
16
15
|
* Display pacing is NOT done here. A JS-side ~300ms throttle used to live in
|
|
17
16
|
* this class, but JS timers (and therefore the throttle's trailing flush) do
|
|
@@ -2142,14 +2142,17 @@ class LocalMiniappRuntime {
|
|
|
2142
2142
|
const required = permissionForStream(stream)
|
|
2143
2143
|
if (required && !declaredTypes.has(required)) {
|
|
2144
2144
|
logPermissionNotDeclared(packageName, required, `to subscribe to "${stream}"`, `{"type": "${required}"}`)
|
|
2145
|
-
|
|
2145
|
+
const error = {
|
|
2146
2146
|
code: MiniappErrorCode.PERMISSION_NOT_DECLARED,
|
|
2147
2147
|
message: `${required} permission not declared in miniapp.json (required for "${stream}"). Add {"type": "${required}"} to the "permissions" array.`,
|
|
2148
2148
|
// Extra context fields read by the SDK so authors that subscribe
|
|
2149
2149
|
// to session.on("error") can format their own messages.
|
|
2150
2150
|
permission: required,
|
|
2151
2151
|
subscription: stream,
|
|
2152
|
-
}
|
|
2152
|
+
}
|
|
2153
|
+
// The SDK sends SUBSCRIBE without a requestId, so push the rejection.
|
|
2154
|
+
if (requestId) this.sendResult(packageName, requestId, false, undefined, error)
|
|
2155
|
+
else this.sendToMiniapp(packageName, {type: MiniappResponseType.ERROR, ...error})
|
|
2153
2156
|
return
|
|
2154
2157
|
}
|
|
2155
2158
|
}
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
* Anchor resolution — turn corner-anchored boxes into plain top-left boxes
|
|
3
3
|
* against the device's real canvas. Runs in emitScene BEFORE the canPosition
|
|
4
4
|
* branch so both processScene (clamping) and degradeScene (reading order)
|
|
5
|
-
* only ever see concrete coordinates.
|
|
6
|
-
* notes/superpowers/specs/2026-08-10-anchored-render-boxes.md
|
|
5
|
+
* only ever see concrete coordinates.
|
|
7
6
|
*/
|
|
8
7
|
|
|
9
8
|
import type {SceneBox, SceneBoxInput, SceneElementInput} from "./types"
|