@condorinst/mobile-bridge 0.19.0 → 0.19.1
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/CHANGELOG.md +21 -0
- package/contract/bridge-contract.json +8 -4
- package/dist/index.d.cts +3 -1
- package/dist/index.d.ts +3 -1
- package/docs/limits.md +14 -5
- package/llms.txt +13 -13
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.19.1] — 2026-09-22
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- **`limits.maxDevicesPerUser` now states the commercial rule without dressing
|
|
15
|
+
it up as a platform guarantee.** It was `null` with a note saying no cap
|
|
16
|
+
exists, which was accurate about the app and unhelpful about what a client
|
|
17
|
+
will actually see. It is now an object: `enforcedByApp: false`,
|
|
18
|
+
`currentProductLimit: 2`, and guidance saying explicitly not to hard-code
|
|
19
|
+
two.
|
|
20
|
+
|
|
21
|
+
The distinction is the whole point. The Canvas app enforces no cap — no code
|
|
22
|
+
path rejects a third device. A commercial rule currently limits a user to two
|
|
23
|
+
linked devices, and it can be raised with no change to this contract, to the
|
|
24
|
+
app, or to any version a client could check. A two-slot UI with the slots
|
|
25
|
+
hard-coded looks correct for as long as the rule holds and breaks silently on
|
|
26
|
+
the day it does not.
|
|
27
|
+
|
|
28
|
+
`docs/limits.md` and the `UserDevicePayload` TSDoc carry the same framing.
|
|
29
|
+
|
|
30
|
+
|
|
10
31
|
## [0.19.0] — 2026-09-22
|
|
11
32
|
|
|
12
33
|
Documentation release: the package is now consumable by an AI agent building a
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"contractVersion": "0.19.
|
|
3
|
+
"contractVersion": "0.19.1",
|
|
4
4
|
"description": "Machine-readable contract of the Condor Canvas JS<->Native bridge. It states what the TypeScript declarations in dist/index.d.ts cannot express: which keys and commands a sandboxed client can actually reach, which ones need human confirmation, where messages are dropped in silence, the hard limits, and which capability each native version carries. The TypeScript types remain canonical for payload shapes.",
|
|
5
5
|
"audience": "Developers and AI agents building the client bundle that renders inside the Canvas Home.",
|
|
6
6
|
|
|
7
7
|
"versions": {
|
|
8
8
|
"note": "Four independent numbers coexist. Only nativeVersion tells you what the device can do.",
|
|
9
|
-
"package": "0.19.
|
|
9
|
+
"package": "0.19.1",
|
|
10
10
|
"shellVersion": "0.6.0",
|
|
11
11
|
"clientProtocolVersion": "0.5.0",
|
|
12
12
|
"nativeVersion": "0.16.0",
|
|
@@ -35,8 +35,12 @@
|
|
|
35
35
|
"nativeVersionRelay": 2000
|
|
36
36
|
},
|
|
37
37
|
"presignedBundleUrlTtlSeconds": 86400,
|
|
38
|
-
"maxDevicesPerUser":
|
|
39
|
-
|
|
38
|
+
"maxDevicesPerUser": {
|
|
39
|
+
"enforcedByApp": false,
|
|
40
|
+
"currentProductLimit": 2,
|
|
41
|
+
"stability": "commercial rule, may change without a contract version bump",
|
|
42
|
+
"guidance": "Today a user can link at most two devices, so design for a short list rather than a virtualised one. Do NOT hard-code two: the cap is a commercial rule, not a platform invariant, and raising it requires no change to this contract or to the app. Render whatever userDevice delivers and read its length."
|
|
43
|
+
}
|
|
40
44
|
},
|
|
41
45
|
|
|
42
46
|
"storage": {
|
package/dist/index.d.cts
CHANGED
|
@@ -233,7 +233,9 @@ interface PingPongPayload {
|
|
|
233
233
|
* `toMap()` on the Dart side (device config, telemetry, user config), and
|
|
234
234
|
* strict typing for them is deferred until a client needs it.
|
|
235
235
|
*
|
|
236
|
-
*
|
|
236
|
+
* The app enforces no device cap. A commercial rule currently limits a user to
|
|
237
|
+
* two linked devices, but that can change with no signal in this contract — read
|
|
238
|
+
* the length of the array rather than hard-coding it.
|
|
237
239
|
*/
|
|
238
240
|
interface UserDevicePayload {
|
|
239
241
|
lastUpdate: number;
|
package/dist/index.d.ts
CHANGED
|
@@ -233,7 +233,9 @@ interface PingPongPayload {
|
|
|
233
233
|
* `toMap()` on the Dart side (device config, telemetry, user config), and
|
|
234
234
|
* strict typing for them is deferred until a client needs it.
|
|
235
235
|
*
|
|
236
|
-
*
|
|
236
|
+
* The app enforces no device cap. A commercial rule currently limits a user to
|
|
237
|
+
* two linked devices, but that can change with no signal in this contract — read
|
|
238
|
+
* the length of the array rather than hard-coding it.
|
|
237
239
|
*/
|
|
238
240
|
interface UserDevicePayload {
|
|
239
241
|
lastUpdate: number;
|
package/docs/limits.md
CHANGED
|
@@ -104,8 +104,17 @@ Verified at `shell.template.html:28`.
|
|
|
104
104
|
|
|
105
105
|
## Devices
|
|
106
106
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
107
|
+
Two things are true at once here, and conflating them is how this goes wrong.
|
|
108
|
+
|
|
109
|
+
**The platform enforces nothing.** A search for `maxDevices` or `deviceLimit`
|
|
110
|
+
across the Canvas app returns nothing. No code path rejects a third device.
|
|
111
|
+
|
|
112
|
+
**The current commercial rule caps a user at two linked devices.** That is a
|
|
113
|
+
product decision, not a platform invariant. It can be raised without any change
|
|
114
|
+
to this contract, to the app, or to a version number you could check.
|
|
115
|
+
|
|
116
|
+
So: design for a short list rather than a virtualised one — two cards will be
|
|
117
|
+
the common case — but **read the length of the roster you receive** and let the
|
|
118
|
+
layout grow. A two-slot UI with the slots hard-coded is the failure this section
|
|
119
|
+
exists to prevent: it will look correct for as long as the rule holds, and break
|
|
120
|
+
silently on the day it does not.
|
package/llms.txt
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
> pagination, permissions, system status and language.
|
|
8
8
|
|
|
9
9
|
Every URL below is plain text over HTTPS, pinned to a released version, and
|
|
10
|
-
needs no authentication. Replace `0.19.
|
|
10
|
+
needs no authentication. Replace `0.19.1` with the version you depend on; the
|
|
11
11
|
contract changes between minors while the package is below 1.0.0.
|
|
12
12
|
|
|
13
13
|
The same files ship inside the npm tarball, so if you have run
|
|
@@ -16,27 +16,27 @@ The same files ship inside the npm tarball, so if you have run
|
|
|
16
16
|
|
|
17
17
|
## Start here
|
|
18
18
|
|
|
19
|
-
- [AGENTS.md](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.
|
|
20
|
-
- [Agent guide](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.
|
|
19
|
+
- [AGENTS.md](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.1/AGENTS.md): The contract in one screen — hard rules, what is unreachable, and the validation loop. Read before writing code.
|
|
20
|
+
- [Agent guide](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.1/docs/agent-guide.md): Step-by-step construction of a client Home, with the checks to run at each stage.
|
|
21
21
|
|
|
22
22
|
## Reference
|
|
23
23
|
|
|
24
|
-
- [Bridge contract](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.
|
|
25
|
-
- [Machine-readable contract](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.
|
|
26
|
-
- [Limits](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.
|
|
27
|
-
- [Troubleshooting](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.
|
|
28
|
-
- [TypeScript declarations](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.
|
|
24
|
+
- [Bridge contract](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.1/docs/bridge-contract.md): Every observable key, every command, the three error shapes, and the capability matrix by native version.
|
|
25
|
+
- [Machine-readable contract](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.1/contract/bridge-contract.json): The same contract as JSON. Also importable as `@condorinst/mobile-bridge/contract`.
|
|
26
|
+
- [Limits](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.1/docs/limits.md): Every hard limit — payload size, rate limits, bundle size, timeouts — with what happens when you cross it.
|
|
27
|
+
- [Troubleshooting](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.1/docs/troubleshooting.md): Why a command did nothing. Silence is the platform's dominant failure mode.
|
|
28
|
+
- [TypeScript declarations](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.1/dist/index.d.ts): Authoritative payload shapes, with documentation on every member.
|
|
29
29
|
|
|
30
30
|
## Guides
|
|
31
31
|
|
|
32
|
-
- [Client guide](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.
|
|
33
|
-
- [Pilot onboarding](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.
|
|
34
|
-
- [README](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.
|
|
35
|
-
- [CHANGELOG](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.
|
|
32
|
+
- [Client guide](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.1/docs/client-guide.md): Narrative walkthrough for a developer building the Home by hand.
|
|
33
|
+
- [Pilot onboarding](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.1/docs/pilot-onboarding.md): Checklist from zero to a bundle delivered to Condor.
|
|
34
|
+
- [README](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.1/README.md): Package overview, install, quickstart.
|
|
35
|
+
- [CHANGELOG](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.1/CHANGELOG.md): When each capability was introduced. The most precise record of what a given native version supports.
|
|
36
36
|
|
|
37
37
|
## Examples
|
|
38
38
|
|
|
39
|
-
- [Minimal home](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.
|
|
39
|
+
- [Minimal home](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.1/examples/minimal-home/src/main.ts): A complete, working client in ~160 lines. Copy this as your starting point.
|
|
40
40
|
|
|
41
41
|
## Optional
|
|
42
42
|
|
package/package.json
CHANGED