@camstack/addon-ai 0.4.82 → 0.4.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/addon.js CHANGED
@@ -12152,6 +12152,9 @@ var QueryFilterSchema = object({
12152
12152
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12153
12153
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
12154
12154
  whereNot: record(string(), unknown()).optional(),
12155
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
12156
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
12157
+ whereNotIn: record(string(), array(unknown())).optional(),
12155
12158
  orderBy: object({
12156
12159
  field: string(),
12157
12160
  direction: _enum(["asc", "desc"])
@@ -12172,7 +12175,8 @@ var MutationFilterSchema = object({
12172
12175
  where: record(string(), unknown()).optional(),
12173
12176
  whereIn: record(string(), array(unknown())).optional(),
12174
12177
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12175
- whereNot: record(string(), unknown()).optional()
12178
+ whereNot: record(string(), unknown()).optional(),
12179
+ whereNotIn: record(string(), array(unknown())).optional()
12176
12180
  });
12177
12181
  /**
12178
12182
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -18756,10 +18760,12 @@ var TrackSourceSchema = _enum([
18756
18760
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
18757
18761
  * a deliberate action of the retrain page, not a side effect of a checkbox.
18758
18762
  *
18759
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
18760
- * the store's filter language has only positive equality and `whereIn` — no
18761
- * negation, no IS NULL — so a NULL would be unselectable by ANY predicate and
18762
- * would make the entire pre-column history immortal in one deploy.
18763
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
18764
+ * every row is selectable by a positive predicate. (The filter language has
18765
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
18766
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
18767
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
18768
+ * column was designed, and a NOT NULL column is still the better shape.)
18763
18769
  */
18764
18770
  var RetrainStatusSchema = _enum([
18765
18771
  "none",
@@ -19495,7 +19501,9 @@ var RecentTracksQueryInput = object({
19495
19501
  * whose class list is unreadable are kept, and the client's rule stays the
19496
19502
  * exact one.
19497
19503
  */
19498
- classes: array(string()).optional()
19504
+ classes: array(string()).optional(),
19505
+ /** See {@link ExcludeSourcesDoc}. */
19506
+ excludeSources: array(TrackSourceSchema).optional()
19499
19507
  });
19500
19508
  /**
19501
19509
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -19923,7 +19931,9 @@ DeviceType.Camera, method(object({ deviceId: number$1() }), array(TrackSchema).r
19923
19931
  * selected is an operator who has not narrowed anything, and an empty
19924
19932
  * timeline would read as a camera that saw nothing.
19925
19933
  */
19926
- classes: array(string()).optional()
19934
+ classes: array(string()).optional(),
19935
+ /** See {@link ExcludeSourcesDoc}. */
19936
+ excludeSources: array(TrackSourceSchema).optional()
19927
19937
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number$1() }), _void(), {
19928
19938
  kind: "mutation",
19929
19939
  auth: "admin"
@@ -20428,8 +20438,25 @@ var occupancyRecheckFramesField = {
20428
20438
  * (analyzer attaches detected `regions[]`; onboard does not — the
20429
20439
  * camera typically only reports a binary signal plus an optional
20430
20440
  * channel/AI class which lives in dedicated event channels).
20441
+ *
20442
+ * - `onboard` — the camera's firmware said something moved.
20443
+ * - `analyzer` — this runner's frame-diff said so, and attaches `regions[]`.
20444
+ * - `device-activity` — the DEVICE said it is doing its job: the
20445
+ * `recording-signal` LEVEL the same device raises for the recorder
20446
+ * ([D380](../../../../docs/decisions/adr-0380-a-device-decided-recording-is-a-mode-with-no-schedule-seeded-once.md)),
20447
+ * republished as a motion source. It attaches **nothing** — no regions, no
20448
+ * class: the only fact it carries is that the device is active, and a robot
20449
+ * vacuum that is itself the moving object has no region worth sending. It is
20450
+ * a LEVEL, so unlike `onboard` it has a real falling edge, and unlike
20451
+ * `analyzer` it must not open the frame-diff side-channel — the runner's
20452
+ * `handleOnboardMotionAnalyzer` gate is `source === 'onboard'` and stays that
20453
+ * way ([D392](../../../../docs/decisions/adr-0392-a-device-that-says-it-is-working-is-a-motion-source-of-its-own.md)).
20431
20454
  */
20432
- var MotionSourceEnum = _enum(["onboard", "analyzer"]);
20455
+ var MotionSourceEnum = _enum([
20456
+ "onboard",
20457
+ "analyzer",
20458
+ "device-activity"
20459
+ ]);
20433
20460
  /**
20434
20461
  * List of motion sources active on a camera. Empty array is valid:
20435
20462
  * "no source" — happens for battery cams without firmware motion when
package/dist/addon.mjs CHANGED
@@ -12179,6 +12179,9 @@ var QueryFilterSchema = object({
12179
12179
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12180
12180
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
12181
12181
  whereNot: record(string(), unknown()).optional(),
12182
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
12183
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
12184
+ whereNotIn: record(string(), array(unknown())).optional(),
12182
12185
  orderBy: object({
12183
12186
  field: string(),
12184
12187
  direction: _enum(["asc", "desc"])
@@ -12199,7 +12202,8 @@ var MutationFilterSchema = object({
12199
12202
  where: record(string(), unknown()).optional(),
12200
12203
  whereIn: record(string(), array(unknown())).optional(),
12201
12204
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
12202
- whereNot: record(string(), unknown()).optional()
12205
+ whereNot: record(string(), unknown()).optional(),
12206
+ whereNotIn: record(string(), array(unknown())).optional()
12203
12207
  });
12204
12208
  /**
12205
12209
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -18783,10 +18787,12 @@ var TrackSourceSchema = _enum([
18783
18787
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
18784
18788
  * a deliberate action of the retrain page, not a side effect of a checkbox.
18785
18789
  *
18786
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
18787
- * the store's filter language has only positive equality and `whereIn` — no
18788
- * negation, no IS NULL — so a NULL would be unselectable by ANY predicate and
18789
- * would make the entire pre-column history immortal in one deploy.
18790
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
18791
+ * every row is selectable by a positive predicate. (The filter language has
18792
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
18793
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
18794
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
18795
+ * column was designed, and a NOT NULL column is still the better shape.)
18790
18796
  */
18791
18797
  var RetrainStatusSchema = _enum([
18792
18798
  "none",
@@ -19522,7 +19528,9 @@ var RecentTracksQueryInput = object({
19522
19528
  * whose class list is unreadable are kept, and the client's rule stays the
19523
19529
  * exact one.
19524
19530
  */
19525
- classes: array(string()).optional()
19531
+ classes: array(string()).optional(),
19532
+ /** See {@link ExcludeSourcesDoc}. */
19533
+ excludeSources: array(TrackSourceSchema).optional()
19526
19534
  });
19527
19535
  /**
19528
19536
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -19950,7 +19958,9 @@ DeviceType.Camera, method(object({ deviceId: number$1() }), array(TrackSchema).r
19950
19958
  * selected is an operator who has not narrowed anything, and an empty
19951
19959
  * timeline would read as a camera that saw nothing.
19952
19960
  */
19953
- classes: array(string()).optional()
19961
+ classes: array(string()).optional(),
19962
+ /** See {@link ExcludeSourcesDoc}. */
19963
+ excludeSources: array(TrackSourceSchema).optional()
19954
19964
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number$1() }), _void(), {
19955
19965
  kind: "mutation",
19956
19966
  auth: "admin"
@@ -20455,8 +20465,25 @@ var occupancyRecheckFramesField = {
20455
20465
  * (analyzer attaches detected `regions[]`; onboard does not — the
20456
20466
  * camera typically only reports a binary signal plus an optional
20457
20467
  * channel/AI class which lives in dedicated event channels).
20468
+ *
20469
+ * - `onboard` — the camera's firmware said something moved.
20470
+ * - `analyzer` — this runner's frame-diff said so, and attaches `regions[]`.
20471
+ * - `device-activity` — the DEVICE said it is doing its job: the
20472
+ * `recording-signal` LEVEL the same device raises for the recorder
20473
+ * ([D380](../../../../docs/decisions/adr-0380-a-device-decided-recording-is-a-mode-with-no-schedule-seeded-once.md)),
20474
+ * republished as a motion source. It attaches **nothing** — no regions, no
20475
+ * class: the only fact it carries is that the device is active, and a robot
20476
+ * vacuum that is itself the moving object has no region worth sending. It is
20477
+ * a LEVEL, so unlike `onboard` it has a real falling edge, and unlike
20478
+ * `analyzer` it must not open the frame-diff side-channel — the runner's
20479
+ * `handleOnboardMotionAnalyzer` gate is `source === 'onboard'` and stays that
20480
+ * way ([D392](../../../../docs/decisions/adr-0392-a-device-that-says-it-is-working-is-a-motion-source-of-its-own.md)).
20458
20481
  */
20459
- var MotionSourceEnum = _enum(["onboard", "analyzer"]);
20482
+ var MotionSourceEnum = _enum([
20483
+ "onboard",
20484
+ "analyzer",
20485
+ "device-activity"
20486
+ ]);
20460
20487
  /**
20461
20488
  * List of motion sources active on a camera. Empty array is valid:
20462
20489
  * "no source" — happens for battery cams without firmware motion when
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-ai",
3
- "version": "0.4.82",
3
+ "version": "0.4.84",
4
4
  "description": "AI addon for CamStack — the `llm` collection provider (cloud, LAN, and camstack-managed local llama.cpp profiles) plus the per-node `llm-runtime` managed executor.",
5
5
  "keywords": [
6
6
  "camstack",