homebridge-roborock-matter 3.4.5 → 3.4.7

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 CHANGED
@@ -1,5 +1,24 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.4.7
4
+
5
+ **The diagnostic report told Q7 owners their robot had tried to reach the LAN and failed. It never tried.** Following [#7](https://github.com/mathiashornbek/homebridge-roborock-matter/issues/7), jawnlydon unpaired his robot from Apple Home, uninstalled the plugin, reinstalled it and paired fresh — and his report still read `markedRemote: true`, `remoteReason: marked-remote-after-connect-failure`, `connectionStatus: Cloud fallback`, "usually because LAN TCP was not connected at that moment". His `roborock.vacuum.sc05` speaks the B01 protocol, which has no LAN request surface at all: the plugin marks these robots cloud-only at startup precisely so it never opens a local socket to them. Every line above described a network fault that could not occur, and he spent an evening chasing it.
6
+
7
+ - **A robot marked remote now records why it was marked.** Membership of the remote set could tell the report _that_ a robot was on cloud transport but not _why_, and the report assumed the most common cause — a failed local TCP connect — for every member. The two causes have nothing in common: one is a protocol with no local side, the other is a genuine LAN failure worth investigating. Both reasons now travel with the mark, from the one place that sets it.
8
+ - **A future marking that forgets its reason degrades to "the vacuum is marked remote".** Uninformative, and deliberately so. Guessing the usual cause is what turned a design decision into a phantom network fault in the first place.
9
+ - **The device card no longer calls the only transport a fallback.** A B01/Q7 robot now reads `Cloud control (this model)` with a hint saying its protocol has no LAN control surface and that a blank local IP, discovery state and TCP state are expected. The LAN connection test stops telling its owner to wait for a discovery that is never coming, and the robot is no longer flagged as a likely cloud fallback. A robot on a LAN-capable model that really is falling back is still reported exactly as before.
10
+ - **The wording moved into plain JavaScript** (`roborockLib/lib/connectionState.js`), because the test job runs before any build and could therefore only grep the TypeScript UI server for these strings. They are not decoration — they are what an owner acts on when a robot will not respond — so they are now exercised directly.
11
+ - **The rule is enumerated over the source tree**, not over the two call sites that exist today: no code path may mark a robot remote without stating its reason. A hand-written list of call sites is the same mistake as a hand-written list of files or log lines.
12
+
13
+ ## 3.4.6
14
+
15
+ **Trying cloud-only mode once marked a robot "Cloud only" forever.** jawnlydon reported in [#7](https://github.com/mathiashornbek/homebridge-roborock-matter/issues/7) that a "Cloud Only" instance of his robot "seems to have stuck around through several re-pairs" — surviving a bridge restart, repeated Apple Home re-pairings, and a complete uninstall and reinstall of the plugin. It was not a leftover accessory. It was one stale field.
16
+
17
+ - **The markers cloud-only mode writes are now retracted when it is switched off.** Enabling the mode stamps a robot's transport diagnostics to say local transport is disabled, and those diagnostics are persisted. `tcpConnectionState` is only ever rewritten when a LAN connection is actually attempted — and none is attempted for a robot no local IP was discovered for — so for such a robot the marker stayed on disk permanently, outliving the setting that wrote it. Startup now reconciles the markers in both directions, clearing only the fields that still hold the marker value so a live LAN connection is never stomped.
18
+ - **The report stopped contradicting itself.** Reading that stale marker back, the device card said `connectionStatus: Cloud only` with the hint "Cloud-only mode is enabled, so local LAN discovery and local TCP control are disabled" — two lines under the same report's `cloudOnlyMode: disabled`. The report was pointing at a setting that was off, and it cost its reader an evening.
19
+ - **Setting and clearing derive from one table**, so a marker added later is retracted later. A hand-written list of fields to put back is the same mistake as a hand-written list of files or log lines, one level down — the lesson 3.4.3 and 3.4.5 each learned in their own layer.
20
+ - **`cloudOnlyMode` in the diagnostic report now quotes the saved config, not the checkbox.** The `matterFeatures` line was fixed for exactly this reason and the fix stopped at that line, leaving the line directly above it still reading its form control — so a report could state a setting the running plugin did not have. A test now enumerates the rule over the source: nothing the report builder reaches may read the settings form, except the helpers whose whole job is to warn that the form and the saved config disagree. Unsaved edits to cloud-only mode now raise that warning too.
21
+
3
22
  ## 3.4.5
4
23
 
5
24
  **The one log line that exists to diagnose Apple Home display problems was hiding the transitions.** `Matter publish for <robot>: battery=…, operationalState=…, runMode=…, cleanMode=…` was added so an Apple Home display issue could be settled from a single log excerpt — and it was only ever emitted when the **battery** value changed. skmzwanke reported in [#8](https://github.com/mathiashornbek/homebridge-roborock-matter/issues/8) that his Apple Home tile sat on "Traveling to Room"/"Preparing" for an entire cleaning run, and sent a log covering that whole run: every operational-state transition in it was invisible, because the line only appeared on the four polls where the battery happened to tick down. The log contained the answer and could not show it.
package/dist/ui/index.js CHANGED
@@ -11,6 +11,10 @@ const net_1 = __importDefault(require("net"));
11
11
  const qrcode_1 = __importDefault(require("qrcode"));
12
12
  const crypto_2 = require("../crypto");
13
13
  const roborockAuth = require("../../roborockLib/lib/roborockAuth");
14
+ // What the report says about a robot's transport lives in plain JavaScript, so
15
+ // the test suite — which runs before any build — can exercise the wording
16
+ // directly instead of grepping this file for it.
17
+ const { describeConnectionState, describeLocalProbeSkip, isCloudFallbackLikely, isCloudOnlyProtocol, } = require("../../roborockLib/lib/connectionState");
14
18
  const ACTIVE_LOCAL_TRANSPORT_MAX_AGE_MS = 5 * 60 * 1000;
15
19
  const LOCAL_CONTROL_PORT = 58867;
16
20
  class RoborockUiServer {
@@ -477,8 +481,7 @@ class RoborockUiServer {
477
481
  async testLocalConnection(device, cloudOnlyMode) {
478
482
  const localIp = device.localIp;
479
483
  const port = LOCAL_CONTROL_PORT;
480
- const cloudFallbackLikely = device.lastTransport === "cloud" ||
481
- device.connectionStatus === "Cloud fallback";
484
+ const cloudFallbackLikely = isCloudFallbackLikely(device);
482
485
  const baseResult = {
483
486
  name: device.name || device.duid || "Unknown device",
484
487
  duid: device.duid || "",
@@ -494,23 +497,20 @@ class RoborockUiServer {
494
497
  connectionSource: "tcp-probe",
495
498
  latencyMs: null,
496
499
  };
497
- const skip = (message) => ({
498
- ...baseResult,
499
- status: "skipped",
500
- health: "warn",
501
- message,
500
+ const probeSkip = describeLocalProbeSkip({
501
+ cloudOnlyProtocol: isCloudOnlyProtocol(device),
502
+ cloudOnlyMode,
503
+ hasLocalKey: Boolean(device.hasLocalKey),
504
+ online: device.online,
505
+ localIp,
502
506
  });
503
- if (cloudOnlyMode) {
504
- return skip("Use Roborock cloud only is enabled, so local LAN probing is skipped until cloud-only mode is disabled and Homebridge is restarted.");
505
- }
506
- if (!device.hasLocalKey) {
507
- return skip("No local credential is cached for this vacuum, so a LAN control test cannot run yet.");
508
- }
509
- if (device.online === false) {
510
- return skip("Roborock currently reports this vacuum offline. Wake the vacuum or place it on the dock, then test again.");
511
- }
512
- if (!localIp) {
513
- return skip("No local IP address is cached yet. Let the plugin complete startup or press Refresh after the vacuum wakes up.");
507
+ if (probeSkip) {
508
+ return {
509
+ ...baseResult,
510
+ status: "skipped",
511
+ health: probeSkip.health,
512
+ message: probeSkip.message,
513
+ };
514
514
  }
515
515
  const activeLocalConnection = this.describeActiveLocalConnection(device);
516
516
  if (activeLocalConnection) {
@@ -668,62 +668,7 @@ class RoborockUiServer {
668
668
  return null;
669
669
  }
670
670
  describeConnectionState(device, transport, hasLocalCredentials) {
671
- const tcpState = transport.tcpConnectionState;
672
- const lastTransportReason = transport.lastTransportReason || transport.remoteReason || null;
673
- const hasLocalIp = Boolean(transport.localIp);
674
- if (lastTransportReason === "cloud-only-mode" ||
675
- transport.localDiscoveryState === "disabled" ||
676
- tcpState === "disabled") {
677
- return {
678
- status: "Cloud only",
679
- health: "good",
680
- hint: "Cloud-only mode is enabled, so local LAN discovery and local TCP control are disabled for this plugin.",
681
- };
682
- }
683
- if (tcpState === "connected") {
684
- return {
685
- status: "Local connected",
686
- health: "good",
687
- hint: "The plugin has an active LAN TCP connection to this vacuum.",
688
- };
689
- }
690
- if (device.online === false || lastTransportReason === "device-offline") {
691
- return {
692
- status: "Device offline",
693
- health: "warn",
694
- hint: hasLocalCredentials
695
- ? "Roborock currently reports this vacuum offline. Local credentials are available, but the plugin cannot use them until the vacuum wakes up and rejoins Wi-Fi."
696
- : "Roborock currently reports this vacuum offline, and no local credentials were found for LAN control.",
697
- };
698
- }
699
- if (transport.lastTransport === "cloud") {
700
- return {
701
- status: "Cloud fallback",
702
- health: "warn",
703
- hint: hasLocalCredentials
704
- ? "The plugin has local credentials but the last command used Roborock cloud transport, usually because LAN TCP was not connected at that moment."
705
- : "The last command used Roborock cloud transport because local LAN credentials are not available.",
706
- };
707
- }
708
- if (hasLocalCredentials && hasLocalIp) {
709
- return {
710
- status: "Ready for local connection",
711
- health: "warn",
712
- hint: "The plugin has local credentials and a discovered IP address, but no active LAN TCP connection is currently cached.",
713
- };
714
- }
715
- if (hasLocalCredentials) {
716
- return {
717
- status: "Local credentials available",
718
- health: "warn",
719
- hint: "The plugin has the credential needed for LAN control, but it has not discovered or connected to the vacuum locally yet.",
720
- };
721
- }
722
- return {
723
- status: "Cloud-only fallback likely",
724
- health: "warn",
725
- hint: "No local LAN credential was found for this vacuum, so the plugin will likely rely on Roborock cloud transport.",
726
- };
671
+ return describeConnectionState(device, transport, hasLocalCredentials);
727
672
  }
728
673
  getPackageVersion() {
729
674
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,gDAAwB;AACxB,4CAAoB;AACpB,8CAAsB;AACtB,oDAA4B;AAC5B,sCAA2C;AAE3C,MAAM,YAAY,GAAG,OAAO,CAAC,oCAAoC,CAAC,CAAC;AACnE,+EAA+E;AAC/E,0EAA0E;AAC1E,iDAAiD;AACjD,MAAM,EACJ,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,GACpB,GAAG,OAAO,CAAC,uCAAuC,CAAC,CAAC;AAErD,MAAM,iCAAiC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACxD,MAAM,kBAAkB,GAAG,KAAK,CAAC;AA8BjC,MAAM,gBAAgB;IAIpB,YAAY,wBAA6D;QACvE,IAAI,CAAC,wBAAwB,GAAG,IAAI,wBAAwB,EAAE,CAAC;QAC/D,IAAI,CAAC,qBAAqB;YACxB,IAAI,CAAC,wBAAwB,CAAC,qBAAqB,CAAC;QAEtD,IAAI,CAAC,wBAAwB,CAAC,SAAS,CACrC,sBAAsB,EACtB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CACnC,CAAC;QACF,IAAI,CAAC,wBAAwB,CAAC,SAAS,CACrC,uBAAuB,EACvB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CACpC,CAAC;QACF,IAAI,CAAC,wBAAwB,CAAC,SAAS,CACrC,aAAa,EACb,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAClC,CAAC;QACF,IAAI,CAAC,wBAAwB,CAAC,SAAS,CACrC,cAAc,EACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CACvB,CAAC;QACF,IAAI,CAAC,wBAAwB,CAAC,SAAS,CACrC,oBAAoB,EACpB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/B,CAAC;QACF,IAAI,CAAC,wBAAwB,CAAC,SAAS,CACrC,yBAAyB,EACzB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CACrC,CAAC;QACF,IAAI,CAAC,wBAAwB,CAAC,SAAS,CACrC,iBAAiB,EACjB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CACjC,CAAC;QAEF,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC;IACxC,CAAC;IAEO,cAAc;QACpB,OAAO,IAAI,CAAC,qBAAqB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACrD,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;YACjE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;gBACjE,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;oBACzB,OAAO,MAAM,CAAC,GAAG,CAAC;gBACpB,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,uCAAuC;YACzC,CAAC;YACD,MAAM,QAAQ,GAAG,gBAAM,CAAC,UAAU,EAAE,CAAC;YACrC,YAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/C,YAAE,CAAC,aAAa,CACd,YAAY,EACZ,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EACrD,MAAM,CACP,CAAC;YACF,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,OAAO,gBAAM,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,MAA2B;QACrD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1C,OAAO,YAAY,CAAC,cAAc,CAAC;YACjC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,oBAAoB;YAC/C,QAAQ,EAAE,MAAM,CAAC,KAAK;YACtB,QAAQ;YACR,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,OAGhC;QACC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;QACtD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC;gBACxC,KAAK;gBACL,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC;YACH,MAAM,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACrD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,KAAI,KAAK,CAAC,CAAC;YACpE,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,KAAI,oCAAoC;aAChE,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,OAIjC;QACC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;QACtD,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC;QAClE,CAAC;QAED,OAAO,IAAI,CAAC,kBAAkB,CAAC;YAC7B,KAAK;YACL,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,qBAAqB,EAAE,kCAAkC;YACzD,4BAA4B,EAAE,sBAAsB;YACpD,cAAc,EAAE,kCAAkC;YAClD,eAAe,EAAE,0BAA0B;YAC3C,sBAAsB,EAAE,sBAAsB;YAC9C,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBACzC,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CACzC,OAAO,CAAC,OAAO,IAAI,oBAAoB,CACxC,CAAC;gBACF,OAAO,YAAY,CAAC,aAAa,CAAC,QAAQ,EAAE;oBAC1C,KAAK;oBACL,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,CAAC;oBACD,CAAC,EAAE,KAAK;iBACT,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,OAI/B;QACC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAElC,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,kCAAkC,EAAE,CAAC;QACpE,CAAC;QAED,OAAO,IAAI,CAAC,kBAAkB,CAAC;YAC7B,KAAK;YACL,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,qBAAqB,EAAE,uBAAuB;YAC9C,4BAA4B,EAAE,eAAe;YAC7C,cAAc,EAAE,gCAAgC;YAChD,eAAe,EAAE,eAAe;YAChC,sBAAsB,EAAE,uCAAuC;YAC/D,sBAAsB,EAAE,IAAI;YAC5B,YAAY,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CACnC,YAAY,CAAC,eAAe,CAAC,QAAQ,EAAE;gBACrC,KAAK;gBACL,QAAQ;gBACR,CAAC;gBACD,CAAC,EAAE,KAAK;aACT,CAAC;SACL,CAAC,CAAC;IACL,CAAC;IAED,0EAA0E;IAC1E,0EAA0E;IAC1E,wEAAwE;IACxE,2DAA2D;IACnD,KAAK,CAAC,kBAAkB,CAAC,OAUhC;QACC,MAAM,EACJ,KAAK,EACL,OAAO,EACP,qBAAqB,EACrB,4BAA4B,EAC5B,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,YAAY,GACb,GAAG,OAAO,CAAC;QAEZ,IAAI,WAAW,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACjE,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;gBAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC;YACrE,CAAC;YAED,WAAW,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,KAAI,KAAK,CAAC,CAAC;YAC9D,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,KAAI,4BAA4B;aACxD,CAAC;QACJ,CAAC;QAED,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;YAChE,MAAM,SAAS,GAAG,IAAA,uBAAc,EAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YAC1E,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE,cAAc;gBACvB,cAAc,EAAE,SAAS;aAC1B,CAAC;QACJ,CAAC;QAED,IAAI,sBAAsB,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACvE,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,iBAAiB,EAAE,IAAI;gBACvB,OAAO,EAAE,qCAAqC;aAC/C,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QAC5C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,GAAG,KAAI,sBAAsB,EAAE,CAAC;IAC5E,CAAC;IAEO,KAAK,CAAC,MAAM;QAClB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC;QAC7D,CAAC;QAED,wEAAwE;QACxE,2EAA2E;QAC3E,2EAA2E;QAC3E,uDAAuD;QACvD,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,EAAE,CAAC;YAC9D,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC5C,IAAI,CAAC;gBACH,IAAI,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1B,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,8BAA8B;YAChC,CAAC;QACH,CAAC;QAED,OAAO;YACL,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,OAAO,CAAC,MAAM;gBACrB,CAAC,CAAC,qDAAqD;gBACvD,CAAC,CAAC,4BAA4B;SACjC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CACrC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAC5C,CAAC;YACF,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CACrC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAC5C,CAAC;YACF,MAAM,yBAAyB,GAAG,IAAI,CAAC,YAAY,CACjD,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,+BAA+B,CAAC,CACxD,CAAC;YACF,MAAM,wBAAwB,GAAG,IAAI,CAAC,YAAY,CAChD,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,8BAA8B,CAAC,CACvD,CAAC;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,GAAG,CAAC,CAAC;YAC5D,MAAM,oBAAoB,GACxB,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,aAAzB,yBAAyB,uBAAzB,yBAAyB,CAAE,GAAG,CAAC,IAAI,EAAE,CAAC;YAC/D,MAAM,mBAAmB,GACvB,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,aAAxB,wBAAwB,uBAAxB,wBAAwB,CAAE,GAAG,CAAC,IAAI,EAAE,CAAC;YAE9D,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,CAAC;gBAChD,CAAC,CAAC,QAAQ,CAAC,QAAQ;gBACnB,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAA2B,EAAE,EAAE;;gBAC9D,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAC3B,CAAC,KAA0B,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAC7D,CAAC;gBACF,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC;oBAC3C,MAAM,CAAC,KAAK;oBACZ,MAAM,CAAC,YAAY;oBACnB,MAAM,CAAC,WAAW;oBAClB,MAAM,CAAC,OAAO;iBACf,CAAC,CAAC;gBACH,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC;oBAC5C,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK;oBACd,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY;oBACrB,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW;oBACpB,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO;iBACjB,CAAC,CAAC;gBACH,MAAM,aAAa,GAAG,WAAW,IAAI,YAAY,IAAI,SAAS,CAAC;gBAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC7D,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC1D,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClE,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAC7C,MAAM,EACN,SAAS,EACT,OAAO,CAAC,QAAQ,CAAC,CAClB,CAAC;gBAEF,OAAO;oBACL,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,gBAAgB;oBACpD,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;oBACvB,YAAY,EAAE,MAAM,CAAC,EAAE,IAAI,IAAI;oBAC/B,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI;oBACnC,aAAa;oBACb,WAAW,EAAE,WAAW,IAAI,IAAI;oBAChC,YAAY,EAAE,YAAY,IAAI,IAAI;oBAClC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC;oBAC9B,gBAAgB,EAAE,UAAU,CAAC,MAAM;oBACnC,gBAAgB,EAAE,UAAU,CAAC,MAAM;oBACnC,cAAc,EAAE,UAAU,CAAC,IAAI;oBAC/B,sBAAsB,EAAE,UAAU,CAAC,MAAM;oBACzC,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,IAAI;oBAClC,mBAAmB,EAAE,SAAS,CAAC,mBAAmB,IAAI,IAAI;oBAC1D,kBAAkB,EAAE,SAAS,CAAC,kBAAkB,IAAI,IAAI;oBACxD,QAAQ,EAAE,MAAA,SAAS,CAAC,QAAQ,mCAAI,IAAI;oBACpC,YAAY,EAAE,SAAS,CAAC,YAAY,IAAI,IAAI;oBAC5C,aAAa,EAAE,SAAS,CAAC,aAAa,IAAI,IAAI;oBAC9C,mBAAmB,EAAE,SAAS,CAAC,mBAAmB,IAAI,IAAI;oBAC1D,iBAAiB,EAAE,SAAS,CAAC,iBAAiB,IAAI,IAAI;oBACtD,kBAAkB,EAAE,SAAS,CAAC,SAAS,IAAI,IAAI;oBAC/C,2BAA2B,EAAE,kBAAkB,CAAC,SAAS,IAAI,IAAI;oBACjE,oBAAoB,EAAE,kBAAkB,CAAC,UAAU,IAAI,IAAI;oBAC3D,yBAAyB,EAAE,kBAAkB,CAAC,eAAe,IAAI,IAAI;oBACrE,mBAAmB,EAAE,kBAAkB,CAAC,SAAS,IAAI,IAAI;oBACzD,0BAA0B,EACxB,kBAAkB,CAAC,gBAAgB,IAAI,IAAI;oBAC7C,0BAA0B,EACxB,kBAAkB,CAAC,gBAAgB,IAAI,IAAI;oBAC7C,cAAc,EACZ,KAAK,CAAC,OAAO,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,eAAe,CAAC;wBACxC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAC3B,CAAC,KAA0B,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAC3D;wBACC,CAAC,CAAC,iBAAiB;wBACnB,CAAC,CAAC,SAAS;oBACf,MAAM,EAAE,MAAA,MAAM,CAAC,MAAM,mCAAI,IAAI;iBAC9B,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACrC,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE;gBACvC,WAAW,EAAE,OAAO,CAAC,OAAO;gBAC5B,WAAW;gBACX,iBAAiB,EAAE,OAAO,CAAC,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,GAAG,CAAC;gBAC9C,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC;gBAC9B,WAAW,EAAE,WAAW,CAAC,MAAM;gBAC/B,OAAO,EAAE,WAAW;aACrB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,KAAI,6BAA6B;aACzD,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,OAGlC;QACC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAEhD,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;YACpB,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;YAChD,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAA2B,EAAE,EAAE;gBACzD,OAAO,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAA,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC;YACxD,CAAC,CAAC;YACJ,CAAC,CAAC,EAAE,CAAC;QAEP,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,KAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1C,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,kDAAkD;aAC5D,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,OAAO,CAAC,GAAG,CAAC,CAAC,MAA2B,EAAE,EAAE,CAC1C,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC,CAAC,CAClE,CACF,CAAC;QAEF,OAAO;YACL,EAAE,EAAE,IAAI;YACR,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAClC,WAAW,EAAE,OAAO,CAAC,MAAM;YAC3B,OAAO,EAAE,OAAO;SACjB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CACrC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAC5C,CAAC;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,GAAG,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC9C,qEAAqE;YACrE,uEAAuE;YACvE,mEAAmE;YACnE,wBAAwB;YACxB,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAA+B,CAAC;YAClE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBACnD,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC9C,CAAC;gBACD,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;oBAC/C,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,4BAA4B,CAAC,WAAW,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;gBAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAClD,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,OAAO,IAAI,CAAC,uBAAuB,CACjC,aAAa,EACb,QAAQ,EACR,kBAAkB,CACnB,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;YACF,MAAM,cAAc,GAAG,OAAO;iBAC3B,MAAM,CAAC,CAAC,KAAK,EAA+B,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;iBAC9D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;;gBACb,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBACpD,OAAO,CACL,CAAC,MAAA,MAAM,CAAC,CAAC,CAAC,IAA2B,CAAC,mCAAI,CAAC,CAAC;oBAC1C,CAAC,MAAA,MAAM,CAAC,CAAC,CAAC,IAA2B,CAAC,mCAAI,CAAC,CAAC;oBAC9C,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAC7C,CAAC;YACJ,CAAC,CAAC,CAAC;YAEL,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACrC,WAAW;gBACX,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;gBAC9D,WAAW;gBACX,kBAAkB,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAClD,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAC1B;gBACD,OAAO,EAAE,cAAc;aACxB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,KAAI,sCAAsC;aAClE,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,WAAmB;QAC9C,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,GAAG,CAAC;YACN,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;YAChC,4BAA4B;YAC5B,oBAAoB;SACrB,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,4BAA4B,CAAC,WAAqB;QACxD,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,KAAK,MAAM,KAAK,IAAI,YAAE,CAAC,WAAW,CAAC,UAAU,EAAE;oBAC7C,aAAa,EAAE,IAAI;iBACpB,CAAC,EAAE,CAAC;oBACH,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;wBACrD,SAAS;oBACX,CAAC;oBAED,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CACxB,UAAU,EACV,KAAK,CAAC,IAAI,EACV,oBAAoB,CACrB,CAAC;oBACF,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC7B,SAAS;oBACX,CAAC;oBAED,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;oBACvC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBAClB,SAAS;oBACX,CAAC;oBAED,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACd,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YAAC,WAAM,CAAC;gBACP,qEAAqE;YACvE,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,WAAW,CAAC,QAAgB;QAClC,IAAI,CAAC;YACH,OAAO,YAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;QAAC,WAAM,CAAC;YACP,OAAO,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,uBAAuB,CACnC,aAAkC,EAClC,QAAgB,EAChB,kBAAoD;QAEpD,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;QAC5E,MAAM,aAAa,GAAG,YAAY;YAChC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC;YACtC,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QACjD,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC;YACjD,aAAa,CAAC,iBAAiB;SAChC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,iBAAiB;YACjC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YACtC,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,aAAa,GAAG,MAAM;YAC1B,CAAC,CAAC,MAAM,gBAAM,CAAC,SAAS,CAAC,MAAM,EAAE;gBAC7B,oBAAoB,EAAE,GAAG;gBACzB,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,GAAG;aACX,CAAC;YACJ,CAAC,CAAC,IAAI,CAAC;QAET,OAAO;YACL,EAAE,EAAE,cAAI,CAAC,QAAQ,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI;YACJ,IAAI,EACF,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI;gBACnB,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,kBAAkB,CAAC;YACrE,YAAY,EAAE,YAAY,IAAI,IAAI;YAClC,WAAW,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,KAAI,IAAI;YACxC,aAAa,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,EAAE,KAAI,IAAI;YACxC,MAAM;YACN,aAAa;YACb,iBAAiB;YACjB,SAAS;YACT,QAAQ,EACN,aAAa,CAAC,QAAQ,KAAK,SAAS,IAAI,aAAa,CAAC,QAAQ,KAAK,IAAI;gBACrE,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC;YACpC,aAAa,EACX,aAAa,CAAC,aAAa,KAAK,SAAS;gBACzC,aAAa,CAAC,aAAa,KAAK,IAAI;gBAClC,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC;YACzC,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC;YACjD,WAAW,EACT,OAAO,aAAa,CAAC,WAAW,KAAK,QAAQ;gBAC3C,CAAC,CAAC,aAAa,CAAC,WAAW;gBAC3B,CAAC,CAAC,IAAI;YACV,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;YAC1C,IAAI,EACF,IAAI,KAAK,QAAQ;gBACf,CAAC,CAAC,uFAAuF;gBACzF,CAAC,CAAC,iHAAiH;SACxH,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,QAAgB;QACvC,IAAI,CAAC;YACH,OAAO,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACnD,CAAC;QAAC,WAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,MAA2B,EAC3B,aAAsB;QAEtB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,MAAM,IAAI,GAAG,kBAAkB,CAAC;QAChC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,gBAAgB;YACpD,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;YACvB,OAAO,EAAE,OAAO,IAAI,IAAI;YACxB,IAAI;YACJ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,mBAAmB;YACnB,sBAAsB,EAAE,MAAM,CAAC,gBAAgB,IAAI,SAAS;YAC5D,cAAc,EAAE,MAAM,CAAC,kBAAkB,IAAI,KAAK;YAClD,mBAAmB,EAAE,MAAM,CAAC,aAAa,IAAI,KAAK;YAClD,gBAAgB,EAAE,MAAM,CAAC,mBAAmB,IAAI,KAAK;YACrD,wBAAwB,EAAE,MAAM,CAAC,kBAAkB,IAAI,IAAI;YAC3D,gBAAgB,EAAE,WAAW;YAC7B,SAAS,EAAE,IAAqB;SACjC,CAAC;QAEF,MAAM,SAAS,GAAG,sBAAsB,CAAC;YACvC,iBAAiB,EAAE,mBAAmB,CAAC,MAAM,CAAC;YAC9C,aAAa;YACb,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;YACxC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO;SACR,CAAC,CAAC;QAEH,IAAI,SAAS,EAAE,CAAC;YACd,OAAO;gBACL,GAAG,UAAU;gBACb,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,OAAO,EAAE,SAAS,CAAC,OAAO;aAC3B,CAAC;QACJ,CAAC;QAED,MAAM,qBAAqB,GAAG,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;QACzE,IAAI,qBAAqB,EAAE,CAAC;YAC1B,OAAO;gBACL,GAAG,UAAU;gBACb,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,MAAM;gBACd,gBAAgB,EAAE,qBAAqB,CAAC,MAAM;gBAC9C,OAAO,EAAE,qBAAqB,CAAC,OAAO;aACvC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACvD,OAAO;gBACL,GAAG,UAAU;gBACb,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,OAAO,EAAE,qBAAqB,OAAO,IAAI,IAAI,OAAO,KAAK,CAAC,SAAS,MAAM;aAC1E,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,GAAG,UAAU;gBACb,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,sCAAsC,OAAO,IAAI,IAAI,KAAK,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;aAClG,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,6BAA6B,CACnC,MAA2B;QAE3B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,MAAM,IAAI,GAAG,kBAAkB,CAAC;QAChC,MAAM,WAAW,GAAG,MAAM,CAAC,iBAAiB;YAC1C,CAAC,CAAC,wBAAwB,MAAM,CAAC,iBAAiB,GAAG;YACrD,CAAC,CAAC,EAAE,CAAC;QAEP,IAAI,MAAM,CAAC,kBAAkB,KAAK,WAAW,EAAE,CAAC;YAC9C,OAAO;gBACL,MAAM,EAAE,mBAAmB;gBAC3B,OAAO,EAAE,0DAA0D,OAAO,IAAI,IAAI,yDAAyD,WAAW,EAAE;aACzJ,CAAC;QACJ,CAAC;QAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC1E,IACE,MAAM,CAAC,aAAa,KAAK,OAAO;YAChC,kBAAkB,KAAK,IAAI;YAC3B,IAAI,CAAC,GAAG,EAAE,GAAG,kBAAkB,IAAI,iCAAiC,EACpE,CAAC;YACD,OAAO;gBACL,MAAM,EAAE,6BAA6B;gBACrC,OAAO,EAAE,+DAA+D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,kBAAkB,CAAC,yCAAyC,WAAW,EAAE;aAC9K,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,cAAc,CAAC,KAAc;QACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9C,CAAC;IAEO,SAAS,CAAC,KAAa;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;QACtD,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;YACjB,OAAO,GAAG,OAAO,UAAU,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACxD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACzC,OAAO,GAAG,OAAO,UAAU,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACxD,CAAC;IAEO,QAAQ,CACd,IAAY,EACZ,IAAY,EACZ,SAAiB;QAEjB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,aAAG,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,OAAO,GAAG,KAAK,CAAC;YAEpB,2CAA2C;YAC3C,MAAM,CAAC,KAAK,EAAE,CAAC;YAEf,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;gBAC/B,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO;gBACT,CAAC;gBAED,OAAO,GAAG,IAAI,CAAC;gBACf,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAE5B,sCAAsC;gBACtC,IAAI,CAAC;oBACH,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;gBAAC,WAAM,CAAC;oBACP,+BAA+B;gBACjC,CAAC;gBAED,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,CAAC,KAAK,CAAC,CAAC;oBACd,OAAO;gBACT,CAAC;gBAED,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;YACjD,CAAC,CAAC;YAEF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,SAAS,MAAM,CAAC,CAAC,CAAC;YACxD,CAAC,EAAE,SAAS,CAAC,CAAC;YAEd,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,KAAU;QACjC,MAAM,IAAI,GAAG,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,EAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,KAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QAChD,OAAO,GAAG,IAAI,GAAG,OAAO,EAAE,CAAC;IAC7B,CAAC;IAEO,UAAU;QAChB,OAAO,gBAAM;aACV,WAAW,CAAC,EAAE,CAAC;aACf,QAAQ,CAAC,QAAQ,CAAC;aAClB,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;aAChB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;aACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACzB,CAAC;IAEO,YAAY,CAAC,QAAgB;QACnC,IAAI,CAAC;YACH,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QACvD,CAAC;QAAC,WAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,KAAc;QACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAAC,WAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,cAAc,CACpB,QAAoC;QAEpC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC7D,CAAC,CAAC,QAAQ,CAAC,eAAe;YAC1B,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,eAAe,CAAC,CAAC;IAC1C,CAAC;IAEO,mBAAmB,CAAC,MAAiB;QAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC9C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,uBAAuB,CAC7B,MAA2B,EAC3B,SAA8B,EAC9B,mBAA4B;QAE5B,OAAO,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACzE,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,MAAM,CAAC,CACpE,CAAC;YACF,OAAO,WAAW,CAAC,OAAO,IAAI,SAAS,CAAC;QAC1C,CAAC;QAAC,WAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;CACF;AAOQ,4CAAgB"}
@@ -252,21 +252,64 @@ function getCloudOnlyMode() {
252
252
  *
253
253
  * @returns {Promise<string>}
254
254
  */
255
- async function describeEnabledMatterFeatures() {
256
- let config = null;
255
+ /**
256
+ * The plugin config as SAVED, or null when it cannot be read.
257
+ *
258
+ * Every settings-derived line in the diagnostic report goes through here. The
259
+ * form is only ever consulted afterwards, to warn that it disagrees.
260
+ *
261
+ * @returns {Promise<Record<string, any> | null>}
262
+ */
263
+ async function readSavedPluginConfig() {
257
264
  try {
258
265
  const configs =
259
266
  window.homebridge &&
260
267
  typeof window.homebridge.getPluginConfig === "function"
261
268
  ? await window.homebridge.getPluginConfig()
262
269
  : null;
263
- config = configs
264
- ? configs.find((entry) => entry.platform === "RoborockVacuumPlatform")
270
+ return configs
271
+ ? configs.find((entry) => entry.platform === "RoborockVacuumPlatform") ||
272
+ null
265
273
  : null;
266
274
  } catch {
275
+ return null;
276
+ }
277
+ }
278
+
279
+ /**
280
+ * Cloud-only mode as the RUNNING plugin has it.
281
+ *
282
+ * This read the checkbox until 3.4.6, which is the same trap the matterFeatures
283
+ * line was fixed for one line below — fixing the line in front of me instead of
284
+ * the rule. A user who had tried cloud-only mode and switched it off again got
285
+ * a report whose settings line said `disabled` while the device below it said
286
+ * "Cloud only", and spent an evening hunting a ghost setting.
287
+ *
288
+ * @returns {Promise<string>}
289
+ */
290
+ async function describeSavedCloudOnlyMode() {
291
+ const config = await readSavedPluginConfig();
292
+ if (!config) {
267
293
  return "unavailable";
268
294
  }
269
295
 
296
+ const label = config.cloudOnlyMode === true ? "enabled" : "disabled";
297
+ return hasUnsavedCloudOnlyEdit(config)
298
+ ? `${label} (WARNING: the settings form has unsaved changes; this is the value the plugin is running)`
299
+ : label;
300
+ }
301
+
302
+ /** True when the cloud-only checkbox differs from what is saved in the config. */
303
+ function hasUnsavedCloudOnlyEdit(config) {
304
+ return (
305
+ Boolean(elements.cloudOnlyMode && elements.cloudOnlyMode.checked) !==
306
+ (config.cloudOnlyMode === true)
307
+ );
308
+ }
309
+
310
+ async function describeEnabledMatterFeatures() {
311
+ const config = await readSavedPluginConfig();
312
+
270
313
  if (!config) {
271
314
  return "unavailable";
272
315
  }
@@ -1114,7 +1157,7 @@ async function buildDiagnosticsReport(result) {
1114
1157
  `nodeVersion: ${result.nodeVersion || "unknown"}`,
1115
1158
  `token: ${hasToken ? "present" : "missing"}`,
1116
1159
  `homeData: ${result.hasHomeData ? "present" : "missing"}`,
1117
- `cloudOnlyMode: ${getCloudOnlyMode() ? "enabled" : "disabled"}`,
1160
+ `cloudOnlyMode: ${await describeSavedCloudOnlyMode()}`,
1118
1161
  // Which Apple Home features are switched on decides what the plugin is
1119
1162
  // even allowed to publish, so a report that omits them cannot answer
1120
1163
  // "why doesn't Apple Home show X?" — the first question every one of
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "homebridge-roborock-matter",
3
- "version": "3.4.5",
3
+ "version": "3.4.7",
4
4
  "description": "The most complete Roborock plugin for Apple Home. Supports the entire Roborock lineup — from the classic S-series to the new 2025 Q7 series that no other plugin can control. Sign in with your Roborock account and get native start/stop, room cleaning, suction levels, battery, and live 'cleaning in the kitchen' room tracking. Verified by Homebridge.",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -34,6 +34,15 @@ const B01_PROTOCOL_VERSION = "B01";
34
34
  const B01_REQUEST_DPS = 10000;
35
35
  const B01_RESPONSE_DPS = 10001;
36
36
 
37
+ // Why a B01 robot is routed over the Roborock cloud. The dialect has no LAN
38
+ // request surface at all, so these robots are marked remote at startup and the
39
+ // plugin never opens a local TCP socket to them. That is a property of the
40
+ // protocol, not a fault, and the diagnostic report has to say so: labelling it
41
+ // as a failed LAN connection sends users hunting a network problem that cannot
42
+ // exist. Both the transport layer and the UI server read this one constant so
43
+ // the two sides cannot drift apart.
44
+ const B01_CLOUD_ONLY_REMOTE_REASON = "b01-protocol-cloud-only";
45
+
37
46
  // Q7 properties queried for a status snapshot (RoborockB01Props).
38
47
  // Note: no "water" property. Q7-series robots use a manually filled water
39
48
  // tank on the robot with no electronic water level/control, so water state
@@ -818,6 +827,7 @@ module.exports = {
818
827
  B01_STATUS_PROPS,
819
828
  B01_STATUS_TO_V1_STATE,
820
829
  isB01Protocol,
830
+ B01_CLOUD_ONLY_REMOTE_REASON,
821
831
  createB01MessageId,
822
832
  translateOutgoing,
823
833
  neutralResponse,
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+
3
+ // How the diagnostic report describes a robot's transport, as pure functions.
4
+ //
5
+ // This lived inside the TypeScript UI server, where `npm test` cannot reach it:
6
+ // the test job runs before any build, so the only thing a test could assert
7
+ // about these strings was that they appeared somewhere in the source text. The
8
+ // wording here is not decoration — it is what a user acts on when their robot
9
+ // will not respond, and getting it wrong costs them an evening. A Q7 owner
10
+ // unpaired his robot, uninstalled the plugin, reinstalled it and paired again
11
+ // because this report told him a local connection had been attempted and had
12
+ // failed (#7). His robot's protocol has no local connection to attempt.
13
+ //
14
+ // So the decisions live in plain JavaScript, next to the transport layer whose
15
+ // vocabulary they share, and the tests exercise them directly.
16
+
17
+ const { B01_CLOUD_ONLY_REMOTE_REASON } = require("./b01Q7Adapter");
18
+
19
+ /**
20
+ * Whether this robot's protocol has no LAN control surface at all.
21
+ *
22
+ * Read from the reason the transport layer recorded, not from a model list
23
+ * copied down here: one list that can fall out of step with the transport is
24
+ * exactly how the report came to contradict the plugin's own behaviour.
25
+ *
26
+ * @param {Record<string, any>} transport
27
+ * @returns {boolean}
28
+ */
29
+ function isCloudOnlyProtocol(transport) {
30
+ return (transport || {}).remoteReason === B01_CLOUD_ONLY_REMOTE_REASON;
31
+ }
32
+
33
+ /**
34
+ * The connection status, health and explanation shown on a device card.
35
+ *
36
+ * @param {Record<string, any>} device
37
+ * @param {Record<string, any>} transport
38
+ * @param {boolean} hasLocalCredentials
39
+ * @returns {{status: string, health: "good" | "warn", hint: string}}
40
+ */
41
+ function describeConnectionState(device, transport, hasLocalCredentials) {
42
+ const safeDevice = device || {};
43
+ const safeTransport = transport || {};
44
+ const tcpState = safeTransport.tcpConnectionState;
45
+ const lastTransportReason =
46
+ safeTransport.lastTransportReason || safeTransport.remoteReason || null;
47
+ const hasLocalIp = Boolean(safeTransport.localIp);
48
+
49
+ if (
50
+ lastTransportReason === "cloud-only-mode" ||
51
+ safeTransport.localDiscoveryState === "disabled" ||
52
+ tcpState === "disabled"
53
+ ) {
54
+ return {
55
+ status: "Cloud only",
56
+ health: "good",
57
+ hint: "Cloud-only mode is enabled, so local LAN discovery and local TCP control are disabled for this plugin.",
58
+ };
59
+ }
60
+
61
+ if (tcpState === "connected") {
62
+ return {
63
+ status: "Local connected",
64
+ health: "good",
65
+ hint: "The plugin has an active LAN TCP connection to this vacuum.",
66
+ };
67
+ }
68
+
69
+ if (safeDevice.online === false || lastTransportReason === "device-offline") {
70
+ return {
71
+ status: "Device offline",
72
+ health: "warn",
73
+ hint: hasLocalCredentials
74
+ ? "Roborock currently reports this vacuum offline. Local credentials are available, but the plugin cannot use them until the vacuum wakes up and rejoins Wi-Fi."
75
+ : "Roborock currently reports this vacuum offline, and no local credentials were found for LAN control.",
76
+ };
77
+ }
78
+
79
+ // Ahead of the cloud-fallback branch on purpose: for a B01/Q7 robot the cloud
80
+ // is not what the plugin fell back to, it is the only transport the protocol
81
+ // has. Calling it a fallback — and blaming "LAN TCP was not connected at that
82
+ // moment" — describes a network fault that cannot occur.
83
+ if (isCloudOnlyProtocol(safeTransport)) {
84
+ return {
85
+ status: "Cloud control (this model)",
86
+ health: "good",
87
+ hint: "This model speaks only Roborock's cloud protocol, which has no LAN control surface, so the plugin never opens a local connection to it. A blank local IP, discovery state and TCP state are expected here and are not a fault.",
88
+ };
89
+ }
90
+
91
+ if (safeTransport.lastTransport === "cloud") {
92
+ return {
93
+ status: "Cloud fallback",
94
+ health: "warn",
95
+ hint: hasLocalCredentials
96
+ ? "The plugin has local credentials but the last command used Roborock cloud transport, usually because LAN TCP was not connected at that moment."
97
+ : "The last command used Roborock cloud transport because local LAN credentials are not available.",
98
+ };
99
+ }
100
+
101
+ if (hasLocalCredentials && hasLocalIp) {
102
+ return {
103
+ status: "Ready for local connection",
104
+ health: "warn",
105
+ hint: "The plugin has local credentials and a discovered IP address, but no active LAN TCP connection is currently cached.",
106
+ };
107
+ }
108
+
109
+ if (hasLocalCredentials) {
110
+ return {
111
+ status: "Local credentials available",
112
+ health: "warn",
113
+ hint: "The plugin has the credential needed for LAN control, but it has not discovered or connected to the vacuum locally yet.",
114
+ };
115
+ }
116
+
117
+ return {
118
+ status: "Cloud-only fallback likely",
119
+ health: "warn",
120
+ hint: "No local LAN credential was found for this vacuum, so the plugin will likely rely on Roborock cloud transport.",
121
+ };
122
+ }
123
+
124
+ /**
125
+ * Why the LAN probe is not being run, or null when it should run.
126
+ *
127
+ * @param {{cloudOnlyProtocol?: boolean, cloudOnlyMode?: boolean,
128
+ * hasLocalKey?: boolean, online?: boolean, localIp?: string | null}} state
129
+ * @returns {{message: string, health: "good" | "warn"} | null}
130
+ */
131
+ function describeLocalProbeSkip(state) {
132
+ const safeState = state || {};
133
+
134
+ // First, because there is nothing to probe and nothing wrong. Falling
135
+ // through to the "no local IP is cached yet" branch would tell the user to
136
+ // wait for a discovery that is never going to happen for this model.
137
+ if (safeState.cloudOnlyProtocol) {
138
+ return {
139
+ message:
140
+ "This model speaks only Roborock's cloud protocol, so there is no LAN endpoint to test. Nothing is wrong and no local connection is expected.",
141
+ health: "good",
142
+ };
143
+ }
144
+
145
+ if (safeState.cloudOnlyMode) {
146
+ return {
147
+ message:
148
+ "Use Roborock cloud only is enabled, so local LAN probing is skipped until cloud-only mode is disabled and Homebridge is restarted.",
149
+ health: "warn",
150
+ };
151
+ }
152
+
153
+ if (!safeState.hasLocalKey) {
154
+ return {
155
+ message:
156
+ "No local credential is cached for this vacuum, so a LAN control test cannot run yet.",
157
+ health: "warn",
158
+ };
159
+ }
160
+
161
+ if (safeState.online === false) {
162
+ return {
163
+ message:
164
+ "Roborock currently reports this vacuum offline. Wake the vacuum or place it on the dock, then test again.",
165
+ health: "warn",
166
+ };
167
+ }
168
+
169
+ if (!safeState.localIp) {
170
+ return {
171
+ message:
172
+ "No local IP address is cached yet. Let the plugin complete startup or press Refresh after the vacuum wakes up.",
173
+ health: "warn",
174
+ };
175
+ }
176
+
177
+ return null;
178
+ }
179
+
180
+ /**
181
+ * Whether to flag this robot as probably falling back to the cloud.
182
+ *
183
+ * A robot whose protocol has no LAN surface is not "likely" to fall back — it
184
+ * was never anywhere else. Flagging it reads as a warning about a network
185
+ * problem the user does not have and cannot fix.
186
+ *
187
+ * @param {Record<string, any>} device
188
+ * @returns {boolean}
189
+ */
190
+ function isCloudFallbackLikely(device) {
191
+ const safeDevice = device || {};
192
+
193
+ if (safeDevice.remoteReason === B01_CLOUD_ONLY_REMOTE_REASON) {
194
+ return false;
195
+ }
196
+
197
+ return (
198
+ safeDevice.lastTransport === "cloud" ||
199
+ safeDevice.connectionStatus === "Cloud fallback"
200
+ );
201
+ }
202
+
203
+ module.exports = {
204
+ describeConnectionState,
205
+ describeLocalProbeSkip,
206
+ isCloudFallbackLikely,
207
+ isCloudOnlyProtocol,
208
+ };
@@ -227,7 +227,7 @@ class localConnector {
227
227
  // The robot answered, so the back-off starts over for the next outage.
228
228
  this.reconnectAttempts.delete(duid);
229
229
 
230
- if (this.adapter.remoteDevices?.delete(duid)) {
230
+ if (this.adapter.clearRemoteDevice(duid)) {
231
231
  this.adapter.log.debug(
232
232
  `Local TCP connected for ${duid}; clearing remote fallback marker.`
233
233
  );
@@ -316,11 +316,10 @@ class localConnector {
316
316
  this.adapter.log.debug(
317
317
  `error on tcp client for ${duid}. Marking this device as remote device. Connecting via MQTT instead ${error.message}`
318
318
  );
319
- this.adapter.remoteDevices.add(duid);
320
- await this.adapter.updateTransportDiagnostics(duid, {
321
- isRemote: true,
322
- remoteReason: "marked-remote-after-connect-failure",
323
- });
319
+ await this.adapter.markDeviceRemote(
320
+ duid,
321
+ "marked-remote-after-connect-failure"
322
+ );
324
323
  // this.adapter.catchError(`Failed to create tcp client: ${error.stack}`, `function createClient`, duid);
325
324
  }
326
325
  });
@@ -38,6 +38,35 @@ const B01_LIVE_ROOM_FETCH_V1_STATES = new Set([5, 11, 16, 17, 18]);
38
38
  // cached live room is cleared so a later run starts fresh.
39
39
  const B01_LIVE_ROOM_CLEAR_V1_STATES = new Set([3, 8]);
40
40
 
41
+ // The transport-diagnostics fields cloud-only mode owns, and the marker value
42
+ // it writes into each.
43
+ //
44
+ // These diagnostics are persisted, so the markers outlive the setting unless
45
+ // something puts them back. `tcpConnectionState` is the one that stuck: it is
46
+ // only rewritten when a LAN connection is actually attempted, and none is
47
+ // attempted for a robot no local IP was ever discovered for. A user who tried
48
+ // cloud-only mode once and switched it off again kept "Cloud only" on the
49
+ // device card through restarts, re-pairs and a full plugin reinstall, and the
50
+ // diagnostic report told them cloud-only mode was enabled two lines under its
51
+ // own `cloudOnlyMode: disabled`.
52
+ //
53
+ // Setting and clearing both derive from this table on purpose. A hand-written
54
+ // list of fields to clear is the same mistake as a hand-written list of files
55
+ // or log lines one level up: it is correct until someone adds a fourth marker.
56
+ const CLOUD_ONLY_TRANSPORT_MARKERS = Object.freeze({
57
+ lastTransportReason: "cloud-only-mode",
58
+ localDiscoveryState: "disabled",
59
+ tcpConnectionState: "disabled",
60
+ });
61
+
62
+ // The reason recorded for a robot that was marked remote without one being
63
+ // given. Deliberately vague: "the vacuum is marked remote" tells the reader
64
+ // nothing they did not already know, which is the correct failure mode for a
65
+ // missing reason. The alternative — assuming the most common cause — is how
66
+ // the report came to state that a LAN connection had been attempted and failed
67
+ // for robots the plugin never attempts a LAN connection to.
68
+ const UNEXPLAINED_REMOTE_REASON = "remote-device";
69
+
41
70
  // Minimum gap between live-room map fetch attempts while cleaning. The map
42
71
  // payload is an order of magnitude heavier than get_status, so it rides a
43
72
  // slower cadence than the active status polls — but 20s meant a robot could
@@ -191,6 +220,10 @@ class Roborock {
191
220
 
192
221
  this.localDevices = {};
193
222
  this.remoteDevices = new Set();
223
+ // Why each of those robots is remote. Membership alone cannot answer that:
224
+ // see markDeviceRemote.
225
+ /** @type {Map<string, string>} */
226
+ this.remoteDeviceReasons = new Map();
194
227
 
195
228
  this.name = "roborock";
196
229
  this.deviceNotify = null;
@@ -896,6 +929,49 @@ class Roborock {
896
929
  });
897
930
  }
898
931
 
932
+ /**
933
+ * Reconcile one robot's cloud-only transport markers with the mode as it is
934
+ * configured right now.
935
+ *
936
+ * Enabling stamps every marker in CLOUD_ONLY_TRANSPORT_MARKERS. Disabling
937
+ * clears exactly those fields that still hold the marker value, so a LAN
938
+ * connection that came up in the meantime is never stomped, and a robot that
939
+ * has no diagnostics yet is not given any.
940
+ *
941
+ * @param {string} duid
942
+ * @param {boolean} cloudOnly
943
+ */
944
+ async syncCloudOnlyTransportMarkers(duid, cloudOnly) {
945
+ if (!duid) {
946
+ return;
947
+ }
948
+
949
+ if (cloudOnly) {
950
+ await this.updateTransportDiagnostics(duid, {
951
+ ...CLOUD_ONLY_TRANSPORT_MARKERS,
952
+ });
953
+ return;
954
+ }
955
+
956
+ const entry = this.getTransportDiagnostics()[duid];
957
+ if (!entry || typeof entry != "object") {
958
+ return;
959
+ }
960
+
961
+ const cleared = {};
962
+ for (const [field, marker] of Object.entries(
963
+ CLOUD_ONLY_TRANSPORT_MARKERS
964
+ )) {
965
+ if (entry[field] === marker) {
966
+ cleared[field] = null;
967
+ }
968
+ }
969
+
970
+ if (Object.keys(cleared).length) {
971
+ await this.updateTransportDiagnostics(duid, cleared);
972
+ }
973
+ }
974
+
899
975
  getTransportDiagnostics() {
900
976
  const diagnostics = this.getStateAsync("TransportDiagnostics");
901
977
  if (diagnostics && typeof diagnostics.val == "string") {
@@ -1202,6 +1278,8 @@ class Roborock {
1202
1278
  "secure-command",
1203
1279
  "photo-command",
1204
1280
  "preferred-cloud-command",
1281
+ // Not a fallback from local: this dialect has no local to fall back from.
1282
+ b01Q7Adapter.B01_CLOUD_ONLY_REMOTE_REASON,
1205
1283
  ].includes(String(reason));
1206
1284
  }
1207
1285
 
@@ -1237,6 +1315,8 @@ class Roborock {
1237
1315
  "udp-broadcast-discovery": "UDP broadcast discovery found the vacuum",
1238
1316
  "marked-remote-after-connect-failure":
1239
1317
  "local TCP connection failed and the vacuum was marked remote",
1318
+ [b01Q7Adapter.B01_CLOUD_ONLY_REMOTE_REASON]:
1319
+ "this model speaks only Roborock's cloud protocol, which has no LAN control surface",
1240
1320
  };
1241
1321
 
1242
1322
  if (!reason) {
@@ -1518,29 +1598,30 @@ class Roborock {
1518
1598
  ignoredSet
1519
1599
  );
1520
1600
 
1521
- if (this.isCloudOnlyModeEnabled()) {
1601
+ const cloudOnly = this.isCloudOnlyModeEnabled();
1602
+ if (cloudOnly) {
1522
1603
  this.log.info(
1523
1604
  "Roborock cloud-only mode is enabled; local LAN discovery and TCP connections will be skipped."
1524
1605
  );
1606
+ }
1525
1607
 
1526
- for (const device of managedDevicesForDiagnostics) {
1608
+ for (const device of managedDevicesForDiagnostics) {
1609
+ if (cloudOnly) {
1527
1610
  await this.updateTransportDiagnostics(device.duid, {
1528
1611
  lastTransport: "cloud",
1529
- lastTransportReason: "cloud-only-mode",
1530
1612
  localIp: null,
1531
- localDiscoveryState: "disabled",
1532
- tcpConnectionState: "disabled",
1613
+ });
1614
+ } else if (!device.localKey) {
1615
+ await this.updateTransportDiagnostics(device.duid, {
1616
+ lastTransport: "cloud",
1617
+ lastTransportReason: "missing-local-key",
1533
1618
  });
1534
1619
  }
1535
- } else {
1536
- for (const device of managedDevicesForDiagnostics) {
1537
- if (!device.localKey) {
1538
- await this.updateTransportDiagnostics(device.duid, {
1539
- lastTransport: "cloud",
1540
- lastTransportReason: "missing-local-key",
1541
- });
1542
- }
1543
- }
1620
+
1621
+ // Runs in BOTH directions: switching the mode off has to retract
1622
+ // the markers it wrote, or they stay on disk for good and the
1623
+ // device keeps reporting itself as cloud-only.
1624
+ await this.syncCloudOnlyTransportMarkers(device.duid, cloudOnly);
1544
1625
  }
1545
1626
 
1546
1627
  // this.adapter.log.debug(`initUser test: ${JSON.stringify(Array.from(this.adapter.localKeys.entries()))}`);
@@ -1940,9 +2021,14 @@ class Roborock {
1940
2021
  this.log.debug(`Creating device: ${name} with duid: ${duid}`);
1941
2022
 
1942
2023
  // B01/Q7 robots are cloud/MQTT-only: mark them remote up front so the
1943
- // transport layer never attempts local TCP connections to them.
2024
+ // transport layer never attempts local TCP connections to them. The
2025
+ // reason travels with the mark so the report says "this protocol has no
2026
+ // LAN surface" rather than inventing a LAN connection that failed.
1944
2027
  if (b01Q7Adapter.isB01Protocol(device.pv)) {
1945
- this.remoteDevices.add(duid);
2028
+ await this.markDeviceRemote(
2029
+ duid,
2030
+ b01Q7Adapter.B01_CLOUD_ONLY_REMOTE_REASON
2031
+ );
1946
2032
  }
1947
2033
 
1948
2034
  const robotModel = this.getProductAttribute(duid, "model");
@@ -2572,6 +2658,58 @@ class Roborock {
2572
2658
  }
2573
2659
  }
2574
2660
 
2661
+ /**
2662
+ * Marks a vacuum as reachable only over the Roborock cloud, recording WHY.
2663
+ *
2664
+ * Membership of `remoteDevices` cannot answer "why" on its own, and the two
2665
+ * reasons are not remotely alike. A B01/Q7 robot is marked at startup
2666
+ * because its dialect has no LAN request surface, so no local connection is
2667
+ * ever attempted; another robot is marked only after a local TCP connect
2668
+ * genuinely failed. The report used to state the second reason for both,
2669
+ * which sent a Q7 owner through an unpair, a plugin uninstall, a reinstall
2670
+ * and a fresh pairing chasing a LAN fault that could not exist (#7).
2671
+ *
2672
+ * Every caller therefore supplies its own reason. A caller that forgets one
2673
+ * degrades to the vague `remote-device`, which is merely uninformative —
2674
+ * never to a specific claim that is false.
2675
+ *
2676
+ * @param {string} duid
2677
+ * @param {string} reason
2678
+ */
2679
+ async markDeviceRemote(duid, reason) {
2680
+ if (!duid) {
2681
+ return;
2682
+ }
2683
+
2684
+ const remoteReason = reason || UNEXPLAINED_REMOTE_REASON;
2685
+ this.remoteDevices.add(duid);
2686
+ this.remoteDeviceReasons.set(duid, remoteReason);
2687
+
2688
+ await this.updateTransportDiagnostics(duid, {
2689
+ isRemote: true,
2690
+ remoteReason,
2691
+ });
2692
+ }
2693
+
2694
+ /**
2695
+ * Drops the remote marker and the reason that went with it.
2696
+ *
2697
+ * @param {string} duid
2698
+ * @returns {boolean} whether the vacuum had been marked remote
2699
+ */
2700
+ clearRemoteDevice(duid) {
2701
+ this.remoteDeviceReasons.delete(duid);
2702
+ return this.remoteDevices.delete(duid);
2703
+ }
2704
+
2705
+ /**
2706
+ * @param {string} duid
2707
+ * @returns {string} the recorded reason, or the vague default
2708
+ */
2709
+ getRemoteDeviceReason(duid) {
2710
+ return this.remoteDeviceReasons.get(duid) || UNEXPLAINED_REMOTE_REASON;
2711
+ }
2712
+
2575
2713
  async isRemoteDevice(duid) {
2576
2714
  const homedataJSON = this.getStoredHomeData();
2577
2715
 
@@ -2586,7 +2724,7 @@ class Roborock {
2586
2724
  isRemote: true,
2587
2725
  remoteReason: receivedDevice
2588
2726
  ? "received-device"
2589
- : "marked-remote-after-connect-failure",
2727
+ : this.getRemoteDeviceReason(duid),
2590
2728
  });
2591
2729
  return true;
2592
2730
  }
@@ -4505,6 +4643,10 @@ class Roborock {
4505
4643
  }
4506
4644
  }
4507
4645
 
4508
- module.exports = { Roborock };
4646
+ module.exports = {
4647
+ Roborock,
4648
+ CLOUD_ONLY_TRANSPORT_MARKERS,
4649
+ UNEXPLAINED_REMOTE_REASON,
4650
+ };
4509
4651
 
4510
4652
  ////////////////////////////////////////////////////////////////////////////////////////////////////