@condorinst/mobile-bridge 0.23.0 → 0.23.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/AGENTS.md +2 -2
- package/CHANGELOG.md +12 -0
- package/README.md +4 -4
- package/contract/bridge-contract.json +3 -3
- package/dist/cli.cjs +1 -1
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/dev-harness.global.js +15 -1
- package/dist/dev.cjs +15 -1
- package/dist/dev.cjs.map +1 -1
- package/dist/dev.d.cts +6 -0
- package/dist/dev.d.ts +6 -0
- package/dist/dev.js +15 -1
- package/dist/dev.js.map +1 -1
- package/docs/bridge-contract.md +12 -8
- package/docs/device-testing.md +3 -2
- package/examples/minimal-home/package.json +1 -1
- package/llms-full.txt +18 -13
- package/llms.txt +13 -13
- package/package.json +1 -1
package/AGENTS.md
CHANGED
|
@@ -122,12 +122,12 @@ build. Copy it, then install, so its `package.json` is the one you keep:
|
|
|
122
122
|
|
|
123
123
|
```bash
|
|
124
124
|
mkdir my-home && cd my-home
|
|
125
|
-
npm pack @condorinst/mobile-bridge@^0.23.
|
|
125
|
+
npm pack @condorinst/mobile-bridge@^0.23.1 && tar -xzf condorinst-mobile-bridge-*.tgz
|
|
126
126
|
cp -r package/examples/minimal-home/. . && rm -rf package condorinst-mobile-bridge-*.tgz
|
|
127
127
|
npm install
|
|
128
128
|
```
|
|
129
129
|
|
|
130
|
-
In a project you already have: `npm install @condorinst/mobile-bridge@^0.23.
|
|
130
|
+
In a project you already have: `npm install @condorinst/mobile-bridge@^0.23.1`
|
|
131
131
|
(the caret gives you patches only while the package is below 1.0.0) and copy
|
|
132
132
|
`build.mjs` from `node_modules/@condorinst/mobile-bridge/examples/minimal-home/`.
|
|
133
133
|
|
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.23.1] — 2026-10-21
|
|
11
|
+
|
|
12
|
+
### Fixed (docs, harness)
|
|
13
|
+
|
|
14
|
+
- A live session is short. 0.23.0 said that with `realTime` on the session
|
|
15
|
+
stays open until `realTime` goes off. On a real device (an ActLumus Plus on
|
|
16
|
+
an Android tablet, twice) it ended about 3 minutes after it started, with
|
|
17
|
+
`realTime` still on: the app does not end it, the link or the device does.
|
|
18
|
+
The docs now say to design live readings as a few minutes per sync.
|
|
19
|
+
- Harness: with `realTime` on, a simulated session ends 3 minutes after it
|
|
20
|
+
started (`Scenario.realTimeSessionMs`), or when `realTime` goes off.
|
|
21
|
+
|
|
10
22
|
## [0.23.0] — 2026-10-21
|
|
11
23
|
|
|
12
24
|
For Canvas apps with `nativeVersion` **0.18.0**, which fix the silent
|
package/README.md
CHANGED
|
@@ -17,8 +17,8 @@ network, every document is plain text at a pinned, unauthenticated URL;
|
|
|
17
17
|
`llms.txt` is the index and `llms-full.txt` has every document in one file:
|
|
18
18
|
|
|
19
19
|
```
|
|
20
|
-
https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.23.
|
|
21
|
-
https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.23.
|
|
20
|
+
https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.23.1/llms.txt
|
|
21
|
+
https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.23.1/llms-full.txt
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
The machine-readable contract — keys, commands, limits, capability matrix — is
|
|
@@ -32,7 +32,7 @@ The machine-readable contract — keys, commands, limits, capability matrix —
|
|
|
32
32
|
## Installation
|
|
33
33
|
|
|
34
34
|
```bash
|
|
35
|
-
npm install @condorinst/mobile-bridge@^0.23.
|
|
35
|
+
npm install @condorinst/mobile-bridge@^0.23.1
|
|
36
36
|
```
|
|
37
37
|
|
|
38
38
|
The package ships a prebuilt `dist/` (ESM + CJS + type declarations); no build
|
|
@@ -52,7 +52,7 @@ toolchain of ours is needed on your side.
|
|
|
52
52
|
- **PATCH** (`0.23.x`): bugfix with no API change.
|
|
53
53
|
- **MINOR** (`0.x.0`): new observable key, new command, backward-compatible API.
|
|
54
54
|
> While on `0.x`, a minor bump may carry breaking changes (semver treats
|
|
55
|
-
> pre-1.0 minors as breaking). Pin `^0.23.
|
|
55
|
+
> pre-1.0 minors as breaking). Pin `^0.23.1` to stay on safe patches.
|
|
56
56
|
- **MAJOR** (`x.0.0`): incompatible schema change (key rename, payload shape
|
|
57
57
|
change, public API change). `1.0.0` marks the production-stable contract.
|
|
58
58
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"contractVersion": "0.23.
|
|
3
|
+
"contractVersion": "0.23.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.23.
|
|
9
|
+
"package": "0.23.1",
|
|
10
10
|
"shellVersion": "0.6.0",
|
|
11
11
|
"clientProtocolVersion": "0.5.0",
|
|
12
12
|
"nativeVersion": "0.18.0",
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
"entries": {
|
|
102
102
|
"ping": { "args": {}, "requiresConfirmation": false, "repliesOn": "pingPong", "note": "Handled by the app's background service: lost without a reply if sent before the service is up. BridgeClient.waitForService() resends it until a pingPong arrives." },
|
|
103
103
|
"userDevice": { "args": { "getFromServer": "boolean, default false. false: memory or cache while fresh, else the server (use at boot). true: the server first, cache on failure (use for a refresh button)." }, "requiresConfirmation": false, "repliesOn": "userDevice", "prefer": "BridgeClient.requestUserDevices({ getFromServer }), which resends with backoff and resolves { status: 'timeout', hasDevices } instead of waiting forever.", "note": "From nativeVersion 0.18.0 the app re-sends a request lost while its background service starts, and answers a failed lookup with empty arrays and `error` (NO_DEVICES | NETWORK | SESSION | UNKNOWN). Below 0.18.0 a request sent before the service is up is lost, and a failed lookup gets no reply." },
|
|
104
|
-
"realTime": { "args": { "serialNo": "int", "deviceId": "int, optional, minNativeVersion 0.17.0", "value": "boolean" }, "requiresConfirmation": false, "repliesOn": "realTime", "note": "Off by default. The deviceLightSensors stream only flows while this is on and the device is in a BLE session; while it is on, the app
|
|
104
|
+
"realTime": { "args": { "serialNo": "int", "deviceId": "int, optional, minNativeVersion 0.17.0", "value": "boolean" }, "requiresConfirmation": false, "repliesOn": "realTime", "note": "Off by default. The deviceLightSensors stream only flows while this is on and the device is in a BLE session; while it is on, the app does not end the session after the sync, but on a real device the session still ended about 3 minutes after it started (the link or the device ends it); switching it off ends the session; the stream stops when the session ends and resumes at the next one. The app switches it off for every device when it restarts. The ack means the wish is recorded; it does not require a connected device. Always send serialNo; add deviceId to address one device when two share a serialNo." },
|
|
105
105
|
"deviceConnection": { "args": { "type": "'add' | 'remove'", "serialNo": "int", "deviceId": "int, optional, minNativeVersion 0.17.0" }, "requiresConfirmation": false, "repliesOn": "deviceConnection", "note": "Pairs nothing. 'add' subscribes to the BLE connection state of a device from the userDevice list; the state arrives on the deviceConnection key on every CHANGE only — the current state is not replayed (except isConnect false at once for a device the app does not know). Start every device as 'unknown'. An ActLumus is between sessions most of the time (bleConnectionPeriod, minutes). 'remove' stops it." },
|
|
106
106
|
"sensorLog": { "args": { "requestId": "string", "serialNo": "int", "bodyPart": "'wrist' | 'necklace', optional", "limit": "1..1000, optional", "startingAfter": "opaque cursor, optional", "endingBefore": "opaque cursor, optional", "startTime": "timestamp, optional, minNativeVersion 0.15.0", "endTime": "timestamp, optional, minNativeVersion 0.15.0" }, "requiresConfirmation": false, "repliesOn": "sensorLog", "prefer": "BridgeClient.fetchSensorLog(query), which correlates requestId and applies a timeout for you.", "paging": { "orderWithinPage": "chronological ascending", "noCursorNoRange": "the most recent `limit` logs; older pages with endingBefore while hasPrevious", "withStartTime": "the oldest logs of the range first; newer pages with startingAfter while hasMore", "onlyEndTime": "the most recent logs before endTime", "defaultLimit": 10, "maxLimit": 1000, "logPeriod": "one log per period, programmable per device, default 60 s; derive it from consecutive log_time values" } },
|
|
107
107
|
"openSettings": { "args": {}, "requiresConfirmation": false, "repliesOn": null },
|
package/dist/cli.cjs
CHANGED