@camstack/addon-terminal 0.1.147 → 0.1.148

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 (3) hide show
  1. package/dist/addon.js +114 -61
  2. package/dist/addon.mjs +114 -61
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -31,7 +31,7 @@ let node_module = require("node:module");
31
31
  let sharp = require("sharp");
32
32
  sharp = __toESM(sharp);
33
33
  let node_http = require("node:http");
34
- //#region ../types/dist/event-category-7pZEBmVg.mjs
34
+ //#region ../types/dist/event-category-BfJwUd2S.mjs
35
35
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
36
36
  EventCategory["SystemBoot"] = "system.boot";
37
37
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -348,6 +348,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
348
348
  */
349
349
  EventCategory["PipelineDetectionBlind"] = "pipeline.detection-blind";
350
350
  /**
351
+ * A camera's motion source has fired constantly with no subject for an hour
352
+ * (motion duty or session count over the bar, zero detections) — it is not
353
+ * blind, its motion zones or sensitivity want tuning (D907). Paired with
354
+ * {@link PipelineMotionCalm}.
355
+ */
356
+ EventCategory["PipelineMotionNoisy"] = "pipeline.motion-noisy";
357
+ /** The recovery edge of {@link PipelineMotionNoisy}: the motion fell back, or a detection arrived. */
358
+ EventCategory["PipelineMotionCalm"] = "pipeline.motion-calm";
359
+ /**
351
360
  * Per-camera pipeline config was mutated by the orchestrator
352
361
  * (3-level settings change via `setAgentAddonDefaults` /
353
362
  * `setCameraStepToggle` / `setCameraPipelineForAgent` or a
@@ -5454,7 +5463,7 @@ var ZodIssueCode = {
5454
5463
  var ZodFirstPartyTypeKind;
5455
5464
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5456
5465
  //#endregion
5457
- //#region ../types/dist/sleep-CueztlR1.mjs
5466
+ //#region ../types/dist/sleep-DJFUfKvA.mjs
5458
5467
  /**
5459
5468
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5460
5469
  * window to float samples (D455).
@@ -7983,7 +7992,7 @@ var EntryDescriptorSchema = object({
7983
7992
  /** JSON Schema of the entry body; `secret: true` marks a password field. */
7984
7993
  fields: record(string(), unknown())
7985
7994
  }).strict();
