@camstack/system 1.2.354 → 1.2.356

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 (80) hide show
  1. package/dist/addon-runner.js +1 -1
  2. package/dist/addon-runner.mjs +1 -1
  3. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  6. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  7. package/dist/builtins/alerts/alerts.addon.js +1 -1
  8. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  9. package/dist/builtins/autotrack/index.js +1 -1
  10. package/dist/builtins/autotrack/index.mjs +1 -1
  11. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  12. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  13. package/dist/builtins/calendars/calendar-prefs-store.d.ts +7 -0
  14. package/dist/builtins/calendars/calendars.addon.js +3 -2
  15. package/dist/builtins/calendars/calendars.addon.mjs +3 -2
  16. package/dist/builtins/camera-grid/grid-activity-mirror.d.ts +12 -2
  17. package/dist/builtins/camera-grid/index.js +15 -3
  18. package/dist/builtins/camera-grid/index.mjs +15 -3
  19. package/dist/builtins/composer/composer.addon.js +53 -12
  20. package/dist/builtins/composer/composer.addon.mjs +53 -12
  21. package/dist/builtins/console-logging/index.js +1 -1
  22. package/dist/builtins/console-logging/index.mjs +1 -1
  23. package/dist/builtins/core-blocks/block-settings-store.d.ts +5 -0
  24. package/dist/builtins/core-blocks/core-blocks.addon.js +7 -2
  25. package/dist/builtins/core-blocks/core-blocks.addon.mjs +7 -2
  26. package/dist/builtins/device-manager/device-manager.addon.js +2 -2
  27. package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
  28. package/dist/builtins/hub-forwarder/index.js +1 -1
  29. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  30. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  31. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  32. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  33. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  34. package/dist/builtins/local-network/local-network.addon.js +1 -1
  35. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  36. package/dist/builtins/loki-logging/index.js +1 -1
  37. package/dist/builtins/loki-logging/index.mjs +1 -1
  38. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  39. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  40. package/dist/builtins/platform-probe/index.js +1 -1
  41. package/dist/builtins/platform-probe/index.mjs +1 -1
  42. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  43. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  44. package/dist/builtins/snapshot/index.js +1 -1
  45. package/dist/builtins/snapshot/index.mjs +1 -1
  46. package/dist/builtins/sqlite-storage/analyze-stats.d.ts +0 -2
  47. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  48. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  49. package/dist/builtins/sqlite-storage/sqlite-settings-backend.d.ts +9 -11
  50. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  51. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  52. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  53. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  54. package/dist/builtins/system-config/system-config.addon.js +1 -1
  55. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  56. package/dist/builtins/winston-logging/index.js +1 -1
  57. package/dist/builtins/winston-logging/index.mjs +1 -1
  58. package/dist/{child-cap-dispatch-C1x1kNJK.mjs → child-cap-dispatch-BcRHQBKW.mjs} +28 -81
  59. package/dist/{child-cap-dispatch-CRqYKHAb.js → child-cap-dispatch-wbIQJctP.js} +27 -86
  60. package/dist/{composition-sources-DzkEFd8q.mjs → composition-sources-BBfqepyT.mjs} +1 -1
  61. package/dist/{composition-sources-0nuWOdNd.js → composition-sources-CeO0K2cl.js} +1 -1
  62. package/dist/{dist-DVyXxn41.mjs → dist-B7WRgEZY.mjs} +82 -49
  63. package/dist/{dist-DePB7uwU.js → dist-CFVOy8VT.js} +87 -48
  64. package/dist/index.d.ts +1 -1
  65. package/dist/index.js +18 -46
  66. package/dist/index.mjs +19 -46
  67. package/dist/kernel/event-plane-report.d.ts +7 -36
  68. package/dist/kernel/fs-utils.d.ts +1 -5
  69. package/dist/kernel/heap-spaces.d.ts +2 -23
  70. package/dist/kernel/index.d.ts +0 -2
  71. package/dist/kernel/moleculer/event-bus-core.d.ts +6 -28
  72. package/dist/kernel/moleculer/process-service.d.ts +2 -5
  73. package/dist/kernel/moleculer/runner-native-allocator.d.ts +1 -6
  74. package/dist/kernel/transport/index.d.ts +1 -1
  75. package/dist/kernel/transport/local-child-registry.d.ts +8 -41
  76. package/dist/kernel/transport/uds-event-bridge.d.ts +2 -2
  77. package/dist/{retired-settings-keys-BTKZdPn6.js → retired-settings-keys-CRlTzxaS.js} +1 -1
  78. package/dist/{retired-settings-keys-DFur4hJF.mjs → retired-settings-keys-DKRjfz0U.mjs} +1 -1
  79. package/package.json +1 -1
  80. package/dist/kernel/heap-allocation-sample.d.ts +0 -107
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_dist = require("./dist-DePB7uwU.js");
2
+ const require_dist = require("./dist-CFVOy8VT.js");
3
3
  const require_proc_stat = require("./proc-stat-DL-WUOhl.js");
4
4
  require("./hub-cap-forward-DmHNjbB0.js");
5
5
  let node_crypto = require("node:crypto");
@@ -56,8 +56,6 @@ function createEventPlaneReader(sources) {
56
56
  }
57
57
  const crossNode = sources.crossNodeStats();
58
58
  return {
59
- udsMode: registry.eventFanoutMode,
60
- crossNodeMode: sources.crossNodeMode(),
61
59
  children,
62
60
  childrenConnected: listed.length,
63
61
  childrenUndeclared: registry.undeclaredChildCount(),
@@ -132,8 +130,6 @@ function diffEventPlane(baseline, current, topN = 5) {
132
130
  }
133
131
  const byBroadcasts = categoryDeltas.toSorted((a, b) => b.broadcasts - a.broadcasts || a.category.localeCompare(b.category));
134
132
  return {
135
- udsMode: current.udsMode,
136
- crossNodeMode: current.crossNodeMode,
137
133
  childrenConnected: current.childrenConnected,
138
134
  childrenUndeclared: current.childrenUndeclared,
139
135
  fanoutSent,
@@ -185,7 +181,7 @@ function formatEventPlane(window) {
185
181
  const top = window.top.map((d) => `${d.childId}:${d.sent}/${d.suppressed}`).join(",");
186
182
  const cats = window.topCategories.map((c) => `${c.category}:${c.broadcasts}/${c.wanted}`).join(",");
187
183
  const orphans = window.topOrphans.map((c) => `${c.category}:${c.broadcasts}`).join(",");
188
- return ` fanoutMode=uds:${window.udsMode}/cross-node:${window.crossNodeMode} children=${window.childrenConnected} childrenUndeclared=${window.childrenUndeclared} fanoutSent=${window.fanoutSent} fanoutSuppressed=${window.fanoutSuppressed} crossNodeDelivered=${window.crossNodeDelivered} crossNodeSuppressed=${window.crossNodeSuppressed} fanoutEvents=${window.categoryBroadcasts} fanoutOrphans=${window.orphanBroadcasts} fanoutCatsDropped=${window.categoryOverflow}` + (top.length === 0 ? "" : ` fanoutTop=${top}`) + (cats.length === 0 ? "" : ` fanoutCats=${cats}`) + (orphans.length === 0 ? "" : ` fanoutOrphanTop=${orphans}`);
184
+ return ` children=${window.childrenConnected} childrenUndeclared=${window.childrenUndeclared} fanoutSent=${window.fanoutSent} fanoutSuppressed=${window.fanoutSuppressed} crossNodeDelivered=${window.crossNodeDelivered} crossNodeSuppressed=${window.crossNodeSuppressed} fanoutEvents=${window.categoryBroadcasts} fanoutOrphans=${window.orphanBroadcasts} fanoutCatsDropped=${window.categoryOverflow}` + (top.length === 0 ? "" : ` fanoutTop=${top}`) + (cats.length === 0 ? "" : ` fanoutCats=${cats}`) + (orphans.length === 0 ? "" : ` fanoutOrphanTop=${orphans}`);
189
185
  }
190
186
  //#endregion
191
187
  //#region src/kernel/transport/cap-action-census.ts
@@ -1084,21 +1080,16 @@ function formatHeapSpaces(spaces, minMb = 32) {
1084
1080
  }
1085
1081
  var defaultDeps = {
1086
1082
  readMemory: () => process.memoryUsage(),
1087
- readSpaces: readHeapSpaces,
1088
- env: process.env
1083
+ readSpaces: readHeapSpaces
1089
1084
  };
1090
1085
  /**
1091
- * The SIGUSR2 report — memory + the FULL per-space breakdown, always; the
1092
- * snapshot NEVER — see the note in the body.
1086
+ * The SIGUSR2 report — memory + the FULL per-space breakdown; never a heap
1087
+ * snapshot (D718) — see the note in the body.
1093
1088
  *
1094
1089
  * The breakdown here keeps every non-empty space at 0.1 MB, unlike the
1095
1090
  * heartbeat's filtered whole-MB pair: this is a hand-fired diagnostic read once
1096
1091
  * by a human who asked for it, so completeness costs nothing. The heartbeat runs
1097
1092
  * unattended on every runner forever, so it pays for every field it prints.
1098
- *
1099
- * A refused snapshot SAYS SO. A branch that drops work silently reads as "it was
1100
- * never requested", and this one is fired by an operator who is standing there
1101
- * waiting for a file.
1102
1093
  */
1103
1094
  function emitHeapDiagnosticReport(request, deps = defaultDeps) {
1104
1095
  try {
@@ -7942,25 +7933,16 @@ function isHighFrequencyCategory(category) {
7942
7933
  for (const pattern of RING_BUFFER_DENY_PATTERNS) if (matchesPattern(pattern, category)) return true;
7943
7934
  return false;
7944
7935
  }
7945
- function readMoleculerFanoutMode() {
7946
- const raw = process.env.CAMSTACK_MOLECULER_EVENT_FANOUT;
7947
- if (raw === "shadow" || raw === "broadcast") return raw;
7948
- return "filter";
7949
- }
7950
7936
  /**
7951
7937
  * Does this node want to accept an inbound cross-node event in `category`?
7952
7938
  * The receiving-side mirror of `LocalChildRegistry.childWantsEvent`:
7953
- * - `broadcast` mode → always (gate disabled).
7954
7939
  * - a retaining bus (hub main) → always (it serves `getRecent` + admin-ui;
7955
7940
  * its interest is genuinely everything).
7956
7941
  * - undeclared interest (`null`) → always (fail-open).
7957
7942
  * - else the declared union must match via `matchesPattern` — the SAME
7958
7943
  * function the local subscriber map-key gate uses, giving delivery parity.
7959
- * `shadow` is handled by the caller (it counts the would-suppress but still
7960
- * delivers), exactly like the UDS fan-out.
7961
7944
  */
7962
- function crossNodeAcceptsCategory(mode, snapshot, category) {
7963
- if (mode === "broadcast") return true;
7945
+ function crossNodeAcceptsCategory(snapshot, category) {
7964
7946
  if (snapshot.retainRecent) return true;
7965
7947
  if (snapshot.interest === null) return true;
7966
7948
  return snapshot.interest.some((p) => matchesPattern(p, category));
@@ -8533,11 +8515,6 @@ var LIFECYCLE_SOURCE = {
8533
8515
  type: "core",
8534
8516
  id: "local-child-registry"
8535
8517
  };
8536
- function readFanoutMode() {
8537
- const raw = process.env.CAMSTACK_UDS_EVENT_FANOUT;
8538
- if (raw === "shadow" || raw === "broadcast") return raw;
8539
- return "filter";
8540
- }
8541
8518
  /**
8542
8519
  * Sentinel prefix used in the no-route error thrown when `cap-call-out` has no
8543
8520
  * local sibling and no `onUnownedCall` fallback. `ipcParentLink` detects this
@@ -8600,8 +8577,6 @@ var LocalChildRegistry = class {
8600
8577
  capUsageObserver;
8601
8578
  /** Tracks capNames already logged as UDS-routed; one INFO line per capName per process. */
8602
8579
  egressRoutedCaps = /* @__PURE__ */ new Set();
8603
- /** Active event fan-out mode, read once from `CAMSTACK_UDS_EVENT_FANOUT`. */
8604
- fanoutMode = readFanoutMode();
8605
8580
  /** Per-child event fan-out counters (sent / suppressed). */
8606
8581
  childEventStats = /* @__PURE__ */ new Map();
8607
8582
  /** D467: per-category production census (cumulative). See {@link CategoryFanoutSample}. */
@@ -8650,14 +8625,13 @@ var LocalChildRegistry = class {
8650
8625
  }
8651
8626
  }
8652
8627
  async start() {
8653
- this.logger?.info("UDS event fan-out mode", { mode: this.fanoutMode });
8654
8628
  this.server.onConnection((channel) => this.onConnection(channel));
8655
8629
  await this.server.listen();
8656
8630
  }
8657
8631
  /**
8658
8632
  * Per-child event fan-out counters (`{ sent, suppressed }`) or `null` if the
8659
8633
  * child has no recorded events yet. Exposed for the starvation-verification
8660
- * surface (shadow burn-in + operator debug).
8634
+ * surface (operator debug).
8661
8635
  */
8662
8636
  getChildEventStats(childId) {
8663
8637
  const s = this.childEventStats.get(childId);
@@ -8735,18 +8709,6 @@ var LocalChildRegistry = class {
8735
8709
  return this.actionCensus.read();
8736
8710
  }
8737
8711
  /**
8738
- * The regime the counters above were produced under, read once from
8739
- * `CAMSTACK_UDS_EVENT_FANOUT` at construction.
8740
- *
8741
- * A suppressed count means "nothing WAS dropped" under `filter` and "nothing
8742
- * WOULD have been dropped" under `shadow`. Those are different claims, and
8743
- * until this getter existed the mode was invisible at runtime — the counters
8744
- * were readable and the regime that produced them was not.
8745
- */
8746
- get eventFanoutMode() {
8747
- return this.fanoutMode;
8748
- }
8749
- /**
8750
8712
  * Connected children that never declared a subscription pattern set.
8751
8713
  *
8752
8714
  * Each one is a fail-open on BOTH planes: `childWantsEvent` returns true for
@@ -8763,30 +8725,18 @@ var LocalChildRegistry = class {
8763
8725
  return count;
8764
8726
  }
8765
8727
  /**
8766
- * Does `entry` want to receive an event in `category`? Honours the fan-out
8767
- * mode: `broadcast` → always; undeclared patterns (`null`) → always
8768
- * (fail-open); else the child's declared set must match via `matchesPattern`
8769
- * — the SAME function the child's own `deliverShared` map-key gate uses,
8770
- * giving provable delivery parity. `shadow` is handled by the caller (it
8771
- * counts the would-suppress but still sends).
8728
+ * Does `entry` want to receive an event in `category`? Undeclared patterns
8729
+ * (`null`) → always (fail-open, counted by {@link undeclaredChildCount});
8730
+ * else the child's declared set must match via `matchesPattern` — the SAME
8731
+ * function the child's own `deliverShared` map-key gate uses, giving provable
8732
+ * delivery parity. The parent always filters: the `CAMSTACK_UDS_EVENT_FANOUT`
8733
+ * shadow/broadcast modes were removed on 2026-10-06.
8772
8734
  *
8773
8735
  * NOTE: this gate must NOT consult `RING_BUFFER_DENY_PATTERNS` /
8774
8736
  * `isHighFrequencyCategory` — those are ring-buffer STORAGE policy; a child
8775
8737
  * that explicitly subscribes to a ring-denied category must still RECEIVE it.
8776
8738
  */
8777
8739
  childWantsEvent(entry, category) {
8778
- if (this.fanoutMode === "broadcast") return true;
8779
- return this.childSubscribesTo(entry, category);
8780
- }
8781
- /**
8782
- * The SUBSCRIPTION answer alone, with no fan-out-mode override.
8783
- *
8784
- * {@link childWantsEvent} answers "will this child be sent the event", which
8785
- * under `broadcast` is `true` for everything and therefore cannot say whether
8786
- * anyone actually asked. The D467 census needs the second question, so the
8787
- * two are separate functions and `broadcast` mode overrides only the first.
8788
- */
8789
- childSubscribesTo(entry, category) {
8790
8740
  if (entry.eventPatterns === null) return true;
8791
8741
  return entry.eventPatterns.some((p) => matchesPattern(p, category));
8792
8742
  }
@@ -9091,14 +9041,15 @@ var LocalChildRegistry = class {
9091
9041
  let subscribed = 0;
9092
9042
  for (const entry of this.children.values()) {
9093
9043
  if (entry.childId === exceptChildId) continue;
9094
- if (this.childSubscribesTo(entry, event.category)) subscribed += 1;
9095
9044
  const wants = this.childWantsEvent(entry, event.category);
9096
9045
  const stats = this.statsFor(entry.childId);
9097
- if (!wants) stats.suppressed++;
9098
- if (wants || this.fanoutMode === "shadow") {
9099
- stats.sent++;
9100
- entry.channel.emit(msg);
9046
+ if (!wants) {
9047
+ stats.suppressed++;
9048
+ continue;
9101
9049
  }
9050
+ subscribed += 1;
9051
+ stats.sent++;
9052
+ entry.channel.emit(msg);
9102
9053
  }
9103
9054
  this.recordCategoryBroadcast(event.category, subscribed);
9104
9055
  }
@@ -11034,19 +10985,16 @@ function nodeInterestSnapshot(broker) {
11034
10985
  }
11035
10986
  /**
11036
10987
  * Decide + account for an inbound cross-node event on `broker`. Returns whether
11037
- * the event should be delivered to the local bus. Honours the
11038
- * `CAMSTACK_MOLECULER_EVENT_FANOUT` mode (`mode`): in `shadow` it still delivers
11039
- * but records the would-suppress; in `filter` it drops unwanted categories.
11040
- * The interest is the UNION of forked-child AND in-process subscribers — the
10988
+ * the event should be delivered to the local bus: unwanted categories are
10989
+ * dropped and counted as `suppressed`. The interest is the UNION of forked-child AND in-process subscribers — the
11041
10990
  * gate never starves a live local subscriber of either kind.
11042
10991
  */
11043
- function acceptInboundCrossNode(broker, mode, category) {
11044
- const wants = crossNodeAcceptsCategory(mode, nodeInterestSnapshot(broker), category);
10992
+ function acceptInboundCrossNode(broker, category) {
10993
+ const wants = crossNodeAcceptsCategory(nodeInterestSnapshot(broker), category);
11045
10994
  const stats = crossNodeStatsFor(broker);
11046
- if (!wants) stats.suppressed++;
11047
- const deliver = wants || mode === "shadow";
11048
- if (deliver) stats.delivered++;
11049
- return deliver;
10995
+ if (wants) stats.delivered++;
10996
+ else stats.suppressed++;
10997
+ return wants;
11050
10998
  }
11051
10999
  /**
11052
11000
  * Register the `$event-bus` service on a broker. MUST be called BEFORE
@@ -11072,7 +11020,6 @@ function registerEventBusService(broker) {
11072
11020
  if (eventBusServiceInstalled.has(broker)) return;
11073
11021
  eventBusServiceInstalled.add(broker);
11074
11022
  const bkr = broker;
11075
- const fanoutMode = readMoleculerFanoutMode();
11076
11023
  try {
11077
11024
  bkr.createService({
11078
11025
  name: "$event-bus",
@@ -11080,7 +11027,7 @@ function registerEventBusService(broker) {
11080
11027
  const event = ctx.params;
11081
11028
  if (!event) return;
11082
11029
  if (event.sourceNodeId === bkr.nodeID) return;
11083
- if (!acceptInboundCrossNode(broker, fanoutMode, event.category)) return;
11030
+ if (!acceptInboundCrossNode(broker, event.category)) return;
11084
11031
  deliverShared(getSharedBusState(broker), event);
11085
11032
  } }
11086
11033
  });
@@ -13646,12 +13593,6 @@ Object.defineProperty(exports, "readHeapSpaces", {
13646
13593
  return readHeapSpaces;
13647
13594
  }
13648
13595
  });
13649
- Object.defineProperty(exports, "readMoleculerFanoutMode", {
13650
- enumerable: true,
13651
- get: function() {
13652
- return readMoleculerFanoutMode;
13653
- }
13654
- });
13655
13596
  Object.defineProperty(exports, "readSocketQueues", {
13656
13597
  enumerable: true,
13657
13598
  get: function() {
@@ -1,4 +1,4 @@
1
- import { Un as compositionSourceKey, Xn as errMsg } from "./dist-DVyXxn41.mjs";
1
+ import { Wn as compositionSourceKey, Zn as errMsg } from "./dist-B7WRgEZY.mjs";
2
2
  //#region src/builtins/core-blocks/composition-sources.ts
3
3
  /**
4
4
  * Describe what a composition reads and writes for SAVE-time validation
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-DePB7uwU.js");
1
+ const require_dist = require("./dist-CFVOy8VT.js");
2
2
  //#region src/builtins/core-blocks/composition-sources.ts
3
3
  /**
4
4
  * Describe what a composition reads and writes for SAVE-time validation
@@ -7867,6 +7867,57 @@ var ClipSearchStrictnessSchema = z.enum([
7867
7867
  "balanced",
7868
7868
  "strict"
7869
7869
  ]);
7870
+ new Set([
7871
+ {
7872
+ id: "person",
7873
+ name: "Person"
7874
+ },
7875
+ {
7876
+ id: "vehicle",
7877
+ name: "Vehicle"
7878
+ },
7879
+ {
7880
+ id: "animal",
7881
+ name: "Animal"
7882
+ },
7883
+ {
7884
+ id: "package",
7885
+ name: "Package"
7886
+ }
7887
+ ].map((l) => l.id));
7888
+ var COCO_TO_MACRO = {
7889
+ mapping: {
7890
+ person: "person",
7891
+ bicycle: "vehicle",
7892
+ car: "vehicle",
7893
+ motorcycle: "vehicle",
7894
+ airplane: "vehicle",
7895
+ bus: "vehicle",
7896
+ train: "vehicle",
7897
+ truck: "vehicle",
7898
+ boat: "vehicle",
7899
+ bird: "animal",
7900
+ cat: "animal",
7901
+ dog: "animal",
7902
+ horse: "animal",
7903
+ sheep: "animal",
7904
+ cow: "animal",
7905
+ elephant: "animal",
7906
+ bear: "animal",
7907
+ zebra: "animal",
7908
+ giraffe: "animal",
7909
+ suitcase: "package",
7910
+ backpack: "package",
7911
+ handbag: "package"
7912
+ },
7913
+ preserveOriginal: false
7914
+ };
7915
+ /** Steps a root detector may declare it fills. */
7916
+ var FILLABLE_STEP_IDS = [
7917
+ "animal-classifier",
7918
+ "vehicle-classifier",
7919
+ "package-detection"
7920
+ ];
7870
7921
  var MODEL_FORMATS = [
7871
7922
  "onnx",
7872
7923
  "coreml",
@@ -8000,6 +8051,12 @@ var ModelLicenseRecordSchema = z.object({
8000
8051
  * `camstack/docs` → `/docs/detection/models`.
8001
8052
  */
8002
8053
  var ModelLicenseSchema = z.preprocess((value) => typeof value === "string" ? { weights: value } : value, ModelLicenseRecordSchema);
8054
+ /** One `fillsClassifierEffects` entry — see `ModelCatalogEntry.fillsClassifierEffects`. */
8055
+ var FillsClassifierEffectSchema = z.object({
8056
+ stepId: z.enum(FILLABLE_STEP_IDS),
8057
+ labelToEffect: z.record(z.string(), z.string()),
8058
+ uncovered: z.array(z.string()).readonly()
8059
+ });
8003
8060
  var ModelCatalogEntrySchema = z.object({
8004
8061
  id: z.string(),
8005
8062
  name: z.string(),
@@ -8126,6 +8183,16 @@ var ModelCatalogEntrySchema = z.object({
8126
8183
  */
8127
8184
  classMap: DetectionCatalogClassMapSchema.optional(),
8128
8185
  /**
8186
+ * The pipeline steps this ROOT detector already does the work of (D715):
8187
+ * its labels name the effect the step exists to produce (`deer` for
8188
+ * `animal-classifier`, `package` for `package-detection`). Derived from the
8189
+ * labelmap by `deriveClassifierFills`, never hand-written; a COCO model
8190
+ * declares none. Whether a declaration is honoured is the step's own
8191
+ * `labelLink` policy (`resolveLabelLink`). `labelToEffect` values are in
8192
+ * `FILLABLE_STEP_VOCABULARIES` (guard `check-label-link-vocabulary`).
8193
+ */
8194
+ fillsClassifierEffects: z.array(FillsClassifierEffectSchema).readonly().optional(),
8195
+ /**
8129
8196
  * The model's CLIP feature-space contract (text encoder, dimension, vector
8130
8197
  * index, token window, search floor) — see `clip-model.ts`. Present ONLY on a
8131
8198
  * CLIP image encoder; its absence is what "not a CLIP model" means to the
@@ -19213,51 +19280,6 @@ var notificationOutputCapability = {
19213
19280
  })
19214
19281
  }
19215
19282
  };
19216
- new Set([
19217
- {
19218
- id: "person",
19219
- name: "Person"
19220
- },
19221
- {
19222
- id: "vehicle",
19223
- name: "Vehicle"
19224
- },
19225
- {
19226
- id: "animal",
19227
- name: "Animal"
19228
- },
19229
- {
19230
- id: "package",
19231
- name: "Package"
19232
- }
19233
- ].map((l) => l.id));
19234
- var COCO_TO_MACRO = {
19235
- mapping: {
19236
- person: "person",
19237
- bicycle: "vehicle",
19238
- car: "vehicle",
19239
- motorcycle: "vehicle",
19240
- airplane: "vehicle",
19241
- bus: "vehicle",
19242
- train: "vehicle",
19243
- truck: "vehicle",
19244
- boat: "vehicle",
19245
- bird: "animal",
19246
- cat: "animal",
19247
- dog: "animal",
19248
- horse: "animal",
19249
- sheep: "animal",
19250
- cow: "animal",
19251
- elephant: "animal",
19252
- bear: "animal",
19253
- zebra: "animal",
19254
- giraffe: "animal",
19255
- suitcase: "package",
19256
- backpack: "package",
19257
- handbag: "package"
19258
- },
19259
- preserveOriginal: false
19260
- };
19261
19283
  var AUDIO_MACRO_LABELS = [
19262
19284
  {
19263
19285
  id: "speech",
@@ -20055,6 +20077,8 @@ var NcSystemEventKindSchema = z.enum([
20055
20077
  "stream-offline",
20056
20078
  "node-online",
20057
20079
  "node-offline",
20080
+ "node-restarting",
20081
+ "node-updating",
20058
20082
  "node-inference-unavailable",
20059
20083
  "detection-blind",
20060
20084
  "addon-crash-loop",
@@ -25619,7 +25643,8 @@ var PipelineModelOptionSchema = z.object({
25619
25643
  group: ModelVariantGroupSchema.optional(),
25620
25644
  legacy: z.boolean().optional(),
25621
25645
  provider: ModelProviderIdSchema.optional(),
25622
- defaultConfidence: z.number().optional()
25646
+ defaultConfidence: z.number().optional(),
25647
+ fillsClassifierEffects: z.array(FillsClassifierEffectSchema).readonly().optional()
25623
25648
  });
25624
25649
  var ConfigFieldBridge = z.custom();
25625
25650
  var PipelineAddonSchemaSchema = z.object({
@@ -37123,7 +37148,8 @@ var MotionStatusSchema = z.object({
37123
37148
  * writes this slice (not even a boot seed), and neither does the runner's
37124
37149
  * phase machine: its phase is "a session is attached" for every on-motion
37125
37150
  * session, not motion, and it now has its own `DetectionPhaseTransition`.
37126
- * A provider's `isDetected` answers from the hub's slice.
37151
+ * A provider's `isDetected` and `getStatus` answer from the hub's slice
37152
+ * (`hubMotionNativeProvider`).
37127
37153
  * - **Sensors** (Home Assistant binary sensors, Homematic, Matter, Alexa
37128
37154
  * imports) — the provider pushes both edges itself, from the upstream
37129
37155
  * system's own state change. That is the sensor's own fact.
@@ -45320,7 +45346,8 @@ function expressionOutcome(source, read, now, stateful) {
45320
45346
  value: null,
45321
45347
  reason: `the expression failed: ${result.error}`,
45322
45348
  fatal: false,
45323
- confirmed: true
45349
+ confirmed: true,
45350
+ expressionFailed: true
45324
45351
  };
45325
45352
  return {
45326
45353
  state: staleReasons.length > 0 ? "stale" : "fresh",
@@ -58641,6 +58668,8 @@ new Map(Object.entries({
58641
58668
  "detection-blind": "device-events",
58642
58669
  "node-online": "system",
58643
58670
  "node-offline": "system",
58671
+ "node-restarting": "system",
58672
+ "node-updating": "system",
58644
58673
  "node-inference-unavailable": "system",
58645
58674
  "addon-crash-loop": "system",
58646
58675
  "addon-update-available": "system",
@@ -58718,6 +58747,7 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
58718
58747
  kinds: [
58719
58748
  "node-offline",
58720
58749
  "node-online",
58750
+ "node-restarting",
58721
58751
  "node-inference-unavailable"
58722
58752
  ]
58723
58753
  },
@@ -58739,6 +58769,7 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
58739
58769
  label: "Server & container updates",
58740
58770
  kinds: [
58741
58771
  "server-update-available",
58772
+ "node-updating",
58742
58773
  "server-updated",
58743
58774
  "wrapper-update-available"
58744
58775
  ]
@@ -58886,6 +58917,7 @@ var STATE_SUMMARY_SECTION_VARS = [
58886
58917
  kinds: [
58887
58918
  "node-offline",
58888
58919
  "node-online",
58920
+ "node-restarting",
58889
58921
  "node-inference-unavailable"
58890
58922
  ]
58891
58923
  },
@@ -58907,6 +58939,7 @@ var STATE_SUMMARY_SECTION_VARS = [
58907
58939
  example: "server 1.2.377 → 1.2.378",
58908
58940
  kinds: [
58909
58941
  "server-update-available",
58942
+ "node-updating",
58910
58943
  "server-updated",
58911
58944
  "wrapper-update-available"
58912
58945
  ]
@@ -59709,4 +59742,4 @@ function enumerateInferenceDevices(hw) {
59709
59742
  return out;
59710
59743
  }
59711
59744
  //#endregion
59712
- export { calendarsCapability as $, DEVICE_SETTINGS_CONTRIBUTION_METHODS as $n, normalizeCoreBlockWrite as $t, MOTION_CLOSE_AFTER_MS as A, validateComposition as An, foldSnapshotByFunction as At, StorageLocationTypeSchema as B, compositionFeatureEnabled as Bn, legacyModeOf as Bt, FieldClaimModeSchema as C, storageCapability as Cn, enumerateItemArrayFields as Ct, LocationIconIdSchema as D, streamCatalogCapability as Dn, expandContainer as Dt, LegacyStorageLocationDefaultSchema as E, storageProviderCapability as En, evictionPolicyOfLocation as Et, STORAGE_ACCESS_FALLBACK as F, COMPOSER_ADDON_ID as Fn, isLocationEnabled as Ft, addonWidgetsCapability as G, disarmRoseMemory as Gn, logLevelAtMost as Gt, UserRecordSchema as H, compositionSliceKey as Hn, localNetworkCapability as Ht, STREAM_PROFILE_META as I, buildFfmpegArgs as In, isObjectInput as It, backupCapability as J, DeviceRole as Jn, mayWriteToLocation as Jt, alertsCapability as K, toExpressionValue as Kn, looseSchema as Kt, ScopedTokenSchema as L, cloneStatefulExpressionMemory as Ln, isVoidInput as Lt, REDACTED_SECRET as M, vectorIndexDimConflictError as Mn, gbToBytes as Mt, RUNTIME_DEFAULTS as N, vectorStoreCapability as Nn, isArrayOutputSchema as Nt, METHOD_ACCESS_MAP as O, streamQualityLabel as On, extractNestedAddonId as Ot, RecordingStatusSchema as P, withLocationMode as Pn, isCollectionArrayMethod as Pt, buildStreamParamsConfigSchema as Q, DATAPLANE_SECRET_HEADER as Qn, motionCapability as Qt, StorageCleanupJobSchema as R, composedDeviceRef as Rn, kebabToCamel as Rt, FIRST_LEVEL_MACRO_CLASSES as S, snapshotCapability as Sn, EventCategory as Sr, enumerateInferenceDevices as St, LOG_LEVEL_RANK as T, storageOccupancyCapability as Tn, evaluateCompositionField as Tt, addonPagesCapability as U, compositionSourceKey as Un, locationIconKey as Ut, StorageMigrationJobSchema as V, compositionItemFieldPath as Vn, lifecycleJobSchema as Vt, addonSettingsCapability as W, createStatefulExpressionMemory as Wn, logDestinationCapability as Wt, batteryCapability as X, errMsg as Xn, metricsProviderCapability as Xt, bareAddonId as Y, DeviceType as Yn, memoizePinnedFfmpeg as Yt, buildCapabilityLookup as Z, BaseAddon as Zn, modeMayWrite as Zt, DATABASE_SNAPSHOT_TIMEOUT_MS as _, scopesAllowAddon as _n, readinessKey as _r, describeComposableCaps as _t, BatteryStatusSchema as a, planComposition as an, asNumber as ar, coreBlockAddonId as at, DeclaredDevices as b, settingsStoreCapability as bn, sleep as br, deviceStateCapability as bt, CAP_NAMES_WITH_STATUS as c, ptzAutotrackCapability as cn, emitDownForOwnedCaps as cr, coreBlockSourceKind as ct, CORE_BLOCKS_ADDON_ID as d, resolveBucketMs as dn, hydrateSchema as dr, dataStoreProviderCapability as dt, normalizeUnit as en, DEVICE_STATUS_METHOD as er, cameraGridLayoutCapability as et, CORE_BLOCK_ADDON_PREFIX as f, resolveCoreBlockEntry as fn, isDeviceConfigCap as fr, databaseSnapshotCapability as ft, DATABASE_SNAPSHOT_SUFFIX as g, runtimeStatePolicyFor as gn, parseJsonUnknown as gr, deriveBatteryPresence as gt, DATABASE_SNAPSHOT_PARTIAL_SUFFIX as h, resolveMethodAuth as hn, parseJsonObject as hr, defineExtensionSlotProvider as ht, BaseDevice as i, pickAppLinkHub as in, asJsonObject as ir, compositionSourceRefs as it, RECORDING_SOURCE_CAMSTACK_ADDON as j, vectorDimFromBase64 as jn, formatMinutes as jt, MINUTES_PER_DAY as k, userManagementCapability as kn, filesystemBrowseCapability as kt, COMPOSED_ITEM_FIXED_FIELDS as l, reducePoints as ln, emitReadiness as lr, coreBlocksCapability as lt, CoreBlockSchema as m, resolveLocationMode as mn, nodePin as mr, decodeVectorBase64 as mt, AlertSchema as n, objectInputDeclaresRequiredDeviceId as nn, ReadinessTimeoutError as nr, composerCapability as nt, CAMERA_SWITCH_ORDER as o, platformProbeCapability as on, asString$1 as or, coreBlockComposition as ot, CalendarPreferencesSchema as p, resolveCoreBlockFiles as pn, isEvent as pr, declarationOwnerNodeId as pt, authProviderCapability as q, DeviceFeature as qn, mayReadLocation as qt, ApiKeyRecordSchema as r, parseStreamParamsFormPatch as rn, WELL_KNOWN_TAB_MAP as rr, compositionFieldKey as rt, CAMSTACK_APP_LINK_ORIGIN as s, procedureAuthKey as sn, createEvent as sr, coreBlockIdFromAddonId as st, ALL_CAPABILITY_DEFINITIONS as t, objectInputDeclaresAddonId as tn, ReadinessRegistry as tr, collectSecretConfigKeys as tt, COMPOSER_RUNNER_ID as u, replacedFieldKeys as un, expandCapMethods as ur, createDeviceExtensionProvider as ut, DAY_NAMES as v, scopesAllowDeviceCap as vn, resolveCapMount as vr, deviceExtensionCapability as vt, FieldClaimSchema as w, storageMigrationCapability as wn, enumerateSchemaFields as wt, DeviceStatusSchema as x, siteZoneKey as xn, toNodeId as xr, deviceStatusCapability as xt, DERIVED_CAMERA_SILENCED_CAP_NAMES as y, scoreRuntimes as yn, scopeKey as yr, deviceManagerCapability as yt, StorageLocationModeSchema as z, composedDeviceStableId as zn, legacyAutoLinkIds as zt };
59745
+ export { calendarsCapability as $, DATAPLANE_SECRET_HEADER as $n, motionCapability as $t, MOTION_CLOSE_AFTER_MS as A, userManagementCapability as An, filesystemBrowseCapability as At, StorageLocationTypeSchema as B, composedDeviceStableId as Bn, legacyAutoLinkIds as Bt, FieldClaimModeSchema as C, snapshotCapability as Cn, EventCategory as Cr, enumerateItemArrayFields as Ct, LocationIconIdSchema as D, storageProviderCapability as Dn, expandContainer as Dt, LegacyStorageLocationDefaultSchema as E, storageOccupancyCapability as En, evictionPolicyOfLocation as Et, STORAGE_ACCESS_FALLBACK as F, withLocationMode as Fn, isCollectionArrayMethod as Ft, addonWidgetsCapability as G, createStatefulExpressionMemory as Gn, logDestinationCapability as Gt, UserRecordSchema as H, compositionItemFieldPath as Hn, lifecycleJobSchema as Ht, STREAM_PROFILE_META as I, COMPOSER_ADDON_ID as In, isLocationEnabled as It, backupCapability as J, DeviceFeature as Jn, mayReadLocation as Jt, alertsCapability as K, disarmRoseMemory as Kn, logLevelAtMost as Kt, ScopedTokenSchema as L, buildFfmpegArgs as Ln, isObjectInput as Lt, REDACTED_SECRET as M, vectorDimFromBase64 as Mn, formatMinutes as Mt, RUNTIME_DEFAULTS as N, vectorIndexDimConflictError as Nn, gbToBytes as Nt, METHOD_ACCESS_MAP as O, streamCatalogCapability as On, expressionContainsBuiltinCall as Ot, RecordingStatusSchema as P, vectorStoreCapability as Pn, isArrayOutputSchema as Pt, buildStreamParamsConfigSchema as Q, BaseAddon as Qn, modeMayWrite as Qt, StorageCleanupJobSchema as R, cloneStatefulExpressionMemory as Rn, isVoidInput as Rt, FIRST_LEVEL_MACRO_CLASSES as S, siteZoneKey as Sn, toNodeId as Sr, enumerateInferenceDevices as St, LOG_LEVEL_RANK as T, storageMigrationCapability as Tn, evaluateCompositionField as Tt, addonPagesCapability as U, compositionSliceKey as Un, localNetworkCapability as Ut, StorageMigrationJobSchema as V, compositionFeatureEnabled as Vn, legacyModeOf as Vt, addonSettingsCapability as W, compositionSourceKey as Wn, locationIconKey as Wt, batteryCapability as X, DeviceType as Xn, memoizePinnedFfmpeg as Xt, bareAddonId as Y, DeviceRole as Yn, mayWriteToLocation as Yt, buildCapabilityLookup as Z, errMsg as Zn, metricsProviderCapability as Zt, DATABASE_SNAPSHOT_TIMEOUT_MS as _, runtimeStatePolicyFor as _n, parseJsonUnknown as _r, describeComposableCaps as _t, BatteryStatusSchema as a, pickAppLinkHub as an, asJsonObject as ar, coreBlockAddonId as at, DeclaredDevices as b, scoreRuntimes as bn, scopeKey as br, deviceStateCapability as bt, CAP_NAMES_WITH_STATUS as c, procedureAuthKey as cn, createEvent as cr, coreBlockSourceKind as ct, CORE_BLOCKS_ADDON_ID as d, replacedFieldKeys as dn, expandCapMethods as dr, dataStoreProviderCapability as dt, normalizeCoreBlockWrite as en, DEVICE_SETTINGS_CONTRIBUTION_METHODS as er, cameraGridLayoutCapability as et, CORE_BLOCK_ADDON_PREFIX as f, resolveBucketMs as fn, hydrateSchema as fr, databaseSnapshotCapability as ft, DATABASE_SNAPSHOT_SUFFIX as g, resolveMethodAuth as gn, parseJsonObject as gr, deriveBatteryPresence as gt, DATABASE_SNAPSHOT_PARTIAL_SUFFIX as h, resolveLocationMode as hn, nodePin as hr, defineExtensionSlotProvider as ht, BaseDevice as i, parseStreamParamsFormPatch as in, WELL_KNOWN_TAB_MAP as ir, compositionSourceRefs as it, RECORDING_SOURCE_CAMSTACK_ADDON as j, validateComposition as jn, foldSnapshotByFunction as jt, MINUTES_PER_DAY as k, streamQualityLabel as kn, extractNestedAddonId as kt, COMPOSED_ITEM_FIXED_FIELDS as l, ptzAutotrackCapability as ln, emitDownForOwnedCaps as lr, coreBlocksCapability as lt, CoreBlockSchema as m, resolveCoreBlockFiles as mn, isEvent as mr, decodeVectorBase64 as mt, AlertSchema as n, objectInputDeclaresAddonId as nn, ReadinessRegistry as nr, composerCapability as nt, CAMERA_SWITCH_ORDER as o, planComposition as on, asNumber as or, coreBlockComposition as ot, CalendarPreferencesSchema as p, resolveCoreBlockEntry as pn, isDeviceConfigCap as pr, declarationOwnerNodeId as pt, authProviderCapability as q, toExpressionValue as qn, looseSchema as qt, ApiKeyRecordSchema as r, objectInputDeclaresRequiredDeviceId as rn, ReadinessTimeoutError as rr, compositionFieldKey as rt, CAMSTACK_APP_LINK_ORIGIN as s, platformProbeCapability as sn, asString$1 as sr, coreBlockIdFromAddonId as st, ALL_CAPABILITY_DEFINITIONS as t, normalizeUnit as tn, DEVICE_STATUS_METHOD as tr, collectSecretConfigKeys as tt, COMPOSER_RUNNER_ID as u, reducePoints as un, emitReadiness as ur, createDeviceExtensionProvider as ut, DAY_NAMES as v, scopesAllowAddon as vn, readinessKey as vr, deviceExtensionCapability as vt, FieldClaimSchema as w, storageCapability as wn, enumerateSchemaFields as wt, DeviceStatusSchema as x, settingsStoreCapability as xn, sleep as xr, deviceStatusCapability as xt, DERIVED_CAMERA_SILENCED_CAP_NAMES as y, scopesAllowDeviceCap as yn, resolveCapMount as yr, deviceManagerCapability as yt, StorageLocationModeSchema as z, composedDeviceRef as zn, kebabToCamel as zt };