@condorinst/mobile-bridge 0.19.0 → 0.19.2
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/AGENTS.md +3 -2
- package/CHANGELOG.md +42 -0
- package/contract/bridge-contract.json +10 -6
- 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/AGENTS.md
CHANGED
|
@@ -104,8 +104,9 @@ checking `nativeVersion`.
|
|
|
104
104
|
depend on the bridge.
|
|
105
105
|
- [ ] Every capability beyond the baseline is guarded by a `nativeVersion` check.
|
|
106
106
|
- [ ] Nothing waits forever on an ack that may never come.
|
|
107
|
-
- [ ] Tested in the browser with the mock (`npm run
|
|
108
|
-
`nativeVersion` is `null` — your code must
|
|
107
|
+
- [ ] Tested in the browser with the mock (in the example: `npm run build`, then
|
|
108
|
+
open `dist/index.html`), where `nativeVersion` is `null` — your code must
|
|
109
|
+
survive that.
|
|
109
110
|
|
|
110
111
|
## Where to read more
|
|
111
112
|
|
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,48 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.19.2] — 2026-09-23
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **`AGENTS.md` told you to run a script that does not exist.** The definition
|
|
15
|
+
of done asked for `npm run dev` in the example, but `examples/minimal-home`
|
|
16
|
+
only defines `build`, `bundle` and `typecheck`. It now describes the loop the
|
|
17
|
+
example itself documents: `npm run build`, then open `dist/index.html`, where
|
|
18
|
+
the SDK auto-enables mock mode.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- **The public repository no longer carries internal files.** The mirror step
|
|
23
|
+
used to publish everything it tracked except its own pipeline definition, so
|
|
24
|
+
the release runbook, the test suite and the lint/test configuration were all
|
|
25
|
+
public. It now excludes them by an explicit list, guarded so that renaming a
|
|
26
|
+
listed path fails the release instead of silently publishing it.
|
|
27
|
+
`tsconfig.json` and `tsup.config.ts` stay, because installing the package
|
|
28
|
+
straight from git builds it on `prepare` and cannot do so without them.
|
|
29
|
+
Nothing changes in the npm tarball, which never carried these files.
|
|
30
|
+
|
|
31
|
+
## [0.19.1] — 2026-09-22
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
|
|
35
|
+
- **`limits.maxDevicesPerUser` now states the commercial rule without dressing
|
|
36
|
+
it up as a platform guarantee.** It was `null` with a note saying no cap
|
|
37
|
+
exists, which was accurate about the app and unhelpful about what a client
|
|
38
|
+
will actually see. It is now an object: `enforcedByApp: false`,
|
|
39
|
+
`currentProductLimit: 2`, and guidance saying explicitly not to hard-code
|
|
40
|
+
two.
|
|
41
|
+
|
|
42
|
+
The distinction is the whole point. The Canvas app enforces no cap — no code
|
|
43
|
+
path rejects a third device. A commercial rule currently limits a user to two
|
|
44
|
+
linked devices, and it can be raised with no change to this contract, to the
|
|
45
|
+
app, or to any version a client could check. A two-slot UI with the slots
|
|
46
|
+
hard-coded looks correct for as long as the rule holds and breaks silently on
|
|
47
|
+
the day it does not.
|
|
48
|
+
|
|
49
|
+
`docs/limits.md` and the `UserDevicePayload` TSDoc carry the same framing.
|
|
50
|
+
|
|
51
|
+
|
|
10
52
|
## [0.19.0] — 2026-09-22
|
|
11
53
|
|
|
12
54
|
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.2",
|
|
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.2",
|
|
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": {
|
|
@@ -175,8 +179,8 @@
|
|
|
175
179
|
"verifiedAgainst": {
|
|
176
180
|
"monorepo": "condorinstprogdev/mobile_applications",
|
|
177
181
|
"branch": "dev_canvas",
|
|
178
|
-
"commit": "
|
|
179
|
-
"verifiedOn": "2026-09-
|
|
182
|
+
"commit": "89fe1c792202ca9f066b84a63af44a6f2b993b52",
|
|
183
|
+
"verifiedOn": "2026-09-23",
|
|
180
184
|
"sources": {
|
|
181
185
|
"nativeVersion": "apps/canvas/lib/ui/pages/home/bridge/condor_bridge.dart:32",
|
|
182
186
|
"jsToNativePayloadBytes": "apps/canvas/lib/ui/pages/home/bridge/condor_bridge.dart:88",
|
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.2` 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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/README.md): Package overview, install, quickstart.
|
|
35
|
+
- [CHANGELOG](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.19.2/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.2/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