7986
- /** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
7995
+ /** What crosses the wire from an addon: JSON only, no Zod. An unknown key is refused. */
7987
7996
  var RecordKindDeclarationSchema = object({
7988
7997
  database: _enum(RECORD_DATABASES).default("settings"),
7989
7998
  class: _enum(RECORD_CLASSES),
@@ -8002,14 +8011,6 @@ var RecordKindDeclarationSchema = object({
8002
8011
  secretPaths: array(string().min(1)).default([]),
8003
8012
  /** The id key of each array that carries a secret (`{ headers: 'name' }`). */
8004
8013
  secretArrayKeys: record(string(), string()).default({}),
8005
- /**
8006
- * RETIRED (D900): the legacy table a kind adopted from during the records
8007
- * migration. Nothing declares it any more and nothing reads it; the schema
8008
- * still ACCEPTS it because the catalog rows the migration wrote carry it
8009
- * (an orphaned kind is never redeclared) and an addon built before the
8010
- * removal still sends it. Never set it.
8011
- */
8012
- adoptsFrom: string().min(1).optional(),
8013
8014
  /** Kinds that must agree through `transact` sit in one file under one family name. */
8014
8015
  transactFamily: string().min(1).optional(),
8015
8016
  entry: EntryDescriptorSchema.optional()
@@ -12778,17 +12779,6 @@ object({
12778
12779
  createdAt: number(),
12779
12780
  updatedAt: number()
12780
12781
  });
12781
- object({
12782
- id: string(),
12783
- label: string(),
12784
- isAdmin: boolean().default(false),
12785
- allowedProviders: AllowedProviderSchema,
12786
- allowedDevices: AllowedDevicesSchema,
12787
- tokenHash: string(),
12788
- tokenPrefix: string(),
12789
- createdAt: number(),
12790
- lastUsedAt: number().optional()
12791
- });
12792
12782
  object({
12793
12783
  id: string(),
12794
12784
  userId: string(),
@@ -16770,16 +16760,36 @@ var RecordKindStateSchema = _enum([
16770
16760
  var DeclareKindResultSchema = object({
16771
16761
  kindId: number().int(),
16772
16762
  state: RecordKindStateSchema,
16773
- createdIndexes: array(string()),
16774
- /**
16775
- * RETIRED (D900): always `null`. It carried the records-migration boot guard;
16776
- * it stays on the wire, null, because an addon built before the removal reads
16777
- * an ABSENT field as "adoption pending" and refuses to start.
16778
- */
16779
- adoptionPending: _null()
16763
+ createdIndexes: array(string())
16780
16764
  });
16781
16765
  /** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
16782
16766
  var SecretRefsList = array(string());
16767
+ /**
16768
+ * One op of a `transact`: the single-row writes, each on a kind of the caller.
16769
+ * All ops of one call share ONE database file and ONE `transactFamily`.
16770
+ */
16771
+ var RecordTransactOpSchema = discriminatedUnion("op", [
16772
+ object({
16773
+ op: literal("put"),
16774
+ kind: RecordKindNameSchema,
16775
+ record: RecordInputSchema,
16776
+ ifRev: number().int().min(0).optional()
16777
+ }),
16778
+ object({
16779
+ op: literal("patch"),
16780
+ kind: RecordKindNameSchema,
16781
+ id: RecordIdSchema,
16782
+ data: RecordBodySchema,
16783
+ at: number().int().nullable().optional(),
16784
+ expiresAt: number().int().nullable().optional(),
16785
+ ifRev: number().int().min(1).optional()
16786
+ }),
16787
+ object({
16788
+ op: literal("delete"),
16789
+ kind: RecordKindNameSchema,
16790
+ id: RecordIdSchema
16791
+ })
16792
+ ]);
16783
16793
  var RecordSecretRefsSchema = record(string(), record(string(), string()));
16784
16794
  method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
16785
16795
  kind: "mutation",
@@ -16886,6 +16896,16 @@ method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema)
16886
16896
  }), {
16887
16897
  kind: "mutation",
16888
16898
  auth: "admin"
16899
+ }), method(object({ ops: array(RecordTransactOpSchema).min(1).max(RECORD_BATCH_MAX) }), object({
16900
+ results: array(object({
16901
+ rev: number().int().nullable(),
16902
+ deleted: boolean()
16903
+ })),
16904
+ releasedRefs: SecretRefsList,
16905
+ secretRefs: SecretRefsList
16906
+ }), {
16907
+ kind: "mutation",
16908
+ auth: "admin"
16889
16909
  }), method(object({
16890
16910
  deviceId: number().int(),
16891
16911
  kinds: array(RecordKindNameSchema).optional()
@@ -42399,9 +42419,13 @@ var NcSystemEventKindSchema = _enum([
42399
42419
  "node-updating",
42400
42420
  "node-inference-unavailable",
42401
42421
  "detection-blind",
42422
+ "motion-noisy",
42423
+ "motion-calm",
42402
42424
  "recording-stalled",
42403
42425
  "recording-healthy",
42404
42426
  "recording-degraded",
42427
+ "device-attention-required",
42428
+ "device-attention-resolved",
42405
42429
  "storage-location-low",
42406
42430
  "storage-location-critical",
42407
42431
  "storage-location-ok",
@@ -55873,6 +55897,16 @@ var DishwasherStatusSchema = object({
55873
55897
  powerState: string().nullable(),
55874
55898
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55875
55899
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55900
+ /**
55901
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
55902
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
55903
+ * when none is reported. A cleared reminder is not an unknown one.
55904
+ */
55905
+ filterCleaningDue: boolean().nullable(),
55906
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
55907
+ machineCareDue: boolean().nullable(),
55908
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
55909
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
55876
55910
  /** Option states: null when the appliance does not expose the option or has not said. */
55877
55911
  halfLoad: boolean().nullable(),
55878
55912
  hygienePlus: boolean().nullable(),
@@ -64523,16 +64557,6 @@ var UpdateUserInputSchema = object({
64523
64557
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
64524
64558
  scopes: array(TokenScopeSchema).optional()
64525
64559
  });
64526
- var ApiKeySummarySchema = object({
64527
- id: string(),
64528
- label: string(),
64529
- isAdmin: boolean().default(false),
64530
- allowedProviders: union([array(string()), literal("*")]).optional(),
64531
- allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
64532
- tokenPrefix: string(),
64533
- createdAt: number(),
64534
- lastUsedAt: number().optional()
64535
- });
64536
64560
  var OauthSessionSummarySchema = object({
64537
64561
  id: string(),
64538
64562
  userId: string(),
@@ -64554,8 +64578,7 @@ var TotpStatusSchema = object({
64554
64578
  confirmedAt: number().nullable()
64555
64579
  });
64556
64580
  /**
64557
- * user-management — singleton capability for user accounts and the
64558
- * legacy API-key rows.
64581
+ * user-management — singleton capability for user accounts.
64559
64582
  *
64560
64583
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
64561
64584
  * — the subset check on `setUserScopes` is moot
@@ -64611,10 +64634,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
64611
64634
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
64612
64635
  kind: "mutation",
64613
64636
  access: "view"
64614
- }), method(_void(), array(ApiKeySummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: literal(true) }), {
64615
- kind: "mutation",
64616
- auth: "admin",
64617
- access: "delete"
64618
64637
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
64619
64638
  kind: "mutation",
64620
64639
  auth: "admin",
@@ -73587,6 +73606,12 @@ Object.freeze({
73587
73606
  addonId: null,
73588
73607
  access: "view"
73589
73608
  },
73609
+ "records.transact": {
73610
+ capName: "records",
73611
+ capScope: "system",
73612
+ addonId: null,
73613
+ access: "create"
73614
+ },
73590
73615
  "sceneMonitor.captureReference": {
73591
73616
  capName: "scene-monitor",
73592
73617
  capScope: "device",
@@ -74919,12 +74944,6 @@ Object.freeze({
74919
74944
  addonId: null,
74920
74945
  access: "view"
74921
74946
  },
74922
- "userManagement.listApiKeys": {
74923
- capName: "user-management",
74924
- capScope: "system",
74925
- addonId: null,
74926
- access: "view"
74927
- },
74928
74947
  "userManagement.listExternalIdentities": {
74929
74948
  capName: "user-management",
74930
74949
  capScope: "system",
@@ -74979,12 +74998,6 @@ Object.freeze({
74979
74998
  addonId: null,
74980
74999
  access: "create"
74981
75000
  },
74982
- "userManagement.revokeApiKey": {
74983
- capName: "user-management",
74984
- capScope: "system",
74985
- addonId: null,
74986
- access: "delete"
74987
- },
74988
75001
  "userManagement.revokeOauthSession": {
74989
75002
  capName: "user-management",
74990
75003
  capScope: "system",
@@ -78349,9 +78362,13 @@ new Map(Object.entries({
78349
78362
  "stream-online": "device-events",
78350
78363
  "stream-offline": "device-events",
78351
78364
  "detection-blind": "device-events",
78365
+ "motion-noisy": "device-events",
78366
+ "motion-calm": "device-events",
78352
78367
  "recording-stalled": "device-events",
78353
78368
  "recording-healthy": "device-events",
78354
78369
  "recording-degraded": "device-events",
78370
+ "device-attention-required": "device-events",
78371
+ "device-attention-resolved": "device-events",
78355
78372
  "node-online": "system",
78356
78373
  "node-offline": "system",
78357
78374
  "node-restarting": "system",
@@ -78434,6 +78451,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78434
78451
  label: "Detecting nothing",
78435
78452
  kinds: ["detection-blind"]
78436
78453
  },
78454
+ {
78455
+ id: "motion-noise",
78456
+ family: "device-events",
78457
+ label: "Motion without a subject",
78458
+ kinds: ["motion-noisy", "motion-calm"]
78459
+ },
78437
78460
  {
78438
78461
  id: "recording",
78439
78462
  family: "device-events",
@@ -78444,6 +78467,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78444
78467
  "recording-degraded"
78445
78468
  ]
78446
78469
  },
78470
+ {
78471
+ id: "device-attention",
78472
+ family: "device-events",
78473
+ label: "Needs attention",
78474
+ kinds: ["device-attention-required", "device-attention-resolved"]
78475
+ },
78447
78476
  {
78448
78477
  id: "nodes",
78449
78478
  family: "system",
@@ -78583,6 +78612,7 @@ var ALERT_EPISODE = [
78583
78612
  "alert-error",
78584
78613
  "alert-critical-resolved"
78585
78614
  ];
78615
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
78586
78616
  var UPDATES = [
78587
78617
  "addon-update-available",
78588
78618
  "server-update-available",
@@ -78612,9 +78642,12 @@ var DEVICE_EVENTS = [
78612
78642
  "stream-online",
78613
78643
  "stream-offline",
78614
78644
  "detection-blind",
78645
+ "motion-noisy",
78646
+ "motion-calm",
78615
78647
  "recording-stalled",
78616
78648
  "recording-healthy",
78617
78649
  "recording-degraded",
78650
+ ...DEVICE_ATTENTION,
78618
78651
  ...ALARM
78619
78652
  ];
78620
78653
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -78782,7 +78815,9 @@ var STATE_SUMMARY_VARS = [
78782
78815
  [...RULE_TEXT],
78783
78816
  [...RULE_TEXT],
78784
78817
  [...RULE_TEXT],
78785
- ([...RULE_TEXT], [...ALERT_EPISODE]),
78818
+ [...RULE_TEXT],
78819
+ [...RULE_TEXT],
78820
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
78786
78821
  [...RULE_TEXT],
78787
78822
  [...RULE_TEXT],
78788
78823
  [...RULE_TEXT],
@@ -78804,11 +78839,11 @@ var STATE_SUMMARY_VARS = [
78804
78839
  [...RULE_TEXT],
78805
78840
  [...RULE_TEXT],
78806
78841
  [...RULE_TEXT],
78842
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
78807
78843
  ([...RULE_TEXT], [...ALERT_EPISODE]),
78844
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
78808
78845
  ([...RULE_TEXT], [...ALERT_EPISODE]),
78809
- ([...RULE_TEXT], [...ALERT_EPISODE]),
78810
- ([...RULE_TEXT], [...ALERT_EPISODE]),
78811
- ([...RULE_TEXT], [...ALERT_EPISODE]),
78846
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
78812
78847
  [...RULE_TEXT],
78813
78848
  [...RULE_TEXT],
78814
78849
  [...RULE_TEXT],
@@ -78884,6 +78919,15 @@ new Map([
78884
78919
  snapshotLabel: "Tanks low or full now",
78885
78920
  snapshotSection: "tanks"
78886
78921
  },
78922
+ {
78923
+ id: "motion-noise",
78924
+ family: "device-events",
78925
+ label: "Motion without a subject (constant / calm again)",
78926
+ bad: ["motion-noisy"],
78927
+ recovery: ["motion-calm"],
78928
+ snapshotLabel: "Cameras with constant motion now",
78929
+ snapshotSection: null
78930
+ },
78887
78931
  {
78888
78932
  id: "recording-health",
78889
78933
  family: "device-events",
@@ -78893,6 +78937,15 @@ new Map([
78893
78937
  snapshotLabel: "Recordings stalled now",
78894
78938
  snapshotSection: null
78895
78939
  },
78940
+ {
78941
+ id: "device-attention",
78942
+ family: "device-events",
78943
+ label: "Device needs attention (raised / resolved)",
78944
+ bad: ["device-attention-required"],
78945
+ recovery: ["device-attention-resolved"],
78946
+ snapshotLabel: "Devices needing attention now",
78947
+ snapshotSection: null
78948
+ },
78896
78949
  {
78897
78950
  id: "node-connectivity",
78898
78951
  family: "system",
package/dist/addon.mjs CHANGED
@@ -8,7 +8,7 @@ import { createServer } from "node:http";
8
8
  //#region \0rolldown/runtime.js
9
9
  var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
10
10
  //#endregion
11
- //#region ../types/dist/event-category-7pZEBmVg.mjs
11
+ //#region ../types/dist/event-category-BfJwUd2S.mjs
12
12
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
13
13
  EventCategory["SystemBoot"] = "system.boot";
14
14
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -325,6 +325,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
325
325
  */
326
326
  EventCategory["PipelineDetectionBlind"] = "pipeline.detection-blind";
327
327
  /**
328
+ * A camera's motion source has fired constantly with no subject for an hour
329
+ * (motion duty or session count over the bar, zero detections) — it is not
330
+ * blind, its motion zones or sensitivity want tuning (D907). Paired with
331
+ * {@link PipelineMotionCalm}.
332
+ */
333
+ EventCategory["PipelineMotionNoisy"] = "pipeline.motion-noisy";
334
+ /** The recovery edge of {@link PipelineMotionNoisy}: the motion fell back, or a detection arrived. */
335
+ EventCategory["PipelineMotionCalm"] = "pipeline.motion-calm";
336
+ /**
328
337
  * Per-camera pipeline config was mutated by the orchestrator
329
338
  * (3-level settings change via `setAgentAddonDefaults` /
330
339
  * `setCameraStepToggle` / `setCameraPipelineForAgent` or a
@@ -5431,7 +5440,7 @@ var ZodIssueCode = {
5431
5440
  var ZodFirstPartyTypeKind;
5432
5441
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5433
5442
  //#endregion
5434
- //#region ../types/dist/sleep-CueztlR1.mjs
5443
+ //#region ../types/dist/sleep-DJFUfKvA.mjs
5435
5444
  /**
5436
5445
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5437
5446
  * window to float samples (D455).
@@ -7960,7 +7969,7 @@ var EntryDescriptorSchema = object({
7960
7969
  /** JSON Schema of the entry body; `secret: true` marks a password field. */
7961
7970
  fields: record(string(), unknown())
7962
7971
  }).strict();
7963
- /** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
7972
+ /** What crosses the wire from an addon: JSON only, no Zod. An unknown key is refused. */
7964
7973
  var RecordKindDeclarationSchema = object({
7965
7974
  database: _enum(RECORD_DATABASES).default("settings"),
7966
7975
  class: _enum(RECORD_CLASSES),
@@ -7979,14 +7988,6 @@ var RecordKindDeclarationSchema = object({
7979
7988
  secretPaths: array(string().min(1)).default([]),
7980
7989
  /** The id key of each array that carries a secret (`{ headers: 'name' }`). */
7981
7990
  secretArrayKeys: record(string(), string()).default({}),
7982
- /**
7983
- * RETIRED (D900): the legacy table a kind adopted from during the records
7984
- * migration. Nothing declares it any more and nothing reads it; the schema
7985
- * still ACCEPTS it because the catalog rows the migration wrote carry it
7986
- * (an orphaned kind is never redeclared) and an addon built before the
7987
- * removal still sends it. Never set it.
7988
- */
7989
- adoptsFrom: string().min(1).optional(),
7990
7991
  /** Kinds that must agree through `transact` sit in one file under one family name. */
7991
7992
  transactFamily: string().min(1).optional(),
7992
7993
  entry: EntryDescriptorSchema.optional()
@@ -12755,17 +12756,6 @@ object({
12755
12756
  createdAt: number(),
12756
12757
  updatedAt: number()
12757
12758
  });
12758
- object({
12759
- id: string(),
12760
- label: string(),
12761
- isAdmin: boolean().default(false),
12762
- allowedProviders: AllowedProviderSchema,
12763
- allowedDevices: AllowedDevicesSchema,
12764
- tokenHash: string(),
12765
- tokenPrefix: string(),
12766
- createdAt: number(),
12767
- lastUsedAt: number().optional()
12768
- });
12769
12759
  object({
12770
12760
  id: string(),
12771
12761
  userId: string(),
@@ -16747,16 +16737,36 @@ var RecordKindStateSchema = _enum([
16747
16737
  var DeclareKindResultSchema = object({
16748
16738
  kindId: number().int(),
16749
16739
  state: RecordKindStateSchema,
16750
- createdIndexes: array(string()),
16751
- /**
16752
- * RETIRED (D900): always `null`. It carried the records-migration boot guard;
16753
- * it stays on the wire, null, because an addon built before the removal reads
16754
- * an ABSENT field as "adoption pending" and refuses to start.
16755
- */
16756
- adoptionPending: _null()
16740
+ createdIndexes: array(string())
16757
16741
  });
16758
16742
  /** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
16759
16743
  var SecretRefsList = array(string());
16744
+ /**
16745
+ * One op of a `transact`: the single-row writes, each on a kind of the caller.
16746
+ * All ops of one call share ONE database file and ONE `transactFamily`.
16747
+ */
16748
+ var RecordTransactOpSchema = discriminatedUnion("op", [
16749
+ object({
16750
+ op: literal("put"),
16751
+ kind: RecordKindNameSchema,
16752
+ record: RecordInputSchema,
16753
+ ifRev: number().int().min(0).optional()
16754
+ }),
16755
+ object({
16756
+ op: literal("patch"),
16757
+ kind: RecordKindNameSchema,
16758
+ id: RecordIdSchema,
16759
+ data: RecordBodySchema,
16760
+ at: number().int().nullable().optional(),
16761
+ expiresAt: number().int().nullable().optional(),
16762
+ ifRev: number().int().min(1).optional()
16763
+ }),
16764
+ object({
16765
+ op: literal("delete"),
16766
+ kind: RecordKindNameSchema,
16767
+ id: RecordIdSchema
16768
+ })
16769
+ ]);
16760
16770
  var RecordSecretRefsSchema = record(string(), record(string(), string()));
16761
16771
  method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
16762
16772
  kind: "mutation",
@@ -16863,6 +16873,16 @@ method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema)
16863
16873
  }), {
16864
16874
  kind: "mutation",
16865
16875
  auth: "admin"
16876
+ }), method(object({ ops: array(RecordTransactOpSchema).min(1).max(RECORD_BATCH_MAX) }), object({
16877
+ results: array(object({
16878
+ rev: number().int().nullable(),
16879
+ deleted: boolean()
16880
+ })),
16881
+ releasedRefs: SecretRefsList,
16882
+ secretRefs: SecretRefsList
16883
+ }), {
16884
+ kind: "mutation",
16885
+ auth: "admin"
16866
16886
  }), method(object({
16867
16887
  deviceId: number().int(),
16868
16888
  kinds: array(RecordKindNameSchema).optional()
@@ -42376,9 +42396,13 @@ var NcSystemEventKindSchema = _enum([
42376
42396
  "node-updating",
42377
42397
  "node-inference-unavailable",
42378
42398
  "detection-blind",
42399
+ "motion-noisy",
42400
+ "motion-calm",
42379
42401
  "recording-stalled",
42380
42402
  "recording-healthy",
42381
42403
  "recording-degraded",
42404
+ "device-attention-required",
42405
+ "device-attention-resolved",
42382
42406
  "storage-location-low",
42383
42407
  "storage-location-critical",
42384
42408
  "storage-location-ok",
@@ -55850,6 +55874,16 @@ var DishwasherStatusSchema = object({
55850
55874
  powerState: string().nullable(),
55851
55875
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55852
55876
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55877
+ /**
55878
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
55879
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
55880
+ * when none is reported. A cleared reminder is not an unknown one.
55881
+ */
55882
+ filterCleaningDue: boolean().nullable(),
55883
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
55884
+ machineCareDue: boolean().nullable(),
55885
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
55886
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
55853
55887
  /** Option states: null when the appliance does not expose the option or has not said. */
55854
55888
  halfLoad: boolean().nullable(),
55855
55889
  hygienePlus: boolean().nullable(),
@@ -64500,16 +64534,6 @@ var UpdateUserInputSchema = object({
64500
64534
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
64501
64535
  scopes: array(TokenScopeSchema).optional()
64502
64536
  });
64503
- var ApiKeySummarySchema = object({
64504
- id: string(),
64505
- label: string(),
64506
- isAdmin: boolean().default(false),
64507
- allowedProviders: union([array(string()), literal("*")]).optional(),
64508
- allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
64509
- tokenPrefix: string(),
64510
- createdAt: number(),
64511
- lastUsedAt: number().optional()
64512
- });
64513
64537
  var OauthSessionSummarySchema = object({
64514
64538
  id: string(),
64515
64539
  userId: string(),
@@ -64531,8 +64555,7 @@ var TotpStatusSchema = object({
64531
64555
  confirmedAt: number().nullable()
64532
64556
  });
64533
64557
  /**
64534
- * user-management — singleton capability for user accounts and the
64535
- * legacy API-key rows.
64558
+ * user-management — singleton capability for user accounts.
64536
64559
  *
64537
64560
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
64538
64561
  * — the subset check on `setUserScopes` is moot
@@ -64588,10 +64611,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
64588
64611
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
64589
64612
  kind: "mutation",
64590
64613
  access: "view"
64591
- }), method(_void(), array(ApiKeySummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: literal(true) }), {
64592
- kind: "mutation",
64593
- auth: "admin",
64594
- access: "delete"
64595
64614
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
64596
64615
  kind: "mutation",
64597
64616
  auth: "admin",
@@ -73564,6 +73583,12 @@ Object.freeze({
73564
73583
  addonId: null,
73565
73584
  access: "view"
73566
73585
  },
73586
+ "records.transact": {
73587
+ capName: "records",
73588
+ capScope: "system",
73589
+ addonId: null,
73590
+ access: "create"
73591
+ },
73567
73592
  "sceneMonitor.captureReference": {
73568
73593
  capName: "scene-monitor",
73569
73594
  capScope: "device",
@@ -74896,12 +74921,6 @@ Object.freeze({
74896
74921
  addonId: null,
74897
74922
  access: "view"
74898
74923
  },
74899
- "userManagement.listApiKeys": {
74900
- capName: "user-management",
74901
- capScope: "system",
74902
- addonId: null,
74903
- access: "view"
74904
- },
74905
74924
  "userManagement.listExternalIdentities": {
74906
74925
  capName: "user-management",
74907
74926
  capScope: "system",
@@ -74956,12 +74975,6 @@ Object.freeze({
74956
74975
  addonId: null,
74957
74976
  access: "create"
74958
74977
  },
74959
- "userManagement.revokeApiKey": {
74960
- capName: "user-management",
74961
- capScope: "system",
74962
- addonId: null,
74963
- access: "delete"
74964
- },
74965
74978
  "userManagement.revokeOauthSession": {
74966
74979
  capName: "user-management",
74967
74980
  capScope: "system",
@@ -78326,9 +78339,13 @@ new Map(Object.entries({
78326
78339
  "stream-online": "device-events",
78327
78340
  "stream-offline": "device-events",
78328
78341
  "detection-blind": "device-events",
78342
+ "motion-noisy": "device-events",
78343
+ "motion-calm": "device-events",
78329
78344
  "recording-stalled": "device-events",
78330
78345
  "recording-healthy": "device-events",
78331
78346
  "recording-degraded": "device-events",
78347
+ "device-attention-required": "device-events",
78348
+ "device-attention-resolved": "device-events",
78332
78349
  "node-online": "system",
78333
78350
  "node-offline": "system",
78334
78351
  "node-restarting": "system",
@@ -78411,6 +78428,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78411
78428
  label: "Detecting nothing",
78412
78429
  kinds: ["detection-blind"]
78413
78430
  },
78431
+ {
78432
+ id: "motion-noise",
78433
+ family: "device-events",
78434
+ label: "Motion without a subject",
78435
+ kinds: ["motion-noisy", "motion-calm"]
78436
+ },
78414
78437
  {
78415
78438
  id: "recording",
78416
78439
  family: "device-events",
@@ -78421,6 +78444,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78421
78444
  "recording-degraded"
78422
78445
  ]
78423
78446
  },
78447
+ {
78448
+ id: "device-attention",
78449
+ family: "device-events",
78450
+ label: "Needs attention",
78451
+ kinds: ["device-attention-required", "device-attention-resolved"]
78452
+ },
78424
78453
  {
78425
78454
  id: "nodes",
78426
78455
  family: "system",
@@ -78560,6 +78589,7 @@ var ALERT_EPISODE = [
78560
78589
  "alert-error",
78561
78590
  "alert-critical-resolved"
78562
78591
  ];
78592
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
78563
78593
  var UPDATES = [
78564
78594
  "addon-update-available",
78565
78595
  "server-update-available",
@@ -78589,9 +78619,12 @@ var DEVICE_EVENTS = [
78589
78619
  "stream-online",
78590
78620
  "stream-offline",
78591
78621
  "detection-blind",
78622
+ "motion-noisy",
78623
+ "motion-calm",
78592
78624
  "recording-stalled",
78593
78625
  "recording-healthy",
78594
78626
  "recording-degraded",
78627
+ ...DEVICE_ATTENTION,
78595
78628
  ...ALARM
78596
78629
  ];
78597
78630
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -78759,7 +78792,9 @@ var STATE_SUMMARY_VARS = [
78759
78792
  [...RULE_TEXT],
78760
78793
  [...RULE_TEXT],
78761
78794
  [...RULE_TEXT],
78762
- ([...RULE_TEXT], [...ALERT_EPISODE]),
78795
+ [...RULE_TEXT],
78796
+ [...RULE_TEXT],
78797
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
78763
78798
  [...RULE_TEXT],
78764
78799
  [...RULE_TEXT],
78765
78800
  [...RULE_TEXT],
@@ -78781,11 +78816,11 @@ var STATE_SUMMARY_VARS = [
78781
78816
  [...RULE_TEXT],
78782
78817
  [...RULE_TEXT],
78783
78818
  [...RULE_TEXT],
78819
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
78784
78820
  ([...RULE_TEXT], [...ALERT_EPISODE]),
78821
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
78785
78822
  ([...RULE_TEXT], [...ALERT_EPISODE]),
78786
- ([...RULE_TEXT], [...ALERT_EPISODE]),
78787
- ([...RULE_TEXT], [...ALERT_EPISODE]),
78788
- ([...RULE_TEXT], [...ALERT_EPISODE]),
78823
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
78789
78824
  [...RULE_TEXT],
78790
78825
  [...RULE_TEXT],
78791
78826
  [...RULE_TEXT],
@@ -78861,6 +78896,15 @@ new Map([
78861
78896
  snapshotLabel: "Tanks low or full now",
78862
78897
  snapshotSection: "tanks"
78863
78898
  },
78899
+ {
78900
+ id: "motion-noise",
78901
+ family: "device-events",
78902
+ label: "Motion without a subject (constant / calm again)",
78903
+ bad: ["motion-noisy"],
78904
+ recovery: ["motion-calm"],
78905
+ snapshotLabel: "Cameras with constant motion now",
78906
+ snapshotSection: null
78907
+ },
78864
78908
  {
78865
78909
  id: "recording-health",
78866
78910
  family: "device-events",
@@ -78870,6 +78914,15 @@ new Map([
78870
78914
  snapshotLabel: "Recordings stalled now",
78871
78915
  snapshotSection: null
78872
78916
  },
78917
+ {
78918
+ id: "device-attention",
78919
+ family: "device-events",
78920
+ label: "Device needs attention (raised / resolved)",
78921
+ bad: ["device-attention-required"],
78922
+ recovery: ["device-attention-resolved"],
78923
+ snapshotLabel: "Devices needing attention now",
78924
+ snapshotSection: null
78925
+ },
78873
78926
  {
78874
78927
  id: "node-connectivity",
78875
78928
  family: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-terminal",
3
- "version": "0.1.147",
3
+ "version": "0.1.148",
4
4
  "description": "Interactive terminal sessions (pty + xterm) as a CamStack addon",
5
5
  "keywords": [
6
6
  "camstack",