dreamscale 0.1.0a24__tar.gz

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.
Files changed (96) hide show
  1. dreamscale-0.1.0a24/.gitignore +98 -0
  2. dreamscale-0.1.0a24/CHANGELOG.md +355 -0
  3. dreamscale-0.1.0a24/LICENSE +176 -0
  4. dreamscale-0.1.0a24/PKG-INFO +576 -0
  5. dreamscale-0.1.0a24/README.md +522 -0
  6. dreamscale-0.1.0a24/dreamscale/__init__.py +77 -0
  7. dreamscale-0.1.0a24/dreamscale/arm.py +431 -0
  8. dreamscale-0.1.0a24/dreamscale/assets/__init__.py +0 -0
  9. dreamscale-0.1.0a24/dreamscale/assets/camera_reference.jpg +0 -0
  10. dreamscale-0.1.0a24/dreamscale/assets/camera_reference.svg +82 -0
  11. dreamscale-0.1.0a24/dreamscale/bench.py +236 -0
  12. dreamscale-0.1.0a24/dreamscale/calibrate.py +52 -0
  13. dreamscale-0.1.0a24/dreamscale/cli.py +423 -0
  14. dreamscale-0.1.0a24/dreamscale/config.py +165 -0
  15. dreamscale-0.1.0a24/dreamscale/constants.py +95 -0
  16. dreamscale-0.1.0a24/dreamscale/control.py +359 -0
  17. dreamscale-0.1.0a24/dreamscale/demo.py +66 -0
  18. dreamscale-0.1.0a24/dreamscale/doctor.py +405 -0
  19. dreamscale-0.1.0a24/dreamscale/dreamzero.py +739 -0
  20. dreamscale-0.1.0a24/dreamscale/dreamzero_yam.py +175 -0
  21. dreamscale-0.1.0a24/dreamscale/errors.py +352 -0
  22. dreamscale-0.1.0a24/dreamscale/examples/__init__.py +1 -0
  23. dreamscale-0.1.0a24/dreamscale/examples/yam_custom.py +203 -0
  24. dreamscale-0.1.0a24/dreamscale/examples/yam_trace.py +87 -0
  25. dreamscale-0.1.0a24/dreamscale/franka.py +110 -0
  26. dreamscale-0.1.0a24/dreamscale/guides/sourccey.md +38 -0
  27. dreamscale-0.1.0a24/dreamscale/guides/yam-async.md +176 -0
  28. dreamscale-0.1.0a24/dreamscale/guides/yam.md +199 -0
  29. dreamscale-0.1.0a24/dreamscale/hardware/__init__.py +0 -0
  30. dreamscale-0.1.0a24/dreamscale/hardware/camera_sources.py +582 -0
  31. dreamscale-0.1.0a24/dreamscale/hardware/cameras.py +41 -0
  32. dreamscale-0.1.0a24/dreamscale/hardware/fake.py +64 -0
  33. dreamscale-0.1.0a24/dreamscale/hardware/lerobot_so101.py +122 -0
  34. dreamscale-0.1.0a24/dreamscale/hardware/ports.py +39 -0
  35. dreamscale-0.1.0a24/dreamscale/hardware/protocols.py +28 -0
  36. dreamscale-0.1.0a24/dreamscale/hardware/yam-native-constraints.txt +7 -0
  37. dreamscale-0.1.0a24/dreamscale/hardware/yam_can.py +132 -0
  38. dreamscale-0.1.0a24/dreamscale/hardware/yam_cli_setup.py +318 -0
  39. dreamscale-0.1.0a24/dreamscale/hardware/yam_config.py +114 -0
  40. dreamscale-0.1.0a24/dreamscale/hardware/yam_doctor.py +179 -0
  41. dreamscale-0.1.0a24/dreamscale/hardware/yam_native.py +290 -0
  42. dreamscale-0.1.0a24/dreamscale/hardware/yam_rig.py +245 -0
  43. dreamscale-0.1.0a24/dreamscale/hardware/yam_runner.py +430 -0
  44. dreamscale-0.1.0a24/dreamscale/hardware/yam_setup.html +73 -0
  45. dreamscale-0.1.0a24/dreamscale/hardware/yam_setup.py +272 -0
  46. dreamscale-0.1.0a24/dreamscale/inference.py +494 -0
  47. dreamscale-0.1.0a24/dreamscale/libero.py +67 -0
  48. dreamscale-0.1.0a24/dreamscale/motion/__init__.py +0 -0
  49. dreamscale-0.1.0a24/dreamscale/motion/ensemble.py +91 -0
  50. dreamscale-0.1.0a24/dreamscale/motion/loop.py +258 -0
  51. dreamscale-0.1.0a24/dreamscale/motion/safety.py +112 -0
  52. dreamscale-0.1.0a24/dreamscale/optional.py +15 -0
  53. dreamscale-0.1.0a24/dreamscale/policy/__init__.py +74 -0
  54. dreamscale-0.1.0a24/dreamscale/policy/config.py +176 -0
  55. dreamscale-0.1.0a24/dreamscale/policy/dreamzero_runtime.py +601 -0
  56. dreamscale-0.1.0a24/dreamscale/policy/lifecycle.py +654 -0
  57. dreamscale-0.1.0a24/dreamscale/policy/remote.py +1657 -0
  58. dreamscale-0.1.0a24/dreamscale/policy/run_loop.py +1622 -0
  59. dreamscale-0.1.0a24/dreamscale/policy/runtime/__init__.py +1 -0
  60. dreamscale-0.1.0a24/dreamscale/policy/runtime/action_buffer.py +441 -0
  61. dreamscale-0.1.0a24/dreamscale/policy/runtime/action_smoothing.py +265 -0
  62. dreamscale-0.1.0a24/dreamscale/policy/runtime/adaptive_smoothing.py +168 -0
  63. dreamscale-0.1.0a24/dreamscale/policy/runtime/calibration.py +489 -0
  64. dreamscale-0.1.0a24/dreamscale/policy/runtime/contract.py +279 -0
  65. dreamscale-0.1.0a24/dreamscale/policy/runtime/control.py +387 -0
  66. dreamscale-0.1.0a24/dreamscale/policy/runtime/result.py +157 -0
  67. dreamscale-0.1.0a24/dreamscale/policy/runtime/rtc.py +774 -0
  68. dreamscale-0.1.0a24/dreamscale/policy/telemetry.py +71 -0
  69. dreamscale-0.1.0a24/dreamscale/policy/types.py +423 -0
  70. dreamscale-0.1.0a24/dreamscale/quickstart.py +483 -0
  71. dreamscale-0.1.0a24/dreamscale/region_probe.py +400 -0
  72. dreamscale-0.1.0a24/dreamscale/sessions.py +284 -0
  73. dreamscale-0.1.0a24/dreamscale/sessions_cmd.py +130 -0
  74. dreamscale-0.1.0a24/dreamscale/sim/__init__.py +0 -0
  75. dreamscale-0.1.0a24/dreamscale/sim/artifacts.py +88 -0
  76. dreamscale-0.1.0a24/dreamscale/sim/metrics.py +336 -0
  77. dreamscale-0.1.0a24/dreamscale/sim/runtime.py +401 -0
  78. dreamscale-0.1.0a24/dreamscale/sim/sim_arm.py +1392 -0
  79. dreamscale-0.1.0a24/dreamscale/sim/timing.py +100 -0
  80. dreamscale-0.1.0a24/dreamscale/so101.py +79 -0
  81. dreamscale-0.1.0a24/dreamscale/sourccey.py +116 -0
  82. dreamscale-0.1.0a24/dreamscale/state.py +120 -0
  83. dreamscale-0.1.0a24/dreamscale/status.py +208 -0
  84. dreamscale-0.1.0a24/dreamscale/terminal.py +440 -0
  85. dreamscale-0.1.0a24/dreamscale/trace.py +456 -0
  86. dreamscale-0.1.0a24/dreamscale/trace_views.py +114 -0
  87. dreamscale-0.1.0a24/dreamscale/transport_selection.py +141 -0
  88. dreamscale-0.1.0a24/dreamscale/wire.py +499 -0
  89. dreamscale-0.1.0a24/dreamscale/yam.py +170 -0
  90. dreamscale-0.1.0a24/examples/dreamzero_droid.py +40 -0
  91. dreamscale-0.1.0a24/examples/dreamzero_yam.py +47 -0
  92. dreamscale-0.1.0a24/examples/franka_inference.py +27 -0
  93. dreamscale-0.1.0a24/examples/libero_http.py +166 -0
  94. dreamscale-0.1.0a24/examples/libero_rollout.py +51 -0
  95. dreamscale-0.1.0a24/examples/yam_inference.py +31 -0
  96. dreamscale-0.1.0a24/pyproject.toml +134 -0
@@ -0,0 +1,98 @@
1
+ # macOS
2
+ .DS_Store
3
+
4
+ # Python
5
+ __pycache__/
6
+ *.py[cod]
7
+ .pytest_cache/
8
+ .mypy_cache/
9
+ .ruff_cache/
10
+ .coverage
11
+ htmlcov/
12
+
13
+ # Local caches (e.g. lerobot dataset + smoke-test artifacts)
14
+ .cache/
15
+
16
+ # Virtual environments
17
+ .venv/
18
+ venv/
19
+
20
+ # Build and packaging output
21
+ build/
22
+ dist/
23
+ *.egg-info/
24
+
25
+ # Local environment files
26
+ .env
27
+ .env.*
28
+ !.env.example
29
+
30
+ # Logs
31
+ *.log
32
+
33
+ # Experiment note assets and generated analysis payloads
34
+ sandbox/experiments/*/notes/assets/
35
+
36
+ # Local scratch/checkouts
37
+ tmp/
38
+ .worktrees/
39
+ .codex/*
40
+ !.codex/skills/
41
+ !.codex/skills/**
42
+
43
+ # Root cleanup holding area for generated/non-product artifacts moved out of
44
+ # the repository root.
45
+ sandbox/.root-artifacts/
46
+
47
+ # Phase 0 traces and generated infra state (now under sandbox/)
48
+ sandbox/traces/*.jsonl
49
+ sandbox/traces/*.csv
50
+ sandbox/traces/*.parquet
51
+ sandbox/traces/mtr/
52
+ sandbox/experiments/*/runs/**/mtr-*.txt
53
+ sandbox/experiments/*/runs/**/qlog/
54
+
55
+ # Raw experiment outputs stay local. Keep source, configuration, summaries,
56
+ # result tables, and report images trackable, including inside run directories.
57
+ sandbox/experiments/**/runs/**/*.jsonl
58
+ sandbox/experiments/**/runs/**/*.mp4
59
+ sandbox/experiments/**/runs/**/*.webm
60
+ sandbox/experiments/**/runs/**/*.avi
61
+ sandbox/experiments/**/runs/**/*.mov
62
+ sandbox/experiments/**/runs/**/*.mkv
63
+ sandbox/experiments/**/runs/**/timeline.json
64
+ sandbox/experiments/**/runs/**/timeline.html
65
+ sandbox/experiments/**/runs/**/frame_timeline.json
66
+ sandbox/experiments/**/runs/**/actions.json
67
+ sandbox/experiments/**/runs/**/*.npz
68
+ sandbox/experiments/**/runs/**/*.npy
69
+ sandbox/experiments/**/probe-results/**/*.jsonl
70
+ sandbox/experiments/**/probe-results/**/*.mp4
71
+ sandbox/experiments/**/probe-results/**/*.webm
72
+ sandbox/experiments/**/probe-results/**/*.avi
73
+ sandbox/experiments/**/probe-results/**/*.mov
74
+ sandbox/experiments/**/probe-results/**/*.mkv
75
+ sandbox/experiments/**/probe-results/**/timeline.json
76
+ sandbox/experiments/**/probe-results/**/timeline.html
77
+ sandbox/experiments/**/probe-results/**/frame_timeline.json
78
+ sandbox/experiments/**/probe-results/**/actions.json
79
+ sandbox/experiments/**/probe-results/**/*.npz
80
+ sandbox/experiments/**/probe-results/**/*.npy
81
+ sandbox/infra/terraform/.terraform/
82
+ # .terraform.lock.hcl is intentionally committed so the whole team pins identical
83
+ # provider versions. State now lives in S3 (see sandbox/infra/terraform/backend.tf);
84
+ # the local tfstate files below are stale artifacts and stay ignored.
85
+ sandbox/infra/terraform/terraform.tfstate
86
+ sandbox/infra/terraform/terraform.tfstate.backup
87
+ sandbox/infra/terraform/tfplan
88
+ sandbox/infra/certs/
89
+
90
+ # Local model checkpoints
91
+ sandbox/policies/flash/molmoact2-so101/MolmoAct2-SO100_101/
92
+ .gstack/
93
+
94
+ # Cold-start benchmark run outputs (raw per-iteration meta/ssm dumps + combined.json).
95
+ # Commit a baseline report.md by hand if you want to keep it; runs/ is ephemeral.
96
+ mvp/benchmarks/runs/
97
+ mvp/e2e/runs/
98
+ sandbox/benchmarks/runs/
@@ -0,0 +1,355 @@
1
+ # Changelog
2
+
3
+ Notable changes to the Dreamscale Python SDK (published as `dropbear` up to
4
+ 0.1.0a23) are recorded here.
5
+
6
+ ## 0.1.0a24 - Unreleased
7
+
8
+ The SDK is renamed from `dropbear` to `dreamscale`: the PyPI package, the import
9
+ package and the command. Behavior, the wire protocol and `dropbear-transport`
10
+ 0.1.1a9 are unchanged.
11
+
12
+ - Install `dreamscale`, `import dreamscale` and run `dreamscale login`,
13
+ `dreamscale doctor` and so on. Recovery hints and install commands now say
14
+ `dreamscale`.
15
+ - Existing code keeps working without changes through the `dropbear` 0.1.0a24
16
+ compatibility package. It depends on `dreamscale>=0.1.0a24,<0.2` and maps
17
+ every `dropbear.*` import to the same `dreamscale.*` module (one
18
+ `DeprecationWarning`). Its `dropbear` command prints a one-line notice and
19
+ runs `dreamscale`. Extras such as `dropbear[so101]` install the matching
20
+ `dreamscale` extra. Exact pins such as `dropbear==0.1.0a23` keep installing
21
+ that release.
22
+ - Settings: new installs use `~/.dreamscale`. An existing `~/.dropbear`, and
23
+ `~/.config/dropbear/yam.json`, are used in place until the new location
24
+ exists; nothing is copied or moved. `dreamscale doctor` says when the old
25
+ directory is in use.
26
+ - `DREAMSCALE_HOME` and `DREAMSCALE_API_KEY` are read first. `DROPBEAR_HOME`
27
+ and `DROPBEAR_API_KEY` still work, with a one-time `FutureWarning`.
28
+ - `DreamscaleError` is the base error; `DropbearError` remains an alias.
29
+ - Login accepts API keys with either the `dropbear_sk_` or `dreamscale_sk_`
30
+ prefix, and error details read `x-dreamscale-request-id` before
31
+ `x-dropbear-request-id`.
32
+ - Logger names follow the package (`dreamscale.*`), and SDK threads are named
33
+ `dreamscale-*`. The YAM arm and camera lock files keep their names, so an
34
+ older `dropbear` process and `dreamscale` still exclude each other.
35
+
36
+ ## 0.1.0a23 - 2026-09-23
37
+
38
+ - Correct the packaged YAM installation command to include the released async execution and recording features.
39
+ - Remove stale pre-qualification wording from the Sourccey guide. Runtime Python code and the exact transport `0.1.1a9` dependency are unchanged from a22.
40
+
41
+ ## 0.1.0a22 - 2026-09-23
42
+
43
+ - Pin transport `0.1.1a9`, which registers Sourccey in the shared supported-model and UDP port catalog. No wire format or inference behavior changes.
44
+
45
+ ## 0.1.0a21 - 2026-09-23
46
+
47
+ - Add `dropbear.sourccey.observe()` for the four-camera, 16-coordinate Sourccey X-VLA contract.
48
+ - Preserve the checkpoint's robot coordinates and complete 30-action chunks. Holds keep arm, gripper and lift positions while stopping base velocity.
49
+ - Read Sourccey's action rate from the qualified server contract; reject unsupported cadence overrides and incomplete contracts.
50
+ - Requires `dropbear-transport==0.1.1a8`. Endpoint admission remains gated on recorded-input qualification.
51
+
52
+ ## 0.1.0a20 - 2026-09-21
53
+
54
+ - Preserve the first managed YAM action horizon, anchor it in measured state,
55
+ and wait 100 ms after the first accepted dispatch before the second observation.
56
+ Hold a newly measured pose on underruns; do not extrapolate missing motion or
57
+ burst overdue YAM commands after a slow callback.
58
+ - Add opt-in YAM `motion_handover` (finite correction) and `motion_speed`
59
+ (intra-chunk speed adaptation), with one reference-speed tuning parameter.
60
+ Experimental modes keep grippers independent of arm damping; `auto` still
61
+ resolves to the existing motion mode.
62
+ - Retain partial rollout summaries on interruption/error and distinguish startup
63
+ waiting, execution underruns, attempted and completed actuator callbacks.
64
+ - Add `dropbear[trace]`, `TraceRecorder`, and `--trace-dir` / `--trace-images` for
65
+ bounded local Rerun recordings of inputs, queues, raw/merged trajectories,
66
+ requested/accepted/measured targets and timing. Record on the controller and
67
+ inspect the saved file on the Mac without opening cameras.
68
+
69
+ ## 0.1.0a18 - 2026-09-19
70
+
71
+ - Keep MolmoAct2-BimanualYAM's Modal tunnel active between predictions with
72
+ native WebSocket pings every 75 ms. The existing 20-second pong timeout and
73
+ connection teardown remain in force; AWS QUIC and other models retain their
74
+ current transport settings. No new public SDK flag is required.
75
+ - Close an opened WebSocket if client construction fails, including unavailable
76
+ codec initialization, before propagating the original error.
77
+
78
+ ## 0.1.0a17 - 2026-09-19
79
+
80
+ - Recover transient tunnel opening timeouts or connection resets with up to
81
+ three bounded attachment attempts to the same session. Authentication and
82
+ protocol errors remain terminal; no duplicate allocation or inference occurs.
83
+
84
+ - Keep normalized gripper targets within `[0,1]` when motion smoothing
85
+ MolmoAct2-BimanualYAM and DROID chunks. Reject out-of-range source targets;
86
+ raw DreamZero-YAM and SO101 gripper units remain unchanged.
87
+
88
+ - Extend advanced AWS/Modal provider constraints to MolmoAct2-BimanualYAM.
89
+ Its qualified availability route uses Oregon L4 then Modal US-West L4.
90
+ - Add `dropbear run yam --provider aws|modal --region available|nearest|us-west-2`.
91
+ Modal accepts `available` or `us-west-2`; the task runner retains RTC off,
92
+ 30 Hz / 30 actions, a 450-second startup limit and explicit keep-warm control.
93
+
94
+ ## 0.1.0a16 - 2026-09-10
95
+
96
+ ### Added
97
+
98
+ - Advanced SO101 `provider="aws"|"modal"` constraints on `connect()` and
99
+ `aconnect()`, combined with the existing region option. Explicit selection
100
+ requires server acknowledgement before allocation and cannot silently fall
101
+ back to another provider or escape an explicit region. Automatic placement
102
+ and the existing transport package remain unchanged.
103
+
104
+ - Guided YAM camera and passive CAN setup now supports a LAN browser and
105
+ complete `--cli` fallback, with saved choices and resumable configuration.
106
+ - An attended native YAM adapter and task runner keep local cameras and arms
107
+ connected across prediction, execution and stop/hold cycles. The package
108
+ includes the hardware guide, driver constraints and custom callback example.
109
+ - BimanualYAM observations can carry optional Unix-epoch acquisition timestamps
110
+ for the top, left, and right cameras. The wire observation preserves each
111
+ source timestamp while recording assembly as its send time; existing callers
112
+ without timestamps retain the prior behavior.
113
+
114
+ ### Changed
115
+
116
+ - Public `connect()` and `aconnect()` calls now keep compute warm for 60 seconds
117
+ by default. Passing `keep_warm=0` still disables retention, and lower-level
118
+ control-plane calls continue to omit keep-warm unless explicitly configured.
119
+
120
+ ## 0.1.0a15
121
+
122
+ ### Added
123
+
124
+ - Generic synchronous and asynchronous policy runs can supply a
125
+ `read_hold_action` callback to read a fresh current-position target when the
126
+ action buffer underruns. The SDK invokes it only for current-position holds,
127
+ validates the exact finite action shape before hooks or actuation, and keeps
128
+ DreamZero's managed hold path explicit.
129
+
130
+ ## 0.1.0a14 - Unreleased
131
+
132
+ ### Fixed
133
+
134
+ - A delayed first DreamZero action chunk now joins continuously from the action
135
+ the robot actually held while inference was in flight. The scheduler no
136
+ longer mistakes newly inserted actions for an already-committed prefix and
137
+ exempts them from motion smoothing.
138
+ - Browser login retries transient start failures and tolerates up to three consecutive
139
+ transient poll failures instead of abandoning an approval immediately.
140
+ - Browser login errors identify whether start, polling, or response validation failed and
141
+ retain a safe HTTP status and request ID when the service supplied them.
142
+
143
+ ### Changed
144
+
145
+ - Compositions can suppress the generic post-login simulator and SO-101 next steps while
146
+ retaining the same verified credential flow.
147
+
148
+ ## 0.1.0a13 - 2026-08-23
149
+
150
+ ### Fixed
151
+
152
+ - One-shot DreamZero predictions now preserve the model-specific queue metadata
153
+ contract instead of adding four generic scheduler fields that the strict
154
+ DreamZero server correctly rejects.
155
+
156
+ ## 0.1.0a12 - 2026-08-23
157
+
158
+ ### Fixed
159
+
160
+ - DreamZero-YAM H.264 observations now accept the SDK's numeric `30.0` action
161
+ rate metadata. The encoder normalizes the already-validated exact-30-Hz
162
+ value to an integer before constructing its rational time base, instead of
163
+ failing locally before the first observation reaches inference.
164
+
165
+ ## 0.1.0a11 - 2026-08-23
166
+
167
+ ### Changed
168
+
169
+ - DreamZero-YAM preserves all three source acquisition timestamps without
170
+ imposing a cross-camera skew limit. Each frame must still carry a valid
171
+ source timestamp, and downstream onboarding checks still require every
172
+ camera to be individually fresh. DreamZero-DROID retains its existing
173
+ 50 ms skew contract.
174
+
175
+ ## 0.1.0a10 - 2026-08-17
176
+
177
+ ### Fixed
178
+
179
+ - Install on Python 3.14. The `dreamzero` extra pinned `av==15.0.0`, which
180
+ publishes no cp314 wheel, so installing on 3.14 fell back to building PyAV
181
+ from source and failed on any machine without FFmpeg development headers.
182
+ The failure named `av`, not the Python version.
183
+
184
+ The pin becomes a range, `av>=15,<19`, rather than branching on Python
185
+ version. An exact pin is not available: this workspace also builds the
186
+ worker, which pins `av==15.0.0`, and two exact pins on one dependency cannot
187
+ both hold. Users resolve the newest wheel; in-repo the worker's pin wins, so
188
+ our tests keep exercising the deployed pairing. The worker still decodes with 15.0.0, and H.264 decode
189
+ is bit-exact across both builds -- decoding a stream from either encoder
190
+ yields byte-identical YUV. Measured against the source frames, the worker
191
+ reads an 18.1.0-encoded stream at 32.42 dB versus 32.43 dB for its own, so
192
+ what the model sees is unchanged.
193
+
194
+ ## 0.1.0a9 - Unreleased
195
+
196
+ ### Changed
197
+
198
+ - DreamZero YAM now runs at its native 30 Hz control rate end to end. The
199
+ runtime contract and loop profile both declare 30 Hz, so a 24-action chunk
200
+ spans the 0.8 s the model was trained for. Earlier releases declared 15 Hz for
201
+ this model, which stretched each chunk over 1.6 s and executed every action at
202
+ roughly twice its intended duration.
203
+ - `upstream_eval` and the asynchronous modes now drive separate loops.
204
+ `upstream_eval` keeps its strictly synchronous boundary cadence for reference
205
+ comparisons, while `async_8` and `async_latest` run an independently clocked
206
+ capture loop at the model's native rate.
207
+
208
+ ## 0.1.0a8 - 2026-08-16
209
+
210
+ ### Added
211
+
212
+ - Numeric `keep_warm` support on `connect()` and `aconnect()`. Values from 1 to
213
+ 3600 seconds retain the exact loaded AWS worker or Modal function after close
214
+ for a compatible reconnect; `0` remains the non-retaining default. Parked
215
+ reservations are billable, use rotated credentials, and remain distinct from
216
+ the connected-session `idle_timeout`. Immediate reconnects are protected from
217
+ reclaim-index propagation lag, and attached Modal calls have a local bounded
218
+ control-outage exit that drains accepted inference before credential revocation.
219
+
220
+ ### Changed
221
+
222
+ - `upstream_eval` now follows a strictly synchronous reference cadence. The
223
+ SDK captures and submits one observation at each eight-action boundary,
224
+ waits for the chunk sourced from that exact observation, and only then
225
+ executes the next eight aligned actions at 15 Hz. Non-boundary observations
226
+ are not uploaded in this mode.
227
+ - `async_8` and `async_latest` retain independent 15 Hz capture and their
228
+ existing latest-only asynchronous behavior. Server-owned T1/T4 history,
229
+ direct upstream replacement, action alignment, and the wire protocol are
230
+ unchanged.
231
+
232
+ ## 0.1.0a7 - 2026-08-14
233
+
234
+ ### Added
235
+
236
+ - An accepted, work-conserving `async_latest` default for DreamZero-YAM. The
237
+ server remains single-flight and latest-only; DreamZero-DROID stays on
238
+ `async_8` and rejects explicit `async_latest`.
239
+ - YAM `async_latest` reuses the established absolute-action motion smoother at
240
+ the SDK's temporally aligned merge boundary, with fixed 85% new-motion weight
241
+ and five-step absolute-target correction. The two committed actions remain
242
+ protected and no chunk is shifted or rebased.
243
+
244
+ ### Changed
245
+
246
+ - DreamZero-YAM sampling omission now resolves to `async_latest`; explicit
247
+ `async_8` and `upstream_eval` remain compatibility/reference modes.
248
+ - Managed DreamZero runs feed actuator-accepted targets back into later motion
249
+ merges when callbacks return `ActResult(accepted_action=...)`.
250
+ - Merge telemetry reports `motion`, its resolved weight/correction horizon,
251
+ exact source tick and capture-to-execution age, and accurate overlapping
252
+ target revisions. Holds retain no false source provenance.
253
+
254
+ ### Qualification
255
+
256
+ - Retained dev A/B/A evidence proved event-loop-scale redispatch. A fixed
257
+ offline replay through the production merge helper reduced velocity p99/max,
258
+ acceleration p95/p99/max, and jerk p95/p99/max below the worse `async_8`
259
+ control. Velocity p95 increased because smaller corrections span more ticks;
260
+ it remains reported. Recorded replay does not establish physical task success
261
+ or safety.
262
+
263
+ ## 0.1.0a6 - 2026-08-13
264
+
265
+ ### Added
266
+
267
+ - Explicit DreamZero-YAM `async_latest` sampling support for qualification,
268
+ while DreamZero-DROID rejects the mode and retains `async_8`.
269
+ - DreamZero action provenance through `source_control_tick` and the source
270
+ camera capture-to-execution age.
271
+ - A configurable startup deadline: `connect()` and `aconnect()` accept a finite
272
+ positive `startup_timeout` for longer expected cold starts while preserving
273
+ the 900-second default.
274
+ - A structured DreamZero episode lifecycle for externally clocked control via
275
+ `begin_episode()`, `step()`, and `end_episode()`.
276
+
277
+ ### Changed
278
+
279
+ - DreamZero sampling omission is resolved by model so a qualified YAM default
280
+ can be promoted without changing DROID. The 2026-08-14 dev qualification did
281
+ not accept that promotion, so both models continue resolving omission to
282
+ `async_8`; YAM may select `async_latest` explicitly.
283
+ - DreamZero merge telemetry now reports the actual maximum absolute revision
284
+ across overlapping future targets; direct suffix replacement is unchanged.
285
+ - `run()` and `next_action()` now share one DreamZero temporal runtime.
286
+
287
+ ## 0.1.0a4 - 2026-08-12
288
+
289
+ ### Added
290
+
291
+ - Automatic low-latency H.264/WSS camera transport for DreamZero-YAM via the
292
+ optional `dreamzero` extra, with three persistent encoders and strict server
293
+ decoding while DreamZero-DROID remains JPEG/WSS compatible.
294
+ - Client-side `auto`, `output`, and `motion` action smoothing for
295
+ timestep-aligned chunks without changing inference cadence. `auto` selects
296
+ output averaging for delta actions and motion smoothing for absolute joints.
297
+ - Raw chunk and merge hooks for measuring stale prefixes, overlap, and resolved
298
+ action revisions in physical control loops.
299
+ - Optional accepted-action feedback from physical actuation callbacks so future
300
+ absolute-trajectory merges use the target accepted by the robot.
301
+
302
+ ### Changed
303
+
304
+ - SO101 consumer motion traces can omit camera diagnostics and record requested
305
+ versus LeRobot-accepted joint targets without blocking action dispatch on file I/O.
306
+ - Fully stale chunks are discarded instead of shifted into future control steps;
307
+ sync and async runs now expose the requested and resolved smoothing settings.
308
+ - Smoothing fails closed on unsupported action spaces, malformed action
309
+ dimensions, and non-finite inputs or derived motion targets. Unsuccessful
310
+ experimental splice behavior was removed, and trace writer failures are
311
+ bounded and propagated to the caller.
312
+
313
+ ## 0.1.0a3 - 2026-07-28
314
+
315
+ ### Added
316
+
317
+ - Honest run summaries covering completed observations, returned action chunks,
318
+ elapsed time, and measured end-to-end, server, and estimated network latency.
319
+ - Predictable `nearest`, `available`, and explicit-region placement, including
320
+ robust multi-sample regional latency probing and clear effective-state
321
+ reporting.
322
+
323
+ ### Changed
324
+
325
+ - Improved warm-capacity selection so `available` prefers usable warm compute
326
+ while `nearest` preserves genuinely lower-latency placement.
327
+ - Hardened transport fallback with cross-transport observation idempotency and
328
+ exact action replay, preventing duplicate inference when a request changes
329
+ transport.
330
+
331
+ ## 0.1.0a2 - 2026-07-24
332
+
333
+ ### Added
334
+
335
+ - Support for the base SDK and companion transport package on Python 3.11,
336
+ 3.12, 3.13, and 3.14.
337
+ - MolmoAct2-BimanualYAM observation and inference helpers, including the
338
+ corresponding transport wire contract.
339
+ - Franka FR3 model metadata and state/action shape support.
340
+ - Python 3.11-3.14 compatibility checks in pull-request and release CI.
341
+
342
+ ### Changed
343
+
344
+ - Replaced Python 3.12-only type-alias syntax while preserving runtime alias
345
+ introspection.
346
+ - Expanded the NumPy range for Python 3.14 wheels and constrained Typer to the
347
+ versions compatible with the SDK's secure login prompt.
348
+ - Updated `dropbear doctor` and installation guidance for the supported Python
349
+ range.
350
+
351
+ ## 0.1.0a1 - 2026-07-23
352
+
353
+ - Initial pre-alpha PyPI release of the Dropbear SDK and CLI.
354
+ - Shipped the lean base install, QUIC transport integration, policy lifecycle,
355
+ SO-101 support, and optional local simulator dependencies.
@@ -0,0 +1,176 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction, and
10
+ distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by the
13
+ copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all other
16
+ entities that control, are controlled by, or are under common control with
17
+ that entity. For the purposes of this definition, "control" means (i) the
18
+ power, direct or indirect, to cause the direction or management of such
19
+ entity, whether by contract or otherwise, or (ii) ownership of fifty percent
20
+ (50%) or more of the outstanding shares, or (iii) beneficial ownership of
21
+ such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity exercising
24
+ permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation source, and
28
+ configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical transformation
31
+ or translation of a Source form, including but not limited to compiled object
32
+ code, generated documentation, and conversions to other media types.
33
+
34
+ "Work" shall mean the work of authorship, whether in Source or Object form,
35
+ made available under the License, as indicated by a copyright notice that is
36
+ included in or attached to the work (an example is provided in the Appendix
37
+ below).
38
+
39
+ "Derivative Works" shall mean any work, whether in Source or Object form,
40
+ that is based on (or derived from) the Work and for which the editorial
41
+ revisions, annotations, elaborations, or other modifications represent, as a
42
+ whole, an original work of authorship. For the purposes of this License,
43
+ Derivative Works shall not include works that remain separable from, or
44
+ merely link (or bind by name) to the interfaces of, the Work and Derivative
45
+ Works thereof.
46
+
47
+ "Contribution" shall mean any work of authorship, including the original
48
+ version of the Work and any modifications or additions to that Work or
49
+ Derivative Works thereof, that is intentionally submitted to Licensor for
50
+ inclusion in the Work by the copyright owner or by an individual or Legal
51
+ Entity authorized to submit on behalf of the copyright owner. For the
52
+ purposes of this definition, "submitted" means any form of electronic,
53
+ verbal, or written communication sent to the Licensor or its representatives,
54
+ including but not limited to communication on electronic mailing lists,
55
+ source code control systems, and issue tracking systems that are managed by,
56
+ or on behalf of, the Licensor for the purpose of discussing and improving the
57
+ Work, but excluding communication that is conspicuously marked or otherwise
58
+ designated in writing by the copyright owner as "Not a Contribution."
59
+
60
+ "Contributor" shall mean Licensor and any individual or Legal Entity on
61
+ behalf of whom a Contribution has been received by Licensor and subsequently
62
+ incorporated within the Work.
63
+
64
+ 2. Grant of Copyright License. Subject to the terms and conditions of this
65
+ License, each Contributor hereby grants to You a perpetual, worldwide,
66
+ non-exclusive, no-charge, royalty-free, irrevocable copyright license to
67
+ reproduce, prepare Derivative Works of, publicly display, publicly perform,
68
+ sublicense, and distribute the Work and such Derivative Works in Source or
69
+ Object form.
70
+
71
+ 3. Grant of Patent License. Subject to the terms and conditions of this
72
+ License, each Contributor hereby grants to You a perpetual, worldwide,
73
+ non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this
74
+ section) patent license to make, have made, use, offer to sell, sell, import,
75
+ and otherwise transfer the Work, where such license applies only to those
76
+ patent claims licensable by such Contributor that are necessarily infringed
77
+ by their Contribution(s) alone or by combination of their Contribution(s)
78
+ with the Work to which such Contribution(s) was submitted. If You institute
79
+ patent litigation against any entity (including a cross-claim or counterclaim
80
+ in a lawsuit) alleging that the Work or a Contribution incorporated within
81
+ the Work constitutes direct or contributory patent infringement, then any
82
+ patent licenses granted to You under this License for that Work shall
83
+ terminate as of the date such litigation is filed.
84
+
85
+ 4. Redistribution. You may reproduce and distribute copies of the Work or
86
+ Derivative Works thereof in any medium, with or without modifications, and in
87
+ Source or Object form, provided that You meet the following conditions:
88
+
89
+ (a) You must give any other recipients of the Work or Derivative Works a copy
90
+ of this License; and
91
+
92
+ (b) You must cause any modified files to carry prominent notices stating that
93
+ You changed the files; and
94
+
95
+ (c) You must retain, in the Source form of any Derivative Works that You
96
+ distribute, all copyright, patent, trademark, and attribution notices from the
97
+ Source form of the Work, excluding those notices that do not pertain to any
98
+ part of the Derivative Works; and
99
+
100
+ (d) If the Work includes a "NOTICE" text file as part of its distribution,
101
+ then any Derivative Works that You distribute must include a readable copy of
102
+ the attribution notices contained within such NOTICE file, excluding those
103
+ notices that do not pertain to any part of the Derivative Works, in at least
104
+ one of the following places: within a NOTICE text file distributed as part of
105
+ the Derivative Works; within the Source form or documentation, if provided
106
+ along with the Derivative Works; or, within a display generated by the
107
+ Derivative Works, if and wherever such third-party notices normally appear.
108
+ The contents of the NOTICE file are for informational purposes only and do
109
+ not modify the License. You may add Your own attribution notices within
110
+ Derivative Works that You distribute, alongside or as an addendum to the
111
+ NOTICE text from the Work, provided that such additional attribution notices
112
+ cannot be construed as modifying the License.
113
+
114
+ You may add Your own copyright statement to Your modifications and may
115
+ provide additional or different license terms and conditions for use,
116
+ reproduction, or distribution of Your modifications, or for any such
117
+ Derivative Works as a whole, provided Your use, reproduction, and distribution
118
+ of the Work otherwise complies with the conditions stated in this License.
119
+
120
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any
121
+ Contribution intentionally submitted for inclusion in the Work by You to the
122
+ Licensor shall be under the terms and conditions of this License, without any
123
+ additional terms or conditions. Notwithstanding the above, nothing herein
124
+ shall supersede or modify the terms of any separate license agreement you may
125
+ have executed with Licensor regarding such Contributions.
126
+
127
+ 6. Trademarks. This License does not grant permission to use the trade names,
128
+ trademarks, service marks, or product names of the Licensor, except as
129
+ required for reasonable and customary use in describing the origin of the
130
+ Work and reproducing the content of the NOTICE file.
131
+
132
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in
133
+ writing, Licensor provides the Work (and each Contributor provides its
134
+ Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
135
+ KIND, either express or implied, including, without limitation, any warranties
136
+ or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
137
+ PARTICULAR PURPOSE. You are solely responsible for determining the
138
+ appropriateness of using or redistributing the Work and assume any risks
139
+ associated with Your exercise of permissions under this License.
140
+
141
+ 8. Limitation of Liability. In no event and under no legal theory, whether in
142
+ tort (including negligence), contract, or otherwise, unless required by
143
+ applicable law (such as deliberate and grossly negligent acts) or agreed to in
144
+ writing, shall any Contributor be liable to You for damages, including any
145
+ direct, indirect, special, incidental, or consequential damages of any
146
+ character arising as a result of this License or out of the use or inability
147
+ to use the Work (including but not limited to damages for loss of goodwill,
148
+ work stoppage, computer failure or malfunction, or any and all other
149
+ commercial damages or losses), even if such Contributor has been advised of
150
+ the possibility of such damages.
151
+
152
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work
153
+ or Derivative Works thereof, You may choose to offer, and charge a fee for,
154
+ acceptance of support, warranty, indemnity, or other liability obligations
155
+ and/or rights consistent with this License. However, in accepting such
156
+ obligations, You may act only on Your own behalf and on Your sole
157
+ responsibility, not on behalf of any other Contributor, and only if You agree
158
+ to indemnify, defend, and hold each Contributor harmless for any liability
159
+ incurred by, or claims asserted against, such Contributor by reason of your
160
+ accepting any such warranty or additional liability.
161
+
162
+ END OF TERMS AND CONDITIONS
163
+
164
+ Copyright 2026 Dreamscale Labs
165
+
166
+ Licensed under the Apache License, Version 2.0 (the "License");
167
+ you may not use this file except in compliance with the License.
168
+ You may obtain a copy of the License at
169
+
170
+ http://www.apache.org/licenses/LICENSE-2.0
171
+
172
+ Unless required by applicable law or agreed to in writing, software
173
+ distributed under the License is distributed on an "AS IS" BASIS,
174
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
175
+ See the License for the specific language governing permissions and
176
+ limitations under the License.