@mhome/core-protocol 1.17.0 → 1.19.0

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/README.md CHANGED
@@ -27,6 +27,41 @@ Storage separates backing-filesystem capacity from Storage-owned logical
27
27
  usage. Namespace is an internal protocol term; user-facing clients present it
28
28
  as a Folder.
29
29
 
30
+ ## Lossless external boundaries (core-api 1.19.0)
31
+
32
+ External protocol **17** returns `HttpPayloadResponse { statusCode, body }` from
33
+ all HTTP handler RPCs. A completed HTTP response (including 4xx/5xx) is an RPC
34
+ success; RPC errors describe failures to execute the call, not HTTP status.
35
+ Hosts preserve status and JSON body, never infer them from error messages.
36
+ `ExternalCoreError` preserves domain `code`, `message` and optional `details`,
37
+ with conversions to/from the shared client `ErrorResponse`.
38
+
39
+ The transport-neutral `webhook` module defines the common route, body limit and
40
+ JSON-versus-UTF-8-text decoding. Hosts own network listeners and method admission;
41
+ Core owns dispatch and execution. Upgrade service shell and Core together.
42
+
43
+ ## Host LAN observations (introduced in core-api 1.18.0)
44
+
45
+ The Host owns `host::network::HostNetworkSnapshot`, exposed through local IPC
46
+ `GET /internal/network`. It samples eligible private IPv4 interfaces at startup
47
+ and every 15 seconds, preferring `192.168/16`, then `10/8`, then `172.16/12`.
48
+ Within the best priority it retains a still-valid address, otherwise picks the
49
+ numerically smallest address. This is a deterministic common LAN policy, not
50
+ Ethernet/Wi-Fi classification or proof of reachability to every destination.
51
+
52
+ The response is `{ "lanIpv4": "192.168.1.2", "observedAtMs": 123456789 }`;
53
+ `lanIpv4: null` means unavailable. Consumers reject observations older than
54
+ 45 seconds, future observations, and non-private IPv4. No loopback fallback.
55
+ The query does not enumerate interfaces. Existing multicast discovery still
56
+ uses its own complete interface inventory, not this single preferred address.
57
+
58
+ External protocol 16 changes `UpdateCallbackBaseRequest` to `{ network, port }`.
59
+ The service supplies the actual bound HTTP port and the unchanged Host
60
+ observation. Core derives the origin instead of trusting an independent URL.
61
+ Before the service reports, the sidecar has no callback origin. Freshness-only
62
+ updates do not trigger subscription reconciliation. Shell and runtime must be
63
+ upgraded together; local IPC is distinct from advertised callback URLs.
64
+
30
65
  ## Playground Provider (core-api 1.10.0)
31
66
 
32
67
  External protocol 15 removes the dedicated Playground webhook method and payload.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "manifest": "mhome.core.v1",
3
- "contractVersion": "1.17.0",
3
+ "contractVersion": "1.19.0",
4
4
  "protocols": {
5
5
  "agentGateway": {
6
6
  "submitTarget": "/agent/submit",
@@ -63,7 +63,7 @@
63
63
  "version": "storage.v2"
64
64
  },
65
65
  "hostDelivery": {
66
- "externalProtocolVersion": 15,
66
+ "externalProtocolVersion": 17,
67
67
  "requestKind": "deliveryRequested",
68
68
  "connectionControlKind": "connectionControlRequested",
69
69
  "acceptanceBoundaries": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mhome/core-protocol",
3
- "version": "1.17.0",
3
+ "version": "1.19.0",
4
4
  "description": "Build-time protocol artifacts for mhome.core",
5
5
  "license": "MIT",
6
6
  "repository": {
package/protocol.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "protocol": "mhome.core",
3
- "contractVersion": "1.17.0",
3
+ "contractVersion": "1.19.0",
4
4
  "manifest": "manifest/core.v1.json",
5
5
  "schemas": {
6
6
  "hostManagementRequest": "schema/host-management-request.v1.schema.json",