@pollen-robotics/reachy-mini-sdk 1.7.3 → 1.8.0-rc1
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 +188 -0
- package/README.md +68 -5
- package/dist/lib/math.d.ts +23 -0
- package/dist/lib/math.d.ts.map +1 -0
- package/dist/lib/math.js +40 -0
- package/dist/lib/math.js.map +1 -0
- package/dist/lib/reachy-mini.d.ts +150 -0
- package/dist/lib/reachy-mini.d.ts.map +1 -0
- package/dist/lib/reachy-mini.js +1452 -0
- package/dist/lib/reachy-mini.js.map +1 -0
- package/dist/lib/types.d.ts +384 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +9 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/upload-helpers.d.ts +18 -0
- package/dist/lib/upload-helpers.d.ts.map +1 -0
- package/dist/lib/upload-helpers.js +44 -0
- package/dist/lib/upload-helpers.js.map +1 -0
- package/dist/lib/url-helpers.d.ts +63 -0
- package/dist/lib/url-helpers.d.ts.map +1 -0
- package/dist/lib/url-helpers.js +153 -0
- package/dist/lib/url-helpers.js.map +1 -0
- package/dist/reachy-mini-sdk.d.ts +69 -0
- package/dist/reachy-mini-sdk.d.ts.map +1 -0
- package/dist/reachy-mini-sdk.js +68 -0
- package/dist/reachy-mini-sdk.js.map +1 -0
- package/host/APP_AUTHOR_GUIDE.md +646 -0
- package/host/README.md +155 -0
- package/host/SPEC.md +618 -0
- package/host/dist/ReachyHost.d.ts +39 -0
- package/host/dist/ReachyHost.d.ts.map +1 -0
- package/host/dist/assets/index.d.ts +16 -0
- package/host/dist/assets/index.d.ts.map +1 -0
- package/host/dist/chunks/index-CyLPysJS.js +400 -0
- package/host/dist/chunks/mountHost-8f-laxwI.js +48279 -0
- package/host/dist/chunks/reachy-mini-B1hlBmDQ.js +1240 -0
- package/host/dist/components/ConnectingView.d.ts +13 -0
- package/host/dist/components/ConnectingView.d.ts.map +1 -0
- package/host/dist/components/EmbedFrame.d.ts +16 -0
- package/host/dist/components/EmbedFrame.d.ts.map +1 -0
- package/host/dist/components/ErrorView.d.ts +21 -0
- package/host/dist/components/ErrorView.d.ts.map +1 -0
- package/host/dist/components/LeavingView.d.ts +33 -0
- package/host/dist/components/LeavingView.d.ts.map +1 -0
- package/host/dist/components/PickerView.d.ts +51 -0
- package/host/dist/components/PickerView.d.ts.map +1 -0
- package/host/dist/components/ReachyHostShell.d.ts +21 -0
- package/host/dist/components/ReachyHostShell.d.ts.map +1 -0
- package/host/dist/components/SignInView.d.ts +32 -0
- package/host/dist/components/SignInView.d.ts.map +1 -0
- package/host/dist/components/StepsProgressIndicator.d.ts +41 -0
- package/host/dist/components/StepsProgressIndicator.d.ts.map +1 -0
- package/host/dist/components/TopBar.d.ts +52 -0
- package/host/dist/components/TopBar.d.ts.map +1 -0
- package/host/dist/components/WelcomeBackOverlay.d.ts +28 -0
- package/host/dist/components/WelcomeBackOverlay.d.ts.map +1 -0
- package/host/dist/embed/index.d.ts +151 -0
- package/host/dist/embed/index.d.ts.map +1 -0
- package/host/dist/entry/auto.d.ts +12 -0
- package/host/dist/entry/auto.d.ts.map +1 -0
- package/host/dist/entry/auto.js +6 -0
- package/host/dist/entry/embed.d.ts +12 -0
- package/host/dist/entry/embed.d.ts.map +1 -0
- package/host/dist/entry/embed.js +6 -0
- package/host/dist/hooks/useHfProfile.d.ts +7 -0
- package/host/dist/hooks/useHfProfile.d.ts.map +1 -0
- package/host/dist/hooks/useHostBridge.d.ts +37 -0
- package/host/dist/hooks/useHostBridge.d.ts.map +1 -0
- package/host/dist/hooks/useOAuth.d.ts +16 -0
- package/host/dist/hooks/useOAuth.d.ts.map +1 -0
- package/host/dist/hooks/useRobots.d.ts +17 -0
- package/host/dist/hooks/useRobots.d.ts.map +1 -0
- package/host/dist/hooks/useSdk.d.ts +16 -0
- package/host/dist/hooks/useSdk.d.ts.map +1 -0
- package/host/dist/index.d.ts +25 -0
- package/host/dist/index.d.ts.map +1 -0
- package/host/dist/index.js +14 -0
- package/host/dist/lib/centralListener.d.ts +73 -0
- package/host/dist/lib/centralListener.d.ts.map +1 -0
- package/host/dist/lib/centralRest.d.ts +35 -0
- package/host/dist/lib/centralRest.d.ts.map +1 -0
- package/host/dist/lib/protocol.d.ts +230 -0
- package/host/dist/lib/protocol.d.ts.map +1 -0
- package/host/dist/lib/protocol.js +47 -0
- package/host/dist/lib/sdk-types.d.ts +46 -0
- package/host/dist/lib/sdk-types.d.ts.map +1 -0
- package/host/dist/lib/settings.d.ts +69 -0
- package/host/dist/lib/settings.d.ts.map +1 -0
- package/host/dist/lib/signalingUrl.d.ts +28 -0
- package/host/dist/lib/signalingUrl.d.ts.map +1 -0
- package/host/dist/lib/theme.d.ts +4 -0
- package/host/dist/lib/theme.d.ts.map +1 -0
- package/host/dist/lib/themeMode.d.ts +9 -0
- package/host/dist/lib/themeMode.d.ts.map +1 -0
- package/host/dist/lib/tokens.d.ts +64 -0
- package/host/dist/lib/tokens.d.ts.map +1 -0
- package/host/dist/mountHost.d.ts +36 -0
- package/host/dist/mountHost.d.ts.map +1 -0
- package/package.json +76 -11
- package/reachy-mini-sdk.js +0 -2013
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `@pollen-robotics/reachy-mini-sdk` are
|
|
4
|
+
documented here. The format follows
|
|
5
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Versions
|
|
6
|
+
are kept in lock-step with the Reachy Mini Python daemon and are
|
|
7
|
+
driven from `pyproject.toml` at the repo root (the npm publish CI
|
|
8
|
+
overrides the `version` placeholder in `package.json`).
|
|
9
|
+
|
|
10
|
+
The host shell shares this package's version (single source of
|
|
11
|
+
truth); the wire protocol is versioned separately in
|
|
12
|
+
`PROTOCOL_VERSION` (see [host/SPEC.md §11](./host/SPEC.md#11-backlog)).
|
|
13
|
+
|
|
14
|
+
## Unreleased — succeeds 1.7.3
|
|
15
|
+
|
|
16
|
+
> **Breaking change.** Every app currently using
|
|
17
|
+
> `@pollen-robotics/reachy-mini-host` has to update its imports
|
|
18
|
+
> when it upgrades. Existing `1.7.x` installs keep working against
|
|
19
|
+
> the legacy `reachy-mini-host@1.7.x` tarball that stays on npm;
|
|
20
|
+
> only consumers who upgrade past `1.7.3` need to migrate. The
|
|
21
|
+
> target version is intentionally left unset in this PR — it will
|
|
22
|
+
> be picked at release time when `pyproject.toml` is bumped from
|
|
23
|
+
> `1.7.3` to the next number (the npm publish CI mirrors that bump
|
|
24
|
+
> into the package manifest).
|
|
25
|
+
|
|
26
|
+
**Single-package release: `@pollen-robotics/reachy-mini-host` is folded
|
|
27
|
+
into `@pollen-robotics/reachy-mini-sdk`.** App authors install,
|
|
28
|
+
version, and import from one entry point. The old package stays
|
|
29
|
+
available on npm at `1.7.x` for one minor cycle for graceful
|
|
30
|
+
migration and will then be `npm deprecate`d with a pointer to the
|
|
31
|
+
new subpaths.
|
|
32
|
+
|
|
33
|
+
### Migration
|
|
34
|
+
|
|
35
|
+
```diff
|
|
36
|
+
- "@pollen-robotics/reachy-mini-host": "^1.7.x",
|
|
37
|
+
- "@pollen-robotics/reachy-mini-sdk": "^1.7.x"
|
|
38
|
+
+ "@pollen-robotics/reachy-mini-sdk": "^<next-release>"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
```diff
|
|
42
|
+
- import { mountHost } from '@pollen-robotics/reachy-mini-host/auto';
|
|
43
|
+
- import { connectToHost } from '@pollen-robotics/reachy-mini-host/embed';
|
|
44
|
+
- import { PROTOCOL_VERSION } from '@pollen-robotics/reachy-mini-host/protocol';
|
|
45
|
+
+ import { mountHost } from '@pollen-robotics/reachy-mini-sdk/host/auto';
|
|
46
|
+
+ import { connectToHost } from '@pollen-robotics/reachy-mini-sdk/host/embed';
|
|
47
|
+
+ import { PROTOCOL_VERSION } from '@pollen-robotics/reachy-mini-sdk/host/protocol';
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
The host CDN bundles also moved:
|
|
51
|
+
|
|
52
|
+
```diff
|
|
53
|
+
- https://cdn.jsdelivr.net/npm/@pollen-robotics/reachy-mini-host@1/dist/entry/auto.js
|
|
54
|
+
+ https://cdn.jsdelivr.net/npm/@pollen-robotics/reachy-mini-sdk@1/host/dist/entry/auto.js
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Added
|
|
58
|
+
|
|
59
|
+
- New subpath exports on `@pollen-robotics/reachy-mini-sdk`:
|
|
60
|
+
- `./host` — `mountHost`, `connectToHost`, types
|
|
61
|
+
- `./host/auto` — CDN auto bundle for standalone apps
|
|
62
|
+
- `./host/embed` — CDN embed bundle for the iframe side
|
|
63
|
+
- `./host/protocol` — `PROTOCOL_VERSION`, `decodeCredsFromHash`, etc.
|
|
64
|
+
- `reachy-mini-sdk.d.ts` ships next to `reachy-mini-sdk.js` as the
|
|
65
|
+
canonical SDK type surface. The host re-exports from there
|
|
66
|
+
(`host/src/lib/sdk-types.ts` is now a thin barrel), removing the
|
|
67
|
+
earlier duplication TODO.
|
|
68
|
+
|
|
69
|
+
### Changed
|
|
70
|
+
|
|
71
|
+
- The host bundles (`./host`, `./host/auto`, `./host/embed`) now
|
|
72
|
+
import the SDK runtime directly and self-assign
|
|
73
|
+
`window.ReachyMini` (when unset) at module-load time, dispatching
|
|
74
|
+
`reachymini:ready`. App `index.html` files no longer need a
|
|
75
|
+
separate `<script type="module">` to load the SDK on the global,
|
|
76
|
+
and `useSdk` + `connectToHost` no longer race against a
|
|
77
|
+
late-arriving global. Apps that still set `window.ReachyMini`
|
|
78
|
+
themselves are unaffected — we only assign when it's missing.
|
|
79
|
+
- Log-prefix tag harmonised to `[reachy-mini-sdk/host]` /
|
|
80
|
+
`[reachy-mini-sdk/host/embed]` for greppability.
|
|
81
|
+
- Internal repo layout: `js/sdk/*` collapsed into `js/*` now that
|
|
82
|
+
there is only one package. The host source lives at `js/host/`,
|
|
83
|
+
the SDK runtime at `js/reachy-mini-sdk.js`, the package manifest
|
|
84
|
+
at `js/package.json`. No effect on consumers; only the
|
|
85
|
+
`repository.directory` field and the npm-publish CI working
|
|
86
|
+
directory changed.
|
|
87
|
+
|
|
88
|
+
### Removed
|
|
89
|
+
|
|
90
|
+
- Workspace coordinator `js/package.json` (was an npm workspace
|
|
91
|
+
root) and `js/package-lock.json` at the workspace level. The
|
|
92
|
+
single package's lockfile lives at `js/package-lock.json`.
|
|
93
|
+
- `@pollen-robotics/reachy-mini-host` package manifest — the host
|
|
94
|
+
ships under `@pollen-robotics/reachy-mini-sdk/host*` now. The
|
|
95
|
+
legacy npm package stays on `1.7.x` for one minor cycle for
|
|
96
|
+
graceful migration, then will be `npm deprecate`d.
|
|
97
|
+
|
|
98
|
+
### SDK changes drafted between 1.7.3 and the package merge
|
|
99
|
+
|
|
100
|
+
The following landed on `main` after `1.7.3` was published but
|
|
101
|
+
were never released on their own; they ship with this release:
|
|
102
|
+
|
|
103
|
+
- **Breaking (SDK)**: `wakeUp()` and `gotoSleep()` now return
|
|
104
|
+
`Promise<void>` (previously `boolean`). The promise resolves on
|
|
105
|
+
the daemon's `{command, completed: true}` response, after the
|
|
106
|
+
trajectory player has fully landed. Apps that previously relied
|
|
107
|
+
on the boolean return are unaffected in practice; apps that
|
|
108
|
+
*want* to await trajectory completion (e.g. to chain
|
|
109
|
+
`setMotorMode("disabled")` after a `gotoSleep`) can now do so
|
|
110
|
+
without racing.
|
|
111
|
+
- **SDK**: both motion helpers take an optional `{ timeoutMs }`
|
|
112
|
+
(default 8000 ms). The promise rejects on session teardown
|
|
113
|
+
(`stopSession` / `disconnect`) so consumers never wait forever
|
|
114
|
+
on an interrupted trajectory.
|
|
115
|
+
- **SDK**: `POST /send` responses with a 4xx / 5xx status now
|
|
116
|
+
produce a `console.warn` carrying the rejected message `type`
|
|
117
|
+
and the response body, making racy `setPeerStatus` /
|
|
118
|
+
`endSession` failures easier to diagnose.
|
|
119
|
+
- **Host types**: `src/lib/sdk-types.ts` refreshed to cover the
|
|
120
|
+
full SDK public surface (`autoConnect`, `gotoTarget`,
|
|
121
|
+
`setMotorTorque`, `subscribeLogs`, `requestState`, version /
|
|
122
|
+
hardware-id helpers, `robotState`, `isEmbedded`, jitter buffer
|
|
123
|
+
option, `autoStartFromUrl`). The motion helpers now type as
|
|
124
|
+
`Promise<void>` to match the SDK.
|
|
125
|
+
|
|
126
|
+
## 0.3.0 - 2026-05-16 (unreleased)
|
|
127
|
+
|
|
128
|
+
**This release is a full rewrite of the package against
|
|
129
|
+
[SPEC.md v1.0](./host/SPEC.md).** The public surface and the wire
|
|
130
|
+
protocol both change in incompatible ways.
|
|
131
|
+
|
|
132
|
+
### Breaking changes
|
|
133
|
+
|
|
134
|
+
- **API**: `mountHost()` options reduced to the documented surface
|
|
135
|
+
(`appName`, `appIconUrl`, `appEmoji`, `enableMicrophone`,
|
|
136
|
+
`clientId`, `devToken`, `target`). The following are removed:
|
|
137
|
+
- `theme: { light, dark }` (host owns its bundled MUI theme).
|
|
138
|
+
- `skipTheme` (no consumer-driven theming).
|
|
139
|
+
- `skipAuth` (host owns OAuth).
|
|
140
|
+
- **API**: `ConnectedHandle` reduced to the documented surface.
|
|
141
|
+
The following are removed:
|
|
142
|
+
- `sendCustom()` / `onCustom()` (no free-form bidi channel).
|
|
143
|
+
- `requestConfigUpdate()` (apps don't push config upstream).
|
|
144
|
+
- **API**: `devToken` payload renamed `{ token, username }` →
|
|
145
|
+
`{ token, userName }` for camelCase consistency with `appName`
|
|
146
|
+
and `hostName`.
|
|
147
|
+
- **API**: `ConnectedHandle.username` renamed to `ConnectedHandle.userName`.
|
|
148
|
+
- **Protocol**: `host:custom` / `embed:custom` removed.
|
|
149
|
+
- **Protocol**: `embed:request-config-update` removed.
|
|
150
|
+
- **Host shell**: removed the legacy `?app=<owner>/<space>`
|
|
151
|
+
branding-swap behaviour. The host renders exactly the app it
|
|
152
|
+
ships with, never another. Multi-app routing now lives in the
|
|
153
|
+
mobile catalog only.
|
|
154
|
+
|
|
155
|
+
### Added
|
|
156
|
+
|
|
157
|
+
- `SPEC.md` (v1.0): behavioural contract, state machines,
|
|
158
|
+
4 engineering invariants (single SDK per tab, token hygiene,
|
|
159
|
+
bundle pinning, React Strict Mode safety).
|
|
160
|
+
- `APP_AUTHOR_GUIDE.md`: step-by-step guide for building a new
|
|
161
|
+
app on top of the host.
|
|
162
|
+
- `REBUILD_PLAN.md`: project plan tracking the rewrite (deleted
|
|
163
|
+
once 0.3.0 ships).
|
|
164
|
+
- `LICENSE` (MIT).
|
|
165
|
+
|
|
166
|
+
### Changed
|
|
167
|
+
|
|
168
|
+
- **Documentation**: replaced the legacy `SPEC.md` (823 lines,
|
|
169
|
+
ambitious-future spec) with a focused v1.0 spec (~620 lines)
|
|
170
|
+
matching what we actually want to ship.
|
|
171
|
+
- **Package metadata**: `repository.url` now points at the
|
|
172
|
+
host-only repo. `homepage` and `bugs` added.
|
|
173
|
+
- **Versioning policy**: stays permissive pre-1.0 (see SPEC §11
|
|
174
|
+
"Versioning policy"); each minor release between 0.x.y may
|
|
175
|
+
ship breaking changes. Semver-strict starts at 1.0.
|
|
176
|
+
|
|
177
|
+
### Why a rewrite instead of a refactor
|
|
178
|
+
|
|
179
|
+
See `REBUILD_PLAN.md` § "Why a rebuild, not a refactor". TL;DR:
|
|
180
|
+
the API surface shrinks too much, and the previous code carried
|
|
181
|
+
half-implemented features (protocol-version negotiation,
|
|
182
|
+
heartbeat, custom channels) that were cheaper to retype than to
|
|
183
|
+
selectively remove.
|
|
184
|
+
|
|
185
|
+
## 0.2.0 - 2026-05-15
|
|
186
|
+
|
|
187
|
+
Initial extraction of the host shell into a standalone package.
|
|
188
|
+
Predates the SPEC.md v1.0 rewrite; deprecated in favour of 0.3.0.
|
package/README.md
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
# @pollen-robotics/reachy-mini-sdk
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The JS package for [Reachy Mini](https://github.com/pollen-robotics/reachy_mini). It ships:
|
|
4
4
|
|
|
5
|
-
The
|
|
5
|
+
- The **browser SDK** (`ReachyMini` class) for direct WebRTC control — the default export.
|
|
6
|
+
- An optional **host shell** (OAuth + robot picker + iframe bridge) for apps deployed as Hugging Face Spaces, exposed under the `./host*` subpaths.
|
|
7
|
+
|
|
8
|
+
Both used to be separate npm packages (`@pollen-robotics/reachy-mini-sdk` + `@pollen-robotics/reachy-mini-host`); they were merged into a single entry point so app authors only install, version, and import from one place.
|
|
9
|
+
|
|
10
|
+
The full SDK API reference lives in the JSDoc header of [`reachy-mini-sdk.js`](./reachy-mini-sdk.js): constructor options, read-only properties, the `disconnected → connected → streaming` state machine, the event list, and every command helper.
|
|
6
11
|
|
|
7
12
|
## Install
|
|
8
13
|
|
|
@@ -13,7 +18,13 @@ npm install @pollen-robotics/reachy-mini-sdk
|
|
|
13
18
|
```
|
|
14
19
|
|
|
15
20
|
```js
|
|
21
|
+
// Low-level robot control
|
|
16
22
|
import { ReachyMini } from "@pollen-robotics/reachy-mini-sdk";
|
|
23
|
+
|
|
24
|
+
// Host shell for Hugging Face Spaces apps (OAuth + picker + iframe)
|
|
25
|
+
import { mountHost } from "@pollen-robotics/reachy-mini-sdk/host";
|
|
26
|
+
import { connectToHost } from "@pollen-robotics/reachy-mini-sdk/host/embed";
|
|
27
|
+
import { PROTOCOL_VERSION } from "@pollen-robotics/reachy-mini-sdk/host/protocol";
|
|
17
28
|
```
|
|
18
29
|
|
|
19
30
|
### From a browser, no build step (Hugging Face Spaces, static hosting…)
|
|
@@ -21,16 +32,38 @@ import { ReachyMini } from "@pollen-robotics/reachy-mini-sdk";
|
|
|
21
32
|
Use an ESM CDN. The `+esm` suffix tells jsdelivr to resolve bare specifiers (the `@huggingface/hub` dependency) recursively, so the import just works:
|
|
22
33
|
|
|
23
34
|
```js
|
|
24
|
-
import { ReachyMini } from "https://cdn.jsdelivr.net/npm/@pollen-robotics/reachy-mini-sdk@1
|
|
35
|
+
import { ReachyMini } from "https://cdn.jsdelivr.net/npm/@pollen-robotics/reachy-mini-sdk@1/+esm";
|
|
25
36
|
```
|
|
26
37
|
|
|
27
38
|
Or via esm.sh:
|
|
28
39
|
|
|
29
40
|
```js
|
|
30
|
-
import { ReachyMini } from "https://esm.sh/@pollen-robotics/reachy-mini-sdk@1
|
|
41
|
+
import { ReachyMini } from "https://esm.sh/@pollen-robotics/reachy-mini-sdk@1";
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Track bleeding-edge from `main`:
|
|
45
|
+
|
|
46
|
+
```js
|
|
47
|
+
import { ReachyMini } from "https://cdn.jsdelivr.net/npm/@pollen-robotics/reachy-mini-sdk@main/+esm";
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
The host CDN bundles live under the same package:
|
|
51
|
+
|
|
52
|
+
```html
|
|
53
|
+
<!-- Standalone host shell entry -->
|
|
54
|
+
<script type="module"
|
|
55
|
+
src="https://cdn.jsdelivr.net/npm/@pollen-robotics/reachy-mini-sdk@1/host/dist/entry/auto.js">
|
|
56
|
+
</script>
|
|
57
|
+
|
|
58
|
+
<!-- Embed-side client (inside the iframe) -->
|
|
59
|
+
<script type="module"
|
|
60
|
+
src="https://cdn.jsdelivr.net/npm/@pollen-robotics/reachy-mini-sdk@1/host/dist/entry/embed.js">
|
|
61
|
+
</script>
|
|
31
62
|
```
|
|
32
63
|
|
|
33
|
-
|
|
64
|
+
Both bundles auto-install the SDK on `window.ReachyMini` at load time, so an app that uses the host no longer needs a separate `<script type="module">` to expose the SDK.
|
|
65
|
+
|
|
66
|
+
## Quick start (SDK only)
|
|
34
67
|
|
|
35
68
|
```js
|
|
36
69
|
import { ReachyMini } from "@pollen-robotics/reachy-mini-sdk";
|
|
@@ -61,6 +94,36 @@ robot.playSound("wake_up.wav");
|
|
|
61
94
|
|
|
62
95
|
See the JSDoc header in [`reachy-mini-sdk.js`](./reachy-mini-sdk.js) for the full surface (events, raw `setTarget`, audio controls, embedded-mode auto-start, etc.).
|
|
63
96
|
|
|
97
|
+
## Host shell
|
|
98
|
+
|
|
99
|
+
For Hugging Face Spaces apps that need OAuth + a robot picker + iframe lifecycle management:
|
|
100
|
+
|
|
101
|
+
- [`host/README.md`](./host/README.md) — quickstart and integration overview
|
|
102
|
+
- [`host/APP_AUTHOR_GUIDE.md`](./host/APP_AUTHOR_GUIDE.md) — full guide for app authors
|
|
103
|
+
- [`host/SPEC.md`](./host/SPEC.md) — host ↔ embed protocol spec
|
|
104
|
+
|
|
105
|
+
## Migration from `@pollen-robotics/reachy-mini-host`
|
|
106
|
+
|
|
107
|
+
```diff
|
|
108
|
+
- import { mountHost } from '@pollen-robotics/reachy-mini-host/auto';
|
|
109
|
+
- import { connectToHost } from '@pollen-robotics/reachy-mini-host/embed';
|
|
110
|
+
- import { PROTOCOL_VERSION } from '@pollen-robotics/reachy-mini-host/protocol';
|
|
111
|
+
+ import { mountHost } from '@pollen-robotics/reachy-mini-sdk/host/auto';
|
|
112
|
+
+ import { connectToHost } from '@pollen-robotics/reachy-mini-sdk/host/embed';
|
|
113
|
+
+ import { PROTOCOL_VERSION } from '@pollen-robotics/reachy-mini-sdk/host/protocol';
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
You can drop `@pollen-robotics/reachy-mini-host` from your `package.json`. The host CDN bundles also moved — adjust the jsdelivr URL in your `index.html`:
|
|
117
|
+
|
|
118
|
+
```diff
|
|
119
|
+
- https://cdn.jsdelivr.net/npm/@pollen-robotics/reachy-mini-host@1/dist/entry/auto.js
|
|
120
|
+
+ https://cdn.jsdelivr.net/npm/@pollen-robotics/reachy-mini-sdk@1/host/dist/entry/auto.js
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
The host bundles now import the SDK directly and assign it on `window.ReachyMini` at load time, so apps no longer need a second `<script type="module">` for the SDK alone.
|
|
124
|
+
|
|
125
|
+
See the [CHANGELOG](./CHANGELOG.md) for the full release history.
|
|
126
|
+
|
|
64
127
|
## License
|
|
65
128
|
|
|
66
129
|
Apache-2.0 — see [LICENSE](./LICENSE).
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Math utilities for the ReachyMini SDK.
|
|
3
|
+
*
|
|
4
|
+
* These are the canonical conversions between human-readable
|
|
5
|
+
* roll/pitch/yaw degrees and the wire format the daemon expects
|
|
6
|
+
* (4×4 rotation matrices, ZYX convention).
|
|
7
|
+
*/
|
|
8
|
+
export declare function degToRad(deg: number): number;
|
|
9
|
+
export declare function radToDeg(rad: number): number;
|
|
10
|
+
/**
|
|
11
|
+
* Roll/pitch/yaw (degrees) → 4×4 rotation matrix (ZYX convention).
|
|
12
|
+
* This is the wire format for the robot's `set_target` command.
|
|
13
|
+
*/
|
|
14
|
+
export declare function rpyToMatrix(rollDeg: number, pitchDeg: number, yawDeg: number): number[][];
|
|
15
|
+
/**
|
|
16
|
+
* Rotation matrix (3×3 or 4×4) → { roll, pitch, yaw } in degrees.
|
|
17
|
+
*/
|
|
18
|
+
export declare function matrixToRpy(m: number[][]): {
|
|
19
|
+
roll: number;
|
|
20
|
+
pitch: number;
|
|
21
|
+
yaw: number;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=math.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../lib/math.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACvB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACf,MAAM,EAAE,EAAE,CAWZ;AAED;;GAEG;AACH,wBAAgB,WAAW,CACvB,CAAC,EAAE,MAAM,EAAE,EAAE,GACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAM9C"}
|
package/dist/lib/math.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Math utilities for the ReachyMini SDK.
|
|
3
|
+
*
|
|
4
|
+
* These are the canonical conversions between human-readable
|
|
5
|
+
* roll/pitch/yaw degrees and the wire format the daemon expects
|
|
6
|
+
* (4×4 rotation matrices, ZYX convention).
|
|
7
|
+
*/
|
|
8
|
+
export function degToRad(deg) {
|
|
9
|
+
return deg * Math.PI / 180;
|
|
10
|
+
}
|
|
11
|
+
export function radToDeg(rad) {
|
|
12
|
+
return rad * 180 / Math.PI;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Roll/pitch/yaw (degrees) → 4×4 rotation matrix (ZYX convention).
|
|
16
|
+
* This is the wire format for the robot's `set_target` command.
|
|
17
|
+
*/
|
|
18
|
+
export function rpyToMatrix(rollDeg, pitchDeg, yawDeg) {
|
|
19
|
+
const r = degToRad(rollDeg), p = degToRad(pitchDeg), y = degToRad(yawDeg);
|
|
20
|
+
const cy = Math.cos(y), sy = Math.sin(y);
|
|
21
|
+
const cp = Math.cos(p), sp = Math.sin(p);
|
|
22
|
+
const cr = Math.cos(r), sr = Math.sin(r);
|
|
23
|
+
return [
|
|
24
|
+
[cy * cp, cy * sp * sr - sy * cr, cy * sp * cr + sy * sr, 0],
|
|
25
|
+
[sy * cp, sy * sp * sr + cy * cr, sy * sp * cr - cy * sr, 0],
|
|
26
|
+
[-sp, cp * sr, cp * cr, 0],
|
|
27
|
+
[0, 0, 0, 1],
|
|
28
|
+
];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Rotation matrix (3×3 or 4×4) → { roll, pitch, yaw } in degrees.
|
|
32
|
+
*/
|
|
33
|
+
export function matrixToRpy(m) {
|
|
34
|
+
return {
|
|
35
|
+
roll: radToDeg(Math.atan2(m[2][1], m[2][2])),
|
|
36
|
+
pitch: radToDeg(Math.asin(-m[2][0])),
|
|
37
|
+
yaw: radToDeg(Math.atan2(m[1][0], m[0][0])),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=math.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.js","sourceRoot":"","sources":["../../lib/math.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,UAAU,QAAQ,CAAC,GAAW;IAChC,OAAO,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW;IAChC,OAAO,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACvB,OAAe,EACf,QAAgB,EAChB,MAAc;IAEd,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1E,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzC,OAAO;QACH,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;KACf,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACvB,CAAa;IAEb,OAAO;QACH,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC;QAChD,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC;QACtC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC;KAClD,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ReachyMini — Browser SDK for controlling a Reachy Mini robot over WebRTC.
|
|
3
|
+
* See `../reachy-mini-sdk.ts` for the package's barrel and the README for
|
|
4
|
+
* a quick-start guide.
|
|
5
|
+
*/
|
|
6
|
+
import type { ApplyAudioConfigOptions, AudioConfigEntry, AutoConnectOptions, AutoConnectResult, MotionAwaitOptions, MoveData, PlayMoveOptions, PlayMoveResult, PlayUploadedAudioOptions, ReachyMiniInstance, ReachyMiniOptions, RobotInfo, RobotState, SubscribeLogsOptions, UploadAudioOptions } from './types.js';
|
|
7
|
+
export declare class ReachyMini extends EventTarget implements ReachyMiniInstance {
|
|
8
|
+
private readonly _signalingUrl;
|
|
9
|
+
private readonly _clientId;
|
|
10
|
+
private readonly _appName;
|
|
11
|
+
private readonly _videoJitterBufferTargetMs;
|
|
12
|
+
private _autoStartFromUrl;
|
|
13
|
+
private _autoStartAttempted;
|
|
14
|
+
private _state;
|
|
15
|
+
private _robots;
|
|
16
|
+
private _robotState;
|
|
17
|
+
private readonly _preselectedRobotId;
|
|
18
|
+
private _token;
|
|
19
|
+
private _username;
|
|
20
|
+
private _tokenExpires;
|
|
21
|
+
private _sseAbortController;
|
|
22
|
+
_pc: RTCPeerConnection | null;
|
|
23
|
+
private _dc;
|
|
24
|
+
private _sessionId;
|
|
25
|
+
private _selectedRobotId;
|
|
26
|
+
private _pendingRemoteIce;
|
|
27
|
+
_micStream: MediaStream | null;
|
|
28
|
+
private _micMuted;
|
|
29
|
+
private _audioMuted;
|
|
30
|
+
private _micSupported;
|
|
31
|
+
private _latencyMonitorId;
|
|
32
|
+
private _stateRefreshInterval;
|
|
33
|
+
private _versionResolve;
|
|
34
|
+
private _hardwareIdResolve;
|
|
35
|
+
private _volumeResolve;
|
|
36
|
+
private _micVolumeResolve;
|
|
37
|
+
private _applyAudioConfigResolve;
|
|
38
|
+
private _readAudioParameterResolve;
|
|
39
|
+
private readonly _logSubscribers;
|
|
40
|
+
private _broadcastWaiters;
|
|
41
|
+
private _activeMoveUploadId;
|
|
42
|
+
private _activeAudioUploadId;
|
|
43
|
+
private _sessionResolve;
|
|
44
|
+
private _sessionReject;
|
|
45
|
+
private _iceConnected;
|
|
46
|
+
private _dcOpen;
|
|
47
|
+
private readonly _pendingMotionCompletions;
|
|
48
|
+
private _videoElement;
|
|
49
|
+
constructor(options?: ReachyMiniOptions);
|
|
50
|
+
get state(): 'disconnected' | 'connected' | 'streaming';
|
|
51
|
+
get robots(): RobotInfo[];
|
|
52
|
+
get robotState(): RobotState;
|
|
53
|
+
get username(): string | null;
|
|
54
|
+
get isAuthenticated(): boolean;
|
|
55
|
+
get micSupported(): boolean;
|
|
56
|
+
get micMuted(): boolean;
|
|
57
|
+
get audioMuted(): boolean;
|
|
58
|
+
get preselectedRobotId(): string | null;
|
|
59
|
+
get isEmbedded(): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Internal: try to honour the `autoStartFromUrl` constructor
|
|
62
|
+
* option. Called from the signaling-message handler after every
|
|
63
|
+
* `robotsChanged` emit, so a robot that comes online after the
|
|
64
|
+
* SDK is already `connected` still triggers the auto-start.
|
|
65
|
+
*/
|
|
66
|
+
_maybeAutoStart(): void;
|
|
67
|
+
authenticate(): Promise<boolean>;
|
|
68
|
+
login(): Promise<void>;
|
|
69
|
+
logout(): void;
|
|
70
|
+
connect(token?: string): Promise<void>;
|
|
71
|
+
autoConnect(options?: AutoConnectOptions): Promise<AutoConnectResult>;
|
|
72
|
+
private _fetchOwnedRobots;
|
|
73
|
+
private _waitForRobotInList;
|
|
74
|
+
startSession(robotId: string): Promise<void>;
|
|
75
|
+
private _failSessionRejected;
|
|
76
|
+
stopSession(): Promise<void>;
|
|
77
|
+
disconnect(): void;
|
|
78
|
+
setTarget({ head, antennas, body_yaw }?: {
|
|
79
|
+
head?: number[];
|
|
80
|
+
antennas?: number[];
|
|
81
|
+
body_yaw?: number;
|
|
82
|
+
}): boolean;
|
|
83
|
+
gotoTarget({ head, antennas, body_yaw, duration }: {
|
|
84
|
+
head?: number[];
|
|
85
|
+
antennas?: number[];
|
|
86
|
+
body_yaw?: number;
|
|
87
|
+
duration: number;
|
|
88
|
+
}): boolean;
|
|
89
|
+
setHeadRpyDeg(rollDeg: number, pitchDeg: number, yawDeg: number): boolean;
|
|
90
|
+
setAntennasDeg(rightDeg: number, leftDeg: number): boolean;
|
|
91
|
+
setBodyYawDeg(yawDeg: number): boolean;
|
|
92
|
+
playSound(file: string): boolean;
|
|
93
|
+
setMotorMode(mode: 'enabled' | 'disabled' | 'gravity_compensation'): boolean;
|
|
94
|
+
setMotorTorque(on: boolean, ids?: string[] | null): boolean;
|
|
95
|
+
wakeUp({ timeoutMs }?: MotionAwaitOptions): Promise<void>;
|
|
96
|
+
gotoSleep({ timeoutMs }?: MotionAwaitOptions): Promise<void>;
|
|
97
|
+
private _sendCommandAwaitCompletion;
|
|
98
|
+
private _rejectPendingMotionCompletions;
|
|
99
|
+
isAwake(): boolean;
|
|
100
|
+
ensureAwake(timeoutMs?: number): Promise<boolean>;
|
|
101
|
+
getVersion(): Promise<string | null>;
|
|
102
|
+
getHardwareId(): Promise<string | null>;
|
|
103
|
+
getVolume(): Promise<number | null>;
|
|
104
|
+
setVolume(volume: number): Promise<number | null>;
|
|
105
|
+
getMicrophoneVolume(): Promise<number | null>;
|
|
106
|
+
setMicrophoneVolume(volume: number): Promise<number | null>;
|
|
107
|
+
applyAudioConfig(config: AudioConfigEntry[], { verify }?: ApplyAudioConfigOptions): Promise<boolean>;
|
|
108
|
+
readAudioParameter(name: string): Promise<number[] | null>;
|
|
109
|
+
/**
|
|
110
|
+
* Internal: send a command and await the matching daemon response in a
|
|
111
|
+
* named single-resolver slot. Used by the volume helpers and the
|
|
112
|
+
* XVF3800 audio-config helpers — every one of them has a strict
|
|
113
|
+
* request/response shape where a single in-flight call per slot is
|
|
114
|
+
* sufficient. If a previous request on the same slot is still
|
|
115
|
+
* pending when a new one comes in, the older promise is resolved to
|
|
116
|
+
* `null` so its caller doesn't hang forever.
|
|
117
|
+
*
|
|
118
|
+
* Slot access is passed in as getter/setter closures rather than a
|
|
119
|
+
* key into `this`: that keeps the helper fully generic-checked (T is
|
|
120
|
+
* inferred from the slot's resolver type at each call site) with no
|
|
121
|
+
* indexed-property casts.
|
|
122
|
+
*/
|
|
123
|
+
private _slotRoundtrip;
|
|
124
|
+
sendRaw(data: unknown): boolean;
|
|
125
|
+
subscribeLogs({ onLine, onError }: SubscribeLogsOptions): () => void;
|
|
126
|
+
requestState(): boolean;
|
|
127
|
+
setAudioMuted(muted: boolean): void;
|
|
128
|
+
setMicMuted(muted: boolean): void;
|
|
129
|
+
attachVideo(videoElement: HTMLVideoElement): () => void;
|
|
130
|
+
playMove(motion: MoveData, { audioBlob, audioLeadMs, description, encoding, playFrequency, initialGotoDuration, startTimeoutMs, onProgress, onStarted, }?: PlayMoveOptions): Promise<PlayMoveResult>;
|
|
131
|
+
cancelMove(uploadId?: string | null): boolean;
|
|
132
|
+
uploadAudio(audioBlob: Blob, { description, onProgress }?: UploadAudioOptions): Promise<string>;
|
|
133
|
+
playUploadedAudio(uploadId: string, { timeoutMs }?: PlayUploadedAudioOptions): Promise<{
|
|
134
|
+
started: true;
|
|
135
|
+
}>;
|
|
136
|
+
cancelAudio(uploadId?: string | null): boolean;
|
|
137
|
+
private _emit;
|
|
138
|
+
private _waitForBroadcast;
|
|
139
|
+
private _awaitDataChannelDrain;
|
|
140
|
+
private _sendToServer;
|
|
141
|
+
private _sendCommand;
|
|
142
|
+
private _checkSessionReady;
|
|
143
|
+
private _handleSignalingMessage;
|
|
144
|
+
private _handleEndSession;
|
|
145
|
+
private _handlePeerMessage;
|
|
146
|
+
private _handleRobotMessage;
|
|
147
|
+
/** Snap video playback to live edge if buffered lag exceeds 0.5 s. */
|
|
148
|
+
private _startLatencyMonitor;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=reachy-mini.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reachy-mini.d.ts","sourceRoot":"","sources":["../../lib/reachy-mini.ts"],"names":[],"mappings":"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"}
|