@camstack/addon-pipeline 1.2.368 → 1.2.370

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 (35) hide show
  1. package/dist/audio-analyzer/index.js +3 -3
  2. package/dist/audio-analyzer/index.mjs +3 -3
  3. package/dist/{custom-model-catalog-BY-aEI2s.js → custom-model-catalog-BFosahFu.js} +2 -2
  4. package/dist/{custom-model-catalog-Bnel86hH.mjs → custom-model-catalog-CVbK0xKc.mjs} +2 -2
  5. package/dist/detection-pipeline/index.js +4 -4
  6. package/dist/detection-pipeline/index.mjs +4 -4
  7. package/dist/{dist-5AhGOWWu.mjs → dist-CbFPOFAD.mjs} +407 -14
  8. package/dist/{dist-DDXsZaRH.js → dist-jkwxbcbK.js} +407 -14
  9. package/dist/{model-catalogs-DWR9EsGI.mjs → model-catalogs-DJmwfLfC.mjs} +1 -1
  10. package/dist/{model-catalogs-DJN58c_U.js → model-catalogs-Ds2hC2Br.js} +1 -1
  11. package/dist/motion-wasm/index.js +1 -1
  12. package/dist/motion-wasm/index.mjs +1 -1
  13. package/dist/{node-DqZJFOzR.mjs → node-C-2fB9kH.mjs} +1 -1
  14. package/dist/{node-CiciZWts.js → node-C_1U1uzn.js} +1 -1
  15. package/dist/pipeline-runner/index.js +3 -3
  16. package/dist/pipeline-runner/index.mjs +3 -3
  17. package/dist/{process-memory-Batknjjt.mjs → process-memory-B3I-NvnX.mjs} +1 -1
  18. package/dist/{process-memory-BRu19Dgr.js → process-memory-Cfh1BQYg.js} +1 -1
  19. package/dist/recorder/index.js +12 -2
  20. package/dist/recorder/index.mjs +12 -2
  21. package/dist/{segment-demux-js-dlhO3Q8W.mjs → segment-demux-js-D3JBJeN6.mjs} +1 -1
  22. package/dist/{segment-demux-js-0CRf7GAb.js → segment-demux-js-uxBcJy15.js} +1 -1
  23. package/dist/stream-broker/_stub.js +2 -2
  24. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-CSajlHKC.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-DwwDKaZJ.mjs} +2 -2
  25. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Bna0L8uC.mjs +26 -0
  26. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BAvXcDKy.mjs +26 -0
  27. package/dist/stream-broker/demux-worker-child.js +1 -1
  28. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  29. package/dist/stream-broker/{hostInit-KJ1eka58.mjs → hostInit-DVwYY7oo.mjs} +2 -2
  30. package/dist/stream-broker/index.js +302 -90
  31. package/dist/stream-broker/index.mjs +302 -90
  32. package/dist/stream-broker/remoteEntry.js +1 -1
  33. package/package.json +1 -1
  34. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BfVREmhg.mjs +0 -26
  35. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-5KL24-a_.mjs +0 -26
@@ -3,9 +3,9 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-DDXsZaRH.js");
7
- const require_model_catalogs = require("../model-catalogs-DJN58c_U.js");
8
- const require_process_memory = require("../process-memory-BRu19Dgr.js");
6
+ const require_dist = require("../dist-jkwxbcbK.js");
7
+ const require_model_catalogs = require("../model-catalogs-Ds2hC2Br.js");
8
+ const require_process_memory = require("../process-memory-Cfh1BQYg.js");
9
9
  let node_fs = require("node:fs");
10
10
  node_fs = require_chunk.__toESM(node_fs);
11
11
  let node_path = require("node:path");
@@ -1,7 +1,7 @@
1
1
  import { n as __require } from "../chunk-DnnnRqeS.mjs";
2
- import { An as BaseAddon, F as PoolMemoryWatchdog, Fn as audioChunkBytesPerSample, Ft as mapAudioLabelToMacro, Kn as nodePin, On as errMsg, Q as audioAnalyzerCapability, Vn as hydrateSchema, Z as audioAnalysisCapability, cr as EventCategory, h as DEFAULT_AUDIO_ANALYZER_CONFIG, on as resolvePoolMemoryPolicy, r as AUDIO_BACKEND_CHOICES, zn as expandAudioChunkToF32le } from "../dist-5AhGOWWu.mjs";
3
- import { n as AUDIO_CLASSIFIER_MODELS } from "../model-catalogs-DWR9EsGI.mjs";
4
- import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-Batknjjt.mjs";
2
+ import { An as BaseAddon, F as PoolMemoryWatchdog, Fn as audioChunkBytesPerSample, Ft as mapAudioLabelToMacro, Kn as nodePin, On as errMsg, Q as audioAnalyzerCapability, Vn as hydrateSchema, Z as audioAnalysisCapability, cr as EventCategory, h as DEFAULT_AUDIO_ANALYZER_CONFIG, on as resolvePoolMemoryPolicy, r as AUDIO_BACKEND_CHOICES, zn as expandAudioChunkToF32le } from "../dist-CbFPOFAD.mjs";
3
+ import { n as AUDIO_CLASSIFIER_MODELS } from "../model-catalogs-DJmwfLfC.mjs";
4
+ import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-B3I-NvnX.mjs";
5
5
  import * as fs from "node:fs";
6
6
  import * as path$1 from "node:path";
7
7
  import { ensureModel } from "@camstack/system/addon-utils";
@@ -1,5 +1,5 @@
1
- const require_dist = require("./dist-DDXsZaRH.js");
2
- const require_model_catalogs = require("./model-catalogs-DJN58c_U.js");
1
+ const require_dist = require("./dist-jkwxbcbK.js");
2
+ const require_model_catalogs = require("./model-catalogs-Ds2hC2Br.js");
3
3
  const require_worker_protocol = require("./worker-protocol-C-G8qmye.js");
4
4
  let node_crypto = require("node:crypto");
5
5
  //#region src/detection-pipeline/registry/effective-confidence.ts
@@ -1,5 +1,5 @@
1
- import { $ as audioKindId, b as DEVICE_BACKEND_TO_FORMAT, dn as stepModelRunsOnFormat, f as COCO_80_LABELS, i as AUDIO_MACRO_LABELS, k as LABEL_SUPPLY_VOCABULARIES, kt as inferModelProvider, p as COCO_TO_MACRO } from "./dist-5AhGOWWu.mjs";
2
- import { a as FACE_DETECTION_MODELS, c as OBJECT_DETECTION_MODELS, d as PLATE_OCR_MODELS, f as SEGMENTATION_REFINER_MODELS, i as CLIP_EMBEDDING_MODELS, l as PACKAGE_DETECTION_MODELS, n as AUDIO_CLASSIFIER_MODELS, o as FACE_EMBEDDING_MODELS, p as VEHICLE_CLASSIFIER_MODELS, r as BIRD_CLASSIFIER_MODELS, s as INSTANCE_SEGMENTATION_MODELS, t as ANIMAL_CLASSIFIER_MODELS, u as PLATE_DETECTION_MODELS } from "./model-catalogs-DWR9EsGI.mjs";
1
+ import { $ as audioKindId, b as DEVICE_BACKEND_TO_FORMAT, dn as stepModelRunsOnFormat, f as COCO_80_LABELS, i as AUDIO_MACRO_LABELS, k as LABEL_SUPPLY_VOCABULARIES, kt as inferModelProvider, p as COCO_TO_MACRO } from "./dist-CbFPOFAD.mjs";
2
+ import { a as FACE_DETECTION_MODELS, c as OBJECT_DETECTION_MODELS, d as PLATE_OCR_MODELS, f as SEGMENTATION_REFINER_MODELS, i as CLIP_EMBEDDING_MODELS, l as PACKAGE_DETECTION_MODELS, n as AUDIO_CLASSIFIER_MODELS, o as FACE_EMBEDDING_MODELS, p as VEHICLE_CLASSIFIER_MODELS, r as BIRD_CLASSIFIER_MODELS, s as INSTANCE_SEGMENTATION_MODELS, t as ANIMAL_CLASSIFIER_MODELS, u as PLATE_DETECTION_MODELS } from "./model-catalogs-DJmwfLfC.mjs";
3
3
  import { t as isWorkerReply } from "./worker-protocol-D_NzPcnh.mjs";
4
4
  import { randomUUID } from "node:crypto";
5
5
  //#region src/detection-pipeline/registry/effective-confidence.ts
@@ -3,11 +3,11 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-DDXsZaRH.js");
7
- const require_node = require("../node-CiciZWts.js");
8
- const require_custom_model_catalog = require("../custom-model-catalog-BY-aEI2s.js");
6
+ const require_dist = require("../dist-jkwxbcbK.js");
7
+ const require_node = require("../node-C_1U1uzn.js");
8
+ const require_custom_model_catalog = require("../custom-model-catalog-BFosahFu.js");
9
9
  const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
10
- const require_process_memory = require("../process-memory-BRu19Dgr.js");
10
+ const require_process_memory = require("../process-memory-Cfh1BQYg.js");
11
11
  let node_os = require("node:os");
12
12
  node_os = require_chunk.__toESM(node_os);
13
13
  let node_fs = require("node:fs");
@@ -1,9 +1,9 @@
1
1
  import { n as __require } from "../chunk-DnnnRqeS.mjs";
2
- import { An as BaseAddon, Bn as hfModelUrl, F as PoolMemoryWatchdog, Gt as pickClusterStepSettings, In as createEvent, Jt as pipelineExecutorCapability, Kn as nodePin, Nt as loadContributionCapability, O as LABEL_SUPPLY_MACRO, On as errMsg$1, Ut as overlayClusterStepSettings, Vn as hydrateSchema, Vt as modelBindingKey, X as applyModelBoundSettings, Yn as sleep, Zn as array, bt as evaluateZoneRules, cr as EventCategory, d as CLUSTER_MODEL_SCOPED_STEPS, dn as stepModelRunsOnFormat, dt as defaultDeviceFor$1, g as DEFAULT_CLUSTER_STEP_SETTINGS, gn as supportedRuntimes$1, gt as detectionPipelineCapability, jt as linkedLabelStepId, ln as rootSuppliesOf, n as APPLE_SA_TO_MACRO, on as resolvePoolMemoryPolicy, or as string, ot as collectModelBoundKeys, q as YAMNET_TO_MACRO, rr as object, sr as union, st as containingParentIndex, tn as resolveClusterStepModelId, un as runtimeDevices$1, yt as enumerateInferenceDevices } from "../dist-5AhGOWWu.mjs";
3
- import { s as readProcessCost } from "../node-DqZJFOzR.mjs";
4
- import { C as resolveModelDefaultConfidence, S as landmarkPrecisionVerdict, _ as ALL_STEPS, b as getStepDefinition, f as localFrameRegistry, g as ALL_PIPELINE_STEPS, l as resolveDefaultDetectionModel, n as mergeCustomModels, o as deviceKeyOf, r as buildSubtreeCanRun, s as resolveDeviceEngine, t as CustomModelCatalog, u as macroGateVerdict, v as getDefaultModelForFormat, x as resolveModelForFormat, y as getStep } from "../custom-model-catalog-Bnel86hH.mjs";
2
+ import { An as BaseAddon, Bn as hfModelUrl, F as PoolMemoryWatchdog, Gt as pickClusterStepSettings, In as createEvent, Jt as pipelineExecutorCapability, Kn as nodePin, Nt as loadContributionCapability, O as LABEL_SUPPLY_MACRO, On as errMsg$1, Ut as overlayClusterStepSettings, Vn as hydrateSchema, Vt as modelBindingKey, X as applyModelBoundSettings, Yn as sleep, Zn as array, bt as evaluateZoneRules, cr as EventCategory, d as CLUSTER_MODEL_SCOPED_STEPS, dn as stepModelRunsOnFormat, dt as defaultDeviceFor$1, g as DEFAULT_CLUSTER_STEP_SETTINGS, gn as supportedRuntimes$1, gt as detectionPipelineCapability, jt as linkedLabelStepId, ln as rootSuppliesOf, n as APPLE_SA_TO_MACRO, on as resolvePoolMemoryPolicy, or as string, ot as collectModelBoundKeys, q as YAMNET_TO_MACRO, rr as object, sr as union, st as containingParentIndex, tn as resolveClusterStepModelId, un as runtimeDevices$1, yt as enumerateInferenceDevices } from "../dist-CbFPOFAD.mjs";
3
+ import { s as readProcessCost } from "../node-C-2fB9kH.mjs";
4
+ import { C as resolveModelDefaultConfidence, S as landmarkPrecisionVerdict, _ as ALL_STEPS, b as getStepDefinition, f as localFrameRegistry, g as ALL_PIPELINE_STEPS, l as resolveDefaultDetectionModel, n as mergeCustomModels, o as deviceKeyOf, r as buildSubtreeCanRun, s as resolveDeviceEngine, t as CustomModelCatalog, u as macroGateVerdict, v as getDefaultModelForFormat, x as resolveModelForFormat, y as getStep } from "../custom-model-catalog-CVbK0xKc.mjs";
5
5
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
6
- import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-Batknjjt.mjs";
6
+ import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-B3I-NvnX.mjs";
7
7
  import * as os$1 from "node:os";
8
8
  import * as fs from "node:fs";
9
9
  import * as path$1 from "node:path";
@@ -5387,7 +5387,7 @@ var ZodIssueCode = {
5387
5387
  var ZodFirstPartyTypeKind;
5388
5388
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5389
5389
  //#endregion
5390
- //#region ../types/dist/sleep-BBF1iXUi.mjs
5390
+ //#region ../types/dist/sleep-DAX0-2v9.mjs
5391
5391
  /**
5392
5392
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5393
5393
  * window to float samples (D455).
@@ -8421,6 +8421,8 @@ var CREDENTIAL_PARAM_PATTERNS = [
8421
8421
  /^code$/i,
8422
8422
  /^state$/i,
8423
8423
  /^challenge$/i,
8424
+ /^code[_-]?challenge$/i,
8425
+ /^confirm$/i,
8424
8426
  /^link$/i
8425
8427
  ];
8426
8428
  function isCredentialParam(name) {
@@ -14652,6 +14654,13 @@ var ConvertResultSchema = object({
14652
14654
  files: array(string()).readonly()
14653
14655
  })).readonly()
14654
14656
  });
14657
+ _enum(["new-session", "step-up"]);
14658
+ _enum(["en", "it"]);
14659
+ /** How a native app starts one login method (D858), as `auth.listLoginMethods` reports it. */
14660
+ var AppLoginPathSchema = discriminatedUnion("kind", [object({ kind: literal("native") }), object({
14661
+ kind: literal("browser"),
14662
+ startPath: string().startsWith("/")
14663
+ })]);
14655
14664
  /**
14656
14665
  * Device certificates (D855) — the wire contract shared by the hub, the admin
14657
14666
  * UI and the native viewer.
@@ -14811,7 +14820,9 @@ object({
14811
14820
  signature: literal(DEVICE_CERT_SIGNATURE),
14812
14821
  messageVersion: literal(DEVICE_SIGNATURE_MESSAGE_VERSION),
14813
14822
  /** Which clients can execute it: a native app silently, a browser with a non-extractable WebCrypto key. */
14814
- clients: array(_enum(["native", "web"]))
14823
+ clients: array(_enum(["native", "web"])),
14824
+ /** The app executes it itself, silently (D858). */
14825
+ app: AppLoginPathSchema.nullable()
14815
14826
  });
14816
14827
  var ExpressionBindingSourceSchema = union([
14817
14828
  object({
@@ -18003,7 +18014,11 @@ var cameraStreamsCapability = {
18003
18014
  * See `RuntimeStateDurability`. Enforced by
18004
18015
  * `scripts/check-runtime-state-durability.ts`.
18005
18016
  */
18006
- durability: "session"
18017
+ durability: "session",
18018
+ /**
18019
+ * History (D850): none — `online` duplicates device-status.online (one authority); slot data is nested enum/string.
18020
+ */
18021
+ history: "none"
18007
18022
  };
18008
18023
  EventCategory.DoorbellOnPressed;
18009
18024
  var CompositionEventPlanSchema = object({
@@ -18836,6 +18851,208 @@ method(object({
18836
18851
  kind: "mutation",
18837
18852
  auth: "admin"
18838
18853
  }), method(object({}), array(KeychainSecretMetaSchema).readonly(), { auth: "admin" }), method(object({}), KeychainStateSchema, { auth: "admin" });
18854
+ /**
18855
+ * device-history — the ONE mechanism for numeric history (D850).
18856
+ *
18857
+ * A device value is recorded because its capability says so (the `history`
18858
+ * block of a `*.cap.ts`, captured hub-side from `DeviceStateChanged`); any
18859
+ * other series is DECLARED by the addon that produces it and fed with points
18860
+ * (`record`) or closed five-minute buckets (`recordBuckets`). Rollups 5m / 1h /
18861
+ * 1d are computed here and nowhere else. Storage is `history.db` (D851).
18862
+ *
18863
+ * Who the PRODUCER is: `declareSeries`, `record` and `recordBuckets` are owner
18864
+ * checked against the `callerAddonId` the transport stamps into a call that
18865
+ * crossed a process (never in an input schema, so a session cannot supply it).
18866
+ * A call with no stamp is refused `not-owner`. The methods are `admin` so a
18867
+ * non-admin session never reaches them; an addon's `ctx.api` call bypasses the
18868
+ * tier by design.
18869
+ */
18870
+ /** Whose history: a real device, or a cluster node (load, memory). */
18871
+ var DeviceHistorySubjectSchema = discriminatedUnion("kind", [object({
18872
+ kind: literal("device"),
18873
+ deviceId: number().int()
18874
+ }), object({
18875
+ kind: literal("node"),
18876
+ nodeId: string().min(1)
18877
+ })]);
18878
+ var DeviceHistoryKindSchema = _enum([
18879
+ "gauge",
18880
+ "counter",
18881
+ "boolean"
18882
+ ]);
18883
+ var DeviceHistoryResolutionSchema = _enum([
18884
+ "raw",
18885
+ "5m",
18886
+ "1h",
18887
+ "1d"
18888
+ ]);
18889
+ /** Why a producer's point or bucket was not stored. Counted, never silent (D391). */
18890
+ var DeviceHistoryRefusalReasonSchema = _enum([
18891
+ "undeclared",
18892
+ "not-owner",
18893
+ "opted-out",
18894
+ "not-a-real-device",
18895
+ "rate",
18896
+ "ingest-mismatch",
18897
+ "out-of-range"
18898
+ ]);
18899
+ var RefusalSchema = object({
18900
+ key: string(),
18901
+ reason: DeviceHistoryRefusalReasonSchema,
18902
+ count: number().int()
18903
+ });
18904
+ var IngestResultSchema = object({
18905
+ accepted: number().int(),
18906
+ refused: array(RefusalSchema).readonly()
18907
+ });
18908
+ var SeriesInfoSchema = object({
18909
+ key: string(),
18910
+ scope: string(),
18911
+ kind: DeviceHistoryKindSchema,
18912
+ /** `null` is unknown (a `unitFrom` series whose device does not state a unit right now), never a guess. */
18913
+ unit: string().nullable(),
18914
+ displayName: string(),
18915
+ source: _enum(["cap", "addon"]),
18916
+ firstTs: number(),
18917
+ lastTs: number()
18918
+ });
18919
+ var QueryPointSchema = object({
18920
+ /** Raw: the point's time. Rollup: the bucket start. */
18921
+ t: number(),
18922
+ samples: number().int(),
18923
+ /** `sum / samples`. */
18924
+ mean: number().nullable(),
18925
+ /** Time-weighted mean (`tw_sum / tw_ms`); `null` for bucket-ingested series. For a boolean: the fraction of time true. */
18926
+ twMean: number().nullable(),
18927
+ min: number(),
18928
+ max: number(),
18929
+ /** `null` is unknown, never zero (D393). */
18930
+ last: number().nullable()
18931
+ });
18932
+ var QuerySeriesSchema = object({
18933
+ scope: string(),
18934
+ /** The last point STRICTLY BEFORE `from` in the chosen tier, so a step chart can start at the held value. */
18935
+ before: object({
18936
+ t: number(),
18937
+ value: number().nullable()
18938
+ }).nullable(),
18939
+ points: array(QueryPointSchema).readonly()
18940
+ });
18941
+ /** The window part of a query, shared by the device and node forms. */
18942
+ var QueryWindowShape = {
18943
+ key: string(),
18944
+ scope: string().optional(),
18945
+ from: number(),
18946
+ to: number(),
18947
+ resolution: union([DeviceHistoryResolutionSchema, literal("auto")]).default("auto"),
18948
+ maxPoints: number().int().positive().max(5e3).default(1e3)
18949
+ };
18950
+ var QueryResultSchema = object({
18951
+ resolution: DeviceHistoryResolutionSchema,
18952
+ series: array(QuerySeriesSchema).readonly(),
18953
+ truncated: boolean()
18954
+ });
18955
+ var TierStatusSchema = object({
18956
+ tier: DeviceHistoryResolutionSchema,
18957
+ /** `null` until the first background count answered. */
18958
+ rows: number().int().nullable(),
18959
+ /** `rows` times a fixed per-row estimate — approximate, labelled so. */
18960
+ approxBytes: number().nullable(),
18961
+ countedAt: number().nullable()
18962
+ });
18963
+ /** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
18964
+ var DeviceHistoryStatusSchema = object({
18965
+ startedAt: number(),
18966
+ /** The store is declared, series loaded and the first reconcile has answered. */
18967
+ ready: boolean(),
18968
+ series: number().int(),
18969
+ metrics: number().int(),
18970
+ optedOutDevices: number().int(),
18971
+ tiers: array(TierStatusSchema).readonly(),
18972
+ capture: object({
18973
+ eventsSeen: number().int(),
18974
+ pointsEmitted: number().int(),
18975
+ pointsWritten: number().int(),
18976
+ pointsDropped: number().int(),
18977
+ bufferDepth: number().int(),
18978
+ trailingEmitted: number().int(),
18979
+ reconciledPoints: number().int(),
18980
+ reconcileRuns: number().int(),
18981
+ reconcileFailures: number().int(),
18982
+ lastReconcileAt: number().nullable(),
18983
+ lastFlushAt: number().nullable(),
18984
+ flushFailures: number().int(),
18985
+ skipped: record(string(), number().int())
18986
+ }),
18987
+ ingest: object({
18988
+ accepted: number().int(),
18989
+ refused: record(string(), number().int())
18990
+ }),
18991
+ rollup: object({
18992
+ last5mAt: number().nullable(),
18993
+ last1hAt: number().nullable(),
18994
+ last1dAt: number().nullable(),
18995
+ errors: number().int(),
18996
+ dirty5m: number().int(),
18997
+ dirty1h: number().int(),
18998
+ dirty1d: number().int()
18999
+ }),
19000
+ retention: object({
19001
+ lastRunAt: number().nullable(),
19002
+ deleted: record(string(), number().int()),
19003
+ purgedSeries: number().int()
19004
+ }),
19005
+ directory: object({
19006
+ devices: number().int(),
19007
+ lastRefreshAt: number().nullable()
19008
+ })
19009
+ });
19010
+ method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly()), method(object({ nodeId: string().min(1) }), array(SeriesInfoSchema).readonly(), { auth: "admin" }), method(object({
19011
+ deviceId: number().int(),
19012
+ ...QueryWindowShape
19013
+ }), QueryResultSchema), method(object({
19014
+ nodeId: string().min(1),
19015
+ ...QueryWindowShape
19016
+ }), QueryResultSchema, { auth: "admin" }), method(object({
19017
+ name: string().regex(/^[a-z0-9-]+$/),
19018
+ subjectKind: _enum(["device", "node"]),
19019
+ kind: DeviceHistoryKindSchema,
19020
+ unit: string().optional(),
19021
+ displayName: string().min(1),
19022
+ ingest: _enum(["points", "buckets"])
19023
+ }), object({ key: string() }), {
19024
+ kind: "mutation",
19025
+ auth: "admin"
19026
+ }), method(object({ points: array(object({
19027
+ key: string(),
19028
+ subject: DeviceHistorySubjectSchema,
19029
+ scope: string().default(""),
19030
+ ts: number(),
19031
+ value: number()
19032
+ })).max(5e3) }), IngestResultSchema, {
19033
+ kind: "mutation",
19034
+ auth: "admin"
19035
+ }), method(object({ buckets: array(object({
19036
+ key: string(),
19037
+ subject: DeviceHistorySubjectSchema,
19038
+ scope: string().default(""),
19039
+ bucketStart: number(),
19040
+ samples: number().int().positive(),
19041
+ sum: number(),
19042
+ min: number(),
19043
+ max: number(),
19044
+ last: number().nullable(),
19045
+ lastTs: number().nullable()
19046
+ })).max(5e3) }), IngestResultSchema, {
19047
+ kind: "mutation",
19048
+ auth: "admin"
19049
+ }), method(object({ deviceId: number().int() }), object({ enabled: boolean() })), method(object({
19050
+ deviceId: number().int(),
19051
+ enabled: boolean()
19052
+ }), object({ enabled: boolean() }), {
19053
+ kind: "mutation",
19054
+ auth: "admin"
19055
+ }), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" });
18839
19056
  var DeviceCaStatusSchema = discriminatedUnion("state", [
18840
19057
  object({ state: literal("absent") }),
18841
19058
  object({
@@ -18953,6 +19170,9 @@ method(object({}), object({
18953
19170
  }), {
18954
19171
  kind: "mutation",
18955
19172
  auth: "admin"
19173
+ }), method(object({}), object({ ok: literal(true) }), {
19174
+ kind: "mutation",
19175
+ auth: "admin"
18956
19176
  }), method(object({
18957
19177
  certPem: string().min(1),
18958
19178
  caCertPem: string().min(1),
@@ -41785,7 +42005,13 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
41785
42005
  * `beginExternalLink` offer exactly the redirect methods that set this,
41786
42006
  * whatever their id. Absent / false — a login button only.
41787
42007
  */
41788
- linkable: boolean().optional()
42008
+ linkable: boolean().optional(),
42009
+ /**
42010
+ * How a NATIVE app starts this method (D858): `{ kind: 'browser', startPath }`
42011
+ * when the route understands the app flow query (`app=1&code_challenge=…`),
42012
+ * `null`/absent when there is no app path - the app hides the method.
42013
+ */
42014
+ app: AppLoginPathSchema.nullable().optional()
41789
42015
  }),
41790
42016
  object({
41791
42017
  kind: literal("widget"),
@@ -41797,7 +42023,9 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
41797
42023
  bundle: string(),
41798
42024
  /** MF remote descriptor — `{ remoteName, exposedModule, componentKey }`. */
41799
42025
  remote: WidgetRemoteSchema,
41800
- stage: LoginStageEnum
42026
+ stage: LoginStageEnum,
42027
+ /** Widgets are web ceremonies: no native app path (D858). Absent reads as `null`. */
42028
+ app: AppLoginPathSchema.nullable().optional()
41801
42029
  }),
41802
42030
  object({
41803
42031
  kind: literal("passkey"),
@@ -41809,7 +42037,9 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
41809
42037
  /** Effective WebAuthn RP ID (`resolveRpID()`) — the shell gates visibility on it. */
41810
42038
  rpId: string(),
41811
42039
  /** Effective expected origin (`resolveOrigin()`), null when unconfigured. */
41812
- origin: string().nullable()
42040
+ origin: string().nullable(),
42041
+ /** Set by the hub for the primary arm; a second-factor passkey has no app path (D858). */
42042
+ app: AppLoginPathSchema.nullable().optional()
41813
42043
  })
41814
42044
  ]);
41815
42045
  method(_void(), array(LoginMethodContributionSchema).readonly());
@@ -42336,7 +42566,21 @@ var NetworkEndpointSchema = object({
42336
42566
  url: string(),
42337
42567
  hostname: string(),
42338
42568
  port: number(),
42339
- protocol: _enum(["http", "https"])
42569
+ protocol: _enum(["http", "https"]),
42570
+ /**
42571
+ * Whether this address survives a restart of its provider. `false` = it is
42572
+ * re-issued every time (a Quick tunnel's random `*.trycloudflare.com`); the
42573
+ * hub never selects such an address AUTOMATICALLY for a role (D860), though
42574
+ * it stays visible and an operator may still flag it. Absent = stable: every
42575
+ * provider except a Quick tunnel owns a name that does not change.
42576
+ */
42577
+ stable: boolean().optional()
42578
+ });
42579
+ object({
42580
+ url: string(),
42581
+ /** Mirrors {@link NetworkEndpointSchema} `stable`; absent = stable. */
42582
+ stable: boolean().optional(),
42583
+ updated: boolean().optional()
42340
42584
  });
42341
42585
  var NetworkAccessStatusSchema = object({
42342
42586
  connected: boolean(),
@@ -53140,7 +53384,22 @@ var SsoBridgeClaimsSchema = object({
53140
53384
  * request to present the matching cookie — a login bridge is useless in
53141
53385
  * any other browser.
53142
53386
  */
53143
- browserBinding: string().optional()
53387
+ browserBinding: string().optional(),
53388
+ /**
53389
+ * The native app that started this sign-in (D858): its PKCE challenge,
53390
+ * `state`, purpose and allow-listed return URL, copied from the server-side
53391
+ * pending OIDC state. A bridge carrying it is finished ONLY at
53392
+ * `/api/auth/sso/finish-app` (which mints a handoff code, never a web
53393
+ * session); `/api/auth/sso/finish` refuses it.
53394
+ */
53395
+ app: object({
53396
+ codeChallenge: string(),
53397
+ state: string(),
53398
+ purpose: _enum(["new-session", "step-up"]),
53399
+ redirect: string(),
53400
+ /** The page language the app asked for (D858); the confirm page speaks it. */
53401
+ lang: _enum(["en", "it"]).optional()
53402
+ }).optional()
53144
53403
  });
53145
53404
  method(object({
53146
53405
  claims: SsoBridgeClaimsSchema,
@@ -55760,7 +56019,12 @@ var SearchResultSchema = object({
55760
56019
  publishedAt: string(),
55761
56020
  author: string(),
55762
56021
  installed: boolean(),
55763
- installedVersion: string().optional()
56022
+ installedVersion: string().optional(),
56023
+ /**
56024
+ * Capability names the package's addons declare (from its published
56025
+ * manifest). `null` = the registry lookup failed — unknown, never `[]` (D393).
56026
+ */
56027
+ capabilities: array(string()).readonly().nullable()
55764
56028
  });
55765
56029
  var AutoUpdateSettingsSchema = object({
55766
56030
  channel: ChannelSchema,
@@ -55922,7 +56186,11 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
55922
56186
  }), method(object({ packageName: string().optional() }), PackageInstallationsSchema, { auth: "admin" }), method(_void(), ReloadPackagesResultSchema, {
55923
56187
  kind: "mutation",
55924
56188
  auth: "admin"
55925
- }), method(object({ query: string().optional() }), array(SearchResultSchema)), method(object({ nodeId: string().optional() }), array(PackageUpdateSchema).readonly(), { auth: "admin" }), method(object({
56189
+ }), method(object({
56190
+ query: string().optional(),
56191
+ /** Only packages whose addons declare this capability (unknown ones excluded). */
56192
+ capability: string().optional()
56193
+ }), array(SearchResultSchema)), method(object({ nodeId: string().optional() }), array(PackageUpdateSchema).readonly(), { auth: "admin" }), method(object({
55926
56194
  name: string().min(1),
55927
56195
  version: string().optional(),
55928
56196
  nodeId: string().optional()
@@ -56345,6 +56613,13 @@ onStatusChanged: { data: object({
56345
56613
  * `scripts/check-runtime-state-durability.ts`.
56346
56614
  */
56347
56615
  durability: "restored",
56616
+ /**
56617
+ * History (D850): recorded series. The generic capture replaces the `battery` series of `pipeline-analytics:stats-5m`.
56618
+ */
56619
+ history: { fields: { percentage: {
56620
+ kind: "gauge",
56621
+ unit: "%"
56622
+ } } },
56348
56623
  /** Clock fields: written, but excluded from the compare that decides
56349
56624
  * whether persisting is worth a SQLite commit. */
56350
56625
  volatileStateFields: ["lastUpdated"]
@@ -58412,7 +58687,13 @@ var ConnectionEndpointSchema = object({
58412
58687
  * calls so the client can sort even if the cap returns a new
58413
58688
  * ordering between polls.
58414
58689
  */
58415
- priority: number()
58690
+ priority: number(),
58691
+ /**
58692
+ * `false` = the address changes on its own (a Quick tunnel, re-issued on
58693
+ * every respawn). Automatic role resolution skips it (D860); an explicit
58694
+ * operator flag still honours it. Absent = stable.
58695
+ */
58696
+ stable: boolean().optional()
58416
58697
  });
58417
58698
  /**
58418
58699
  * Where the advertised local port came from. Ordered most → least
@@ -59041,7 +59322,7 @@ var MotionOnMotionChangedDataSchema = object({
59041
59322
  /** Who started it (D672). Absent = the camera itself. Only `onboard` carries `sensor`. */
59042
59323
  triggeredBy: MotionTriggeredBySchema.optional()
59043
59324
  });
59044
- DeviceType.Camera, DeviceType.Sensor, method(object({ deviceId: number() }), boolean());
59325
+ DeviceType.Camera, DeviceType.Sensor, method(object({ deviceId: number() }), boolean()), DeviceType.Camera;
59045
59326
  object({
59046
59327
  enabled: boolean(),
59047
59328
  /** Ms epoch of the last operator-driven change. */
@@ -62905,7 +63186,11 @@ getStatus: method(object({ deviceId: number() }), RecordingSignalStatusSchema) }
62905
63186
  * See `RuntimeStateDurability`. Enforced by
62906
63187
  * `scripts/check-runtime-state-durability.ts`.
62907
63188
  */
62908
- durability: "session"
63189
+ durability: "session",
63190
+ /**
63191
+ * History (D850): none — recording intent is already in the recordings ledger.
63192
+ */
63193
+ history: "none"
62909
63194
  };
62910
63195
  /**
62911
63196
  * scene-monitor — device-scoped reference-region state cap. An operator marks
@@ -63504,6 +63789,21 @@ DeviceType.Switch, DeviceType.Siren, DeviceType.Light, method(object({
63504
63789
  on: boolean(),
63505
63790
  lastChangedAt: number()
63506
63791
  });
63792
+ /** C0 controls, DEL and the C1 range: none of them belongs in a name. */
63793
+ function hasControlCharacter(value) {
63794
+ for (const char of value) {
63795
+ const code = char.codePointAt(0) ?? 0;
63796
+ if (code <= 31 || code >= 127 && code <= 159) return true;
63797
+ }
63798
+ return false;
63799
+ }
63800
+ string().transform((value) => value.trim()).pipe(string().min(1, "The server name cannot be empty").max(48, `The server name is at most 48 characters`).refine((value) => !hasControlCharacter(value), { message: "The server name cannot contain control characters" }));
63801
+ /** What every reader gets: the name to show, and whether the hub chose it itself. */
63802
+ var ServerNameInfoSchema = object({
63803
+ name: string(),
63804
+ /** `true` when nobody named the hub: `name` is the machine hostname. */
63805
+ isDefault: boolean()
63806
+ });
63507
63807
  /**
63508
63808
  * system — system-scoped singleton capability exposing hub-level
63509
63809
  * health, feature flags, network interface enumeration, and the
@@ -63533,6 +63833,12 @@ var FeatureManifestSchema = object({
63533
63833
  backup: boolean(),
63534
63834
  repl: boolean()
63535
63835
  });
63836
+ /**
63837
+ * `system.info`: the feature flags plus the hub's human name (D861). The name is
63838
+ * `{ name, isDefault }` — `isDefault: true` means nobody named the hub and `name`
63839
+ * is the machine hostname.
63840
+ */
63841
+ var SystemInfoSchema = FeatureManifestSchema.extend({ serverName: ServerNameInfoSchema });
63536
63842
  var HealthStatusSchema = object({
63537
63843
  status: literal("ok"),
63538
63844
  uptime: number()
@@ -64005,7 +64311,7 @@ var LoggingSettingsStateSchema = object({
64005
64311
  opsLogRetentionDays: number().int().min(0),
64006
64312
  persisted: boolean()
64007
64313
  });
64008
- method(_void(), FeatureManifestSchema), method(_void(), HealthStatusSchema), method(_void(), FeatureManifestSchema), method(_void(), array(NetworkAddressSchema).readonly()), method(_void(), unknown().nullable(), { auth: "admin" }), method(record(string(), unknown()), _null(), {
64314
+ method(_void(), SystemInfoSchema), method(_void(), HealthStatusSchema), method(_void(), FeatureManifestSchema), method(_void(), array(NetworkAddressSchema).readonly()), method(_void(), unknown().nullable(), { auth: "admin" }), method(record(string(), unknown()), _null(), {
64009
64315
  kind: "mutation",
64010
64316
  auth: "admin"
64011
64317
  }), method(_void(), _void(), {
@@ -66936,6 +67242,66 @@ Object.freeze({
66936
67242
  addonId: null,
66937
67243
  access: "create"
66938
67244
  },
67245
+ "deviceHistory.declareSeries": {
67246
+ capName: "device-history",
67247
+ capScope: "system",
67248
+ addonId: null,
67249
+ access: "create"
67250
+ },
67251
+ "deviceHistory.getDeviceEnabled": {
67252
+ capName: "device-history",
67253
+ capScope: "system",
67254
+ addonId: null,
67255
+ access: "view"
67256
+ },
67257
+ "deviceHistory.getStatus": {
67258
+ capName: "device-history",
67259
+ capScope: "system",
67260
+ addonId: null,
67261
+ access: "view"
67262
+ },
67263
+ "deviceHistory.listNodeSeries": {
67264
+ capName: "device-history",
67265
+ capScope: "system",
67266
+ addonId: null,
67267
+ access: "view"
67268
+ },
67269
+ "deviceHistory.listSeries": {
67270
+ capName: "device-history",
67271
+ capScope: "system",
67272
+ addonId: null,
67273
+ access: "view"
67274
+ },
67275
+ "deviceHistory.query": {
67276
+ capName: "device-history",
67277
+ capScope: "system",
67278
+ addonId: null,
67279
+ access: "view"
67280
+ },
67281
+ "deviceHistory.queryNode": {
67282
+ capName: "device-history",
67283
+ capScope: "system",
67284
+ addonId: null,
67285
+ access: "view"
67286
+ },
67287
+ "deviceHistory.record": {
67288
+ capName: "device-history",
67289
+ capScope: "system",
67290
+ addonId: null,
67291
+ access: "create"
67292
+ },
67293
+ "deviceHistory.recordBuckets": {
67294
+ capName: "device-history",
67295
+ capScope: "system",
67296
+ addonId: null,
67297
+ access: "create"
67298
+ },
67299
+ "deviceHistory.setDeviceEnabled": {
67300
+ capName: "device-history",
67301
+ capScope: "system",
67302
+ addonId: null,
67303
+ access: "create"
67304
+ },
66939
67305
  "deviceManager.addLocation": {
66940
67306
  capName: "device-manager",
66941
67307
  capScope: "system",
@@ -69000,6 +69366,12 @@ Object.freeze({
69000
69366
  addonId: null,
69001
69367
  access: "create"
69002
69368
  },
69369
+ "nodeCertificates.forgetHub": {
69370
+ capName: "node-certificates",
69371
+ capScope: "system",
69372
+ addonId: null,
69373
+ access: "delete"
69374
+ },
69003
69375
  "nodeCertificates.getCertificates": {
69004
69376
  capName: "node-certificates",
69005
69377
  capScope: "system",
@@ -73727,6 +74099,26 @@ Object.freeze({
73727
74099
  form: "single",
73728
74100
  optional: false
73729
74101
  }],
74102
+ "deviceHistory.getDeviceEnabled": [{
74103
+ name: "deviceId",
74104
+ form: "single",
74105
+ optional: false
74106
+ }],
74107
+ "deviceHistory.listSeries": [{
74108
+ name: "deviceId",
74109
+ form: "single",
74110
+ optional: false
74111
+ }],
74112
+ "deviceHistory.query": [{
74113
+ name: "deviceId",
74114
+ form: "single",
74115
+ optional: false
74116
+ }],
74117
+ "deviceHistory.setDeviceEnabled": [{
74118
+ name: "deviceId",
74119
+ form: "single",
74120
+ optional: false
74121
+ }],
73730
74122
  "deviceManager.adoptionRelease": [{
73731
74123
  name: "camDeviceId",
73732
74124
  form: "single",
@@ -75905,6 +76297,7 @@ Object.freeze({
75905
76297
  "network-access": "ingress",
75906
76298
  "smtp-provider": "email"
75907
76299
  });
76300
+ DeviceType.Camera;
75908
76301
  var G711_SCALE_CORRECTION_DB = {
75909
76302
  PCMU: 20 * Math.log10(4),
75910
76303
  PCMA: 20 * Math.log10(8)