@camstack/system 1.2.318 → 1.2.320

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 (76) hide show
  1. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  2. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  3. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/alerts/alerts.addon.js +1 -1
  6. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  7. package/dist/builtins/autotrack/index.js +1 -1
  8. package/dist/builtins/autotrack/index.mjs +1 -1
  9. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +3 -77
  10. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +3 -77
  11. package/dist/builtins/camera-grid/index.js +1 -1
  12. package/dist/builtins/camera-grid/index.mjs +1 -1
  13. package/dist/builtins/composer/composer-apply-waits.d.ts +21 -0
  14. package/dist/builtins/composer/composer-live-set.d.ts +22 -0
  15. package/dist/builtins/composer/composer-runtime-factory.d.ts +22 -0
  16. package/dist/builtins/composer/composer-seeds.d.ts +22 -0
  17. package/dist/builtins/composer/composer.addon.js +1905 -1809
  18. package/dist/builtins/composer/composer.addon.mjs +1905 -1809
  19. package/dist/builtins/composer/composer.d.ts +3 -15
  20. package/dist/builtins/console-logging/index.js +1 -1
  21. package/dist/builtins/console-logging/index.mjs +1 -1
  22. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  23. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  24. package/dist/builtins/device-manager/device-manager.addon.js +2 -2
  25. package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
  26. package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
  27. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
  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/filesystem-storage.addon.js +1 -1
  47. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  48. package/dist/builtins/sqlite-storage/retired-collections.d.ts +9 -0
  49. package/dist/builtins/sqlite-storage/shm-lock-canary.d.ts +60 -0
  50. package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.ts +1 -0
  51. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  52. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  53. package/dist/builtins/sqlite-storage/wal-checkpoint-policy.d.ts +115 -34
  54. package/dist/builtins/sqlite-storage/wal-checkpointer.d.ts +6 -0
  55. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  56. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  57. package/dist/builtins/system-backup/system-backup.service.d.ts +2 -17
  58. package/dist/builtins/system-config/system-config.addon.js +1 -1
  59. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  60. package/dist/builtins/winston-logging/index.js +1 -1
  61. package/dist/builtins/winston-logging/index.mjs +1 -1
  62. package/dist/{composition-sources-BjRPhWtU.js → composition-sources-D4UkcIhl.js} +1 -1
  63. package/dist/{composition-sources-Cg2MP-qf.mjs → composition-sources-Due6vto8.mjs} +1 -1
  64. package/dist/{dist-Dcy0gVHu.js → dist-B0AvBZxe.js} +1 -174
  65. package/dist/{dist-CQ9vXSUh.mjs → dist-XfFiGX64.mjs} +1 -174
  66. package/dist/index.js +1 -1
  67. package/dist/index.mjs +1 -1
  68. package/dist/{retired-settings-keys-pzlrLUbA.js → retired-settings-keys-AmO1MZks.js} +1 -1
  69. package/dist/{retired-settings-keys-DNIbyfTR.mjs → retired-settings-keys-DXI77cc8.mjs} +1 -1
  70. package/dist/wal-checkpoint-policy-BahrTtyD.mjs +186 -0
  71. package/dist/wal-checkpoint-policy-d2z2qPqx.js +233 -0
  72. package/dist/wal-checkpoint-worker.js +63 -57
  73. package/dist/wal-checkpoint-worker.mjs +63 -57
  74. package/package.json +1 -1
  75. package/dist/wal-checkpoint-policy-CAcg63o-.mjs +0 -92
  76. package/dist/wal-checkpoint-policy-CCJZngds.js +0 -127
@@ -1,4 +1,4 @@
1
- import { Cn as withLocationMode, D as REDACTED_SECRET, F as StorageLocationTypeSchema, Gn as BaseAddon, Ht as mayWriteToLocation, I as StorageMigrationJobSchema, N as StorageCleanupJobSchema, Ot as isLocationEnabled, P as StorageLocationModeSchema, Pt as legacyModeOf, Tt as gbToBytes, Vt as mayReadLocation, Wt as modeMayWrite, Y as collectSecretConfigKeys, fn as storageCapability, hr as EventCategory, ln as settingsStoreCapability, lr as parseJsonObject, pn as storageMigrationCapability, rn as resolveLocationMode, x as LegacyStorageLocationDefaultSchema, yt as evictionPolicyOfLocation } from "../../dist-CQ9vXSUh.mjs";
1
+ import { Cn as withLocationMode, D as REDACTED_SECRET, F as StorageLocationTypeSchema, Gn as BaseAddon, Ht as mayWriteToLocation, I as StorageMigrationJobSchema, N as StorageCleanupJobSchema, Ot as isLocationEnabled, P as StorageLocationModeSchema, Pt as legacyModeOf, Tt as gbToBytes, Vt as mayReadLocation, Wt as modeMayWrite, Y as collectSecretConfigKeys, fn as storageCapability, hr as EventCategory, ln as settingsStoreCapability, lr as parseJsonObject, pn as storageMigrationCapability, rn as resolveLocationMode, x as LegacyStorageLocationDefaultSchema, yt as evictionPolicyOfLocation } from "../../dist-XfFiGX64.mjs";
2
2
  import { t as HUB_CAP_FWD_ACTION } from "../../hub-cap-forward-BdT320dq.mjs";
3
3
  import { z } from "zod";
4
4
  import { randomUUID } from "node:crypto";
@@ -160,20 +160,6 @@ export declare class SystemBackupService {
160
160
  signal?: AbortSignal;
161
161
  onArchiveBytes?: (bytesWritten: number) => void;
162
162
  }): Promise<CreateArchiveResult>;
163
- /**
164
- * Best-effort `wal_checkpoint(TRUNCATE)` on every live SQLite database
165
- * under the locations about to be archived. Discovers a DB by its
166
- * `-wal` sidecar (only WAL-mode DBs have one, and only those need
167
- * folding), opens a short-lived second connection — SQLite permits
168
- * concurrent connections, and a checkpoint is a supported concurrent
169
- * operation against the hub's live writer — checkpoints, and closes.
170
- *
171
- * Every failure is swallowed: a `SQLITE_BUSY`, a locked file, a
172
- * missing native binding, or a non-DB `.db` file must not fail the
173
- * backup. A residual WAL still restores correctly; the checkpoint is a
174
- * consistency *improvement*, not a precondition.
175
- */
176
- private checkpointDatabasesUnder;
177
163
  /**
178
164
  * without extracting payload files. Streams the tar.gz, parses the
179
165
  * one entry we care about, then aborts.
@@ -213,9 +199,8 @@ export declare class SystemBackupService {
213
199
  private getRestoreMarkerPath;
214
200
  /**
215
201
  * Absolute-path form of {@link isExcludedFromBackup}, anchored on
216
- * this service's dataDir. Shared by the manifest walk, the location
217
- * stats and the WAL-checkpoint scan so all three agree with the tar
218
- * filter about what a backup contains.
202
+ * this service's dataDir. Shared by the manifest walk and the location
203
+ * stats so both agree with the tar filter about what a backup contains.
219
204
  */
220
205
  private exclusionPredicate;
221
206
  }
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Dcy0gVHu.js");
6
+ const require_dist = require("../../dist-B0AvBZxe.js");
7
7
  //#region src/builtins/system-config/system-config.addon.ts
8
8
  /**
9
9
  * Built-in `system-config` addon — Phase 4 of the settings redesign.
@@ -1,4 +1,4 @@
1
- import { Gn as BaseAddon, Wn as errMsg, ar as hydrateSchema } from "../../dist-CQ9vXSUh.mjs";
1
+ import { Gn as BaseAddon, Wn as errMsg, ar as hydrateSchema } from "../../dist-XfFiGX64.mjs";
2
2
  //#region src/builtins/system-config/system-config.addon.ts
3
3
  /**
4
4
  * Built-in `system-config` addon — Phase 4 of the settings redesign.
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Dcy0gVHu.js");
6
+ const require_dist = require("../../dist-B0AvBZxe.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  let node_path = require("node:path");
9
9
  node_path = require_chunk.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { Gn as BaseAddon, Rt as logDestinationCapability } from "../../dist-CQ9vXSUh.mjs";
1
+ import { Gn as BaseAddon, Rt as logDestinationCapability } from "../../dist-XfFiGX64.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  import * as path$1 from "node:path";
4
4
  import path from "node:path";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-Dcy0gVHu.js");
1
+ const require_dist = require("./dist-B0AvBZxe.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
@@ -1,4 +1,4 @@
1
- import { In as compositionSourceKey, Wn as errMsg } from "./dist-CQ9vXSUh.mjs";
1
+ import { In as compositionSourceKey, Wn as errMsg } from "./dist-XfFiGX64.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
@@ -701,7 +701,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
701
701
  return EventCategory;
702
702
  }({});
703
703
  //#endregion
704
- //#region ../types/dist/sleep-DlrgY4Qb.mjs
704
+ //#region ../types/dist/sleep-C-v96WpE.mjs
705
705
  /**
706
706
  * The audio chunk plane's byte format, and the ONE expansion from a coded
707
707
  * window to float samples (D455).
@@ -5194,7 +5194,6 @@ function featureSources(feature) {
5194
5194
  }
5195
5195
  new Set([
5196
5196
  "track",
5197
- "summary",
5198
5197
  "face",
5199
5198
  "identity",
5200
5199
  "plate",
@@ -22254,141 +22253,6 @@ var RecentTracksQueryInput = zod.z.object({
22254
22253
  /** See {@link ExcludeSourcesDoc}. */
22255
22254
  excludeSources: zod.z.array(TrackSourceSchema).optional()
22256
22255
  });
22257
- /**
22258
- * A Summary (D359): the per-camera session envelope that references tracks.
22259
- * `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
22260
- * 'summary'`, served by the event-media plane at `/m/<id>`), null until the
22261
- * first frame with a member visible has been materialised (D482 — it was the
22262
- * row's composite key, which embedded the owner and could name another table's
22263
- * row once event ids became per-table rowids).
22264
- */
22265
- var SummarySchema = zod.z.object({
22266
- id: zod.z.string(),
22267
- deviceId: zod.z.number(),
22268
- openedAt: zod.z.number(),
22269
- lastActiveAt: zod.z.number(),
22270
- sealedAt: zod.z.number().nullable(),
22271
- memberCount: zod.z.number().int().nonnegative(),
22272
- groupShotMediaId: zod.z.number().int().nullable()
22273
- });
22274
- var SummariesQueryInput = zod.z.object({
22275
- deviceIds: zod.z.array(zod.z.number()).min(1),
22276
- since: zod.z.number().optional(),
22277
- until: zod.z.number().optional(),
22278
- limit: zod.z.number().int().min(1).max(200).default(50),
22279
- /** The same member-wise filter {@link listRecentSummaries} takes — one
22280
- * meaning of "dog" on every summary surface. */
22281
- classes: zod.z.array(zod.z.string().min(1).max(60)).max(40).optional()
22282
- });
22283
- /**
22284
- * One member of a group, as a reader needs it.
22285
- *
22286
- * The class and the role travel WITH the id because every consumer that shows
22287
- * a group has to say what it was made of — "two people and a dog" — and asking
22288
- * `getTrack` per member to find that out turns one card into `memberCount`
22289
- * round trips. The member row already holds both (they are written at the
22290
- * join), so this costs the reader nothing.
22291
- */
22292
- var SummaryMemberSchema = zod.z.object({
22293
- trackId: zod.z.string(),
22294
- /**
22295
- * The track's class at the time it JOINED, or `null` when it was unresolved
22296
- * and the track no longer exists to fill it.
22297
- *
22298
- * The join, not the latest opinion: class voting can re-decide a track's
22299
- * class afterwards, and a group's composition is the history of who came
22300
- * together. A consumer counts these to badge a thumbnail — "two people and a
22301
- * dog" — rather than being handed a second, denormalised tally that would
22302
- * drift from the members it claims to describe.
22303
- */
22304
- className: zod.z.string().nullable(),
22305
- /** `primary` is the one member that carries the group's identity. */
22306
- role: zod.z.enum([
22307
- "primary",
22308
- "sibling",
22309
- "child"
22310
- ]).nullable(),
22311
- joinedAt: zod.z.number(),
22312
- /** Tier 1 — the sub-class (`dog`, `van`), resolved from the member's track
22313
- * at read time. Absent when nothing resolved, never an empty string. */
22314
- label: zod.z.string().optional(),
22315
- /** Tier 2 — the instance: a person's name, a plate. Absent when the pipeline
22316
- * recognised nobody, and absent for a member whose track has been pruned —
22317
- * a thumbnail that names the wrong person is worse than one naming nobody. */
22318
- subLabel: zod.z.string().optional()
22319
- });
22320
- var SummaryDetailSchema = zod.z.object({
22321
- summary: SummarySchema,
22322
- /** Members in absorption order, oldest join first. */
22323
- members: zod.z.array(SummaryMemberSchema).readonly()
22324
- });
22325
- /**
22326
- * What a LIST of groups carries: the envelope plus what it is MADE OF.
22327
- *
22328
- * Coarse on purpose — the operator's rule is "only the rough data on the list,
22329
- * we extend when we notice we need more". Enough to draw the card ("two people
22330
- * and a dog") and no more. The MEMBERS, their names and the per-member links
22331
- * are on {@link getSummary}: shipping every member of every group so a client
22332
- * can count them turns a page of two hundred groups into a thousand records to
22333
- * draw two hundred badges.
22334
- */
22335
- var SummaryListItemSchema = zod.z.object({
22336
- summary: SummarySchema,
22337
- /** Class counts, most numerous first; `className: null` is a member whose
22338
- * class never resolved, counted so the counts add up to `memberCount`. */
22339
- classes: zod.z.array(zod.z.object({
22340
- className: zod.z.string().nullable(),
22341
- count: zod.z.number().int().positive()
22342
- })).readonly()
22343
- });
22344
- var SummariesPageSchema = zod.z.object({ summaries: zod.z.array(SummaryListItemSchema).readonly() });
22345
- /**
22346
- * The paged feed, deliberately the SAME shape as {@link RecentTracksQueryInput}.
22347
- *
22348
- * The reel on the cameras page and the Events gallery both ride a cursor, so a
22349
- * summaries feed that could only answer "the last N for these cameras"
22350
- * (`listSummaries`) would make groups available in the timeline and nowhere
22351
- * else. Two feeds with different ordering contracts would be two ideas of what
22352
- * "newest" means, on one screen.
22353
- */
22354
- var RecentSummariesQueryInput = zod.z.object({
22355
- /** Devices to merge. An empty array yields an empty page. */
22356
- deviceIds: zod.z.array(zod.z.number()),
22357
- /** Window lower bound on `lastActiveAt` (inclusive). */
22358
- since: zod.z.number().optional(),
22359
- /** Window upper bound on `lastActiveAt` (inclusive). */
22360
- until: zod.z.number().optional(),
22361
- limit: zod.z.number().int().min(1).max(500).default(100),
22362
- /** Opaque continuation cursor from a previous page's `nextCursor`. */
22363
- cursor: zod.z.string().optional(),
22364
- /**
22365
- * Restrict to these classes — THE SAME FIELD `listRecentTracks` takes, and
22366
- * deliberately the same name: the events filter tree emits one list of ticked
22367
- * taxonomy nodes, and a summaries feed that called it something else would
22368
- * make the operator's one filter component produce two shapes.
22369
- *
22370
- * A question about the MEMBERS: a group matches when ANY of them does. "Show
22371
- * me the arrivals with a dog" has to return the group of four people who had
22372
- * one with them; a filter on the group's own fields could only ever answer
22373
- * about its primary.
22374
- *
22375
- * Matched against all THREE tiers of a member — the class (`animal`), the
22376
- * sub-class (`dog`) and the instance (a name, a plate) — because which tier a
22377
- * ticked node lives on is the taxonomy's business, not the caller's. `dog` is
22378
- * an event kind in the tree and a tier-1 label on an `animal` track; a filter
22379
- * that read only the class would answer "animal" and never "dog".
22380
- *
22381
- * ABSENT or EMPTY means no filter — absent is not a selection of none.
22382
- */
22383
- classes: zod.z.array(zod.z.string().min(1).max(60)).max(40).optional()
22384
- });
22385
- var RecentSummariesPageSchema = zod.z.object({
22386
- /** Ordered by (`lastActiveAt` DESC, id DESC). Same light item as
22387
- * {@link listSummaries} — one list shape, so a card renders the same
22388
- * whichever feed drew it. */
22389
- summaries: zod.z.array(SummaryListItemSchema).readonly(),
22390
- nextCursor: zod.z.string().nullable()
22391
- });
22392
22256
  var RecentTracksPageSchema = zod.z.object({
22393
22257
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
22394
22258
  tracks: zod.z.array(TrackSchema).readonly(),
@@ -22926,15 +22790,6 @@ var pipelineAnalyticsCapability = {
22926
22790
  * are not included (same contract as `listTracks`).
22927
22791
  */
22928
22792
  listRecentTracks: method(RecentTracksQueryInput, RecentTracksPageSchema),
22929
- /** Newest first by `openedAt`, for a camera set, inside an optional window. */
22930
- listSummaries: method(SummariesQueryInput, SummariesPageSchema),
22931
- /**
22932
- * The PAGED feed — the reel and the Events gallery. Same cursor contract as
22933
- * {@link listRecentTracks}, so one screen cannot hold two ideas of newest.
22934
- */
22935
- listRecentSummaries: method(RecentSummariesQueryInput, RecentSummariesPageSchema),
22936
- /** One summary with its member track ids; `null` for an id nobody wrote. */
22937
- getSummary: method(zod.z.object({ id: zod.z.string() }), SummaryDetailSchema.nullable()),
22938
22793
  clearTracks: method(zod.z.object({ deviceId: zod.z.number() }), zod.z.void(), {
22939
22794
  kind: "mutation",
22940
22795
  auth: "admin"
@@ -51060,12 +50915,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
51060
50915
  addonId: null,
51061
50916
  access: "view"
51062
50917
  },
51063
- "pipelineAnalytics.getSummary": {
51064
- capName: "pipeline-analytics",
51065
- capScope: "device",
51066
- addonId: null,
51067
- access: "view"
51068
- },
51069
50918
  "pipelineAnalytics.getTrack": {
51070
50919
  capName: "pipeline-analytics",
51071
50920
  capScope: "device",
@@ -51126,12 +50975,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
51126
50975
  addonId: null,
51127
50976
  access: "view"
51128
50977
  },
51129
- "pipelineAnalytics.listRecentSummaries": {
51130
- capName: "pipeline-analytics",
51131
- capScope: "device",
51132
- addonId: null,
51133
- access: "view"
51134
- },
51135
50978
  "pipelineAnalytics.listRecentTracks": {
51136
50979
  capName: "pipeline-analytics",
51137
50980
  capScope: "device",
@@ -51162,12 +51005,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
51162
51005
  addonId: null,
51163
51006
  access: "view"
51164
51007
  },
51165
- "pipelineAnalytics.listSummaries": {
51166
- capName: "pipeline-analytics",
51167
- capScope: "device",
51168
- addonId: null,
51169
- access: "view"
51170
- },
51171
51008
  "pipelineAnalytics.listTrackMedia": {
51172
51009
  capName: "pipeline-analytics",
51173
51010
  capScope: "device",
@@ -55337,11 +55174,6 @@ Object.freeze({
55337
55174
  form: "single",
55338
55175
  optional: true
55339
55176
  }],
55340
- "pipelineAnalytics.listRecentSummaries": [{
55341
- name: "deviceIds",
55342
- form: "array",
55343
- optional: false
55344
- }],
55345
55177
  "pipelineAnalytics.listRecentTracks": [{
55346
55178
  name: "deviceIds",
55347
55179
  form: "array",
@@ -55352,11 +55184,6 @@ Object.freeze({
55352
55184
  form: "array",
55353
55185
  optional: true
55354
55186
  }],
55355
- "pipelineAnalytics.listSummaries": [{
55356
- name: "deviceIds",
55357
- form: "array",
55358
- optional: false
55359
- }],
55360
55187
  "pipelineAnalytics.listTrackMedia": [{
55361
55188
  name: "deviceId",
55362
55189
  form: "single",
@@ -701,7 +701,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
701
701
  return EventCategory;
702
702
  }({});
703
703
  //#endregion
704
- //#region ../types/dist/sleep-DlrgY4Qb.mjs
704
+ //#region ../types/dist/sleep-C-v96WpE.mjs
705
705
  /**
706
706
  * The audio chunk plane's byte format, and the ONE expansion from a coded
707
707
  * window to float samples (D455).
@@ -5194,7 +5194,6 @@ function featureSources(feature) {
5194
5194
  }
5195
5195
  new Set([
5196
5196
  "track",
5197
- "summary",
5198
5197
  "face",
5199
5198
  "identity",
5200
5199
  "plate",
@@ -22254,141 +22253,6 @@ var RecentTracksQueryInput = z.object({
22254
22253
  /** See {@link ExcludeSourcesDoc}. */
22255
22254
  excludeSources: z.array(TrackSourceSchema).optional()
22256
22255
  });
22257
- /**
22258
- * A Summary (D359): the per-camera session envelope that references tracks.
22259
- * `groupShotMediaId` is the media ROW id of its group shot (`ownerKind:
22260
- * 'summary'`, served by the event-media plane at `/m/<id>`), null until the
22261
- * first frame with a member visible has been materialised (D482 — it was the
22262
- * row's composite key, which embedded the owner and could name another table's
22263
- * row once event ids became per-table rowids).
22264
- */
22265
- var SummarySchema = z.object({
22266
- id: z.string(),
22267
- deviceId: z.number(),
22268
- openedAt: z.number(),
22269
- lastActiveAt: z.number(),
22270
- sealedAt: z.number().nullable(),
22271
- memberCount: z.number().int().nonnegative(),
22272
- groupShotMediaId: z.number().int().nullable()
22273
- });
22274
- var SummariesQueryInput = z.object({
22275
- deviceIds: z.array(z.number()).min(1),
22276
- since: z.number().optional(),
22277
- until: z.number().optional(),
22278
- limit: z.number().int().min(1).max(200).default(50),
22279
- /** The same member-wise filter {@link listRecentSummaries} takes — one
22280
- * meaning of "dog" on every summary surface. */
22281
- classes: z.array(z.string().min(1).max(60)).max(40).optional()
22282
- });
22283
- /**
22284
- * One member of a group, as a reader needs it.
22285
- *
22286
- * The class and the role travel WITH the id because every consumer that shows
22287
- * a group has to say what it was made of — "two people and a dog" — and asking
22288
- * `getTrack` per member to find that out turns one card into `memberCount`
22289
- * round trips. The member row already holds both (they are written at the
22290
- * join), so this costs the reader nothing.
22291
- */
22292
- var SummaryMemberSchema = z.object({
22293
- trackId: z.string(),
22294
- /**
22295
- * The track's class at the time it JOINED, or `null` when it was unresolved
22296
- * and the track no longer exists to fill it.
22297
- *
22298
- * The join, not the latest opinion: class voting can re-decide a track's
22299
- * class afterwards, and a group's composition is the history of who came
22300
- * together. A consumer counts these to badge a thumbnail — "two people and a
22301
- * dog" — rather than being handed a second, denormalised tally that would
22302
- * drift from the members it claims to describe.
22303
- */
22304
- className: z.string().nullable(),
22305
- /** `primary` is the one member that carries the group's identity. */
22306
- role: z.enum([
22307
- "primary",
22308
- "sibling",
22309
- "child"
22310
- ]).nullable(),
22311
- joinedAt: z.number(),
22312
- /** Tier 1 — the sub-class (`dog`, `van`), resolved from the member's track
22313
- * at read time. Absent when nothing resolved, never an empty string. */
22314
- label: z.string().optional(),
22315
- /** Tier 2 — the instance: a person's name, a plate. Absent when the pipeline
22316
- * recognised nobody, and absent for a member whose track has been pruned —
22317
- * a thumbnail that names the wrong person is worse than one naming nobody. */
22318
- subLabel: z.string().optional()
22319
- });
22320
- var SummaryDetailSchema = z.object({
22321
- summary: SummarySchema,
22322
- /** Members in absorption order, oldest join first. */
22323
- members: z.array(SummaryMemberSchema).readonly()
22324
- });
22325
- /**
22326
- * What a LIST of groups carries: the envelope plus what it is MADE OF.
22327
- *
22328
- * Coarse on purpose — the operator's rule is "only the rough data on the list,
22329
- * we extend when we notice we need more". Enough to draw the card ("two people
22330
- * and a dog") and no more. The MEMBERS, their names and the per-member links
22331
- * are on {@link getSummary}: shipping every member of every group so a client
22332
- * can count them turns a page of two hundred groups into a thousand records to
22333
- * draw two hundred badges.
22334
- */
22335
- var SummaryListItemSchema = z.object({
22336
- summary: SummarySchema,
22337
- /** Class counts, most numerous first; `className: null` is a member whose
22338
- * class never resolved, counted so the counts add up to `memberCount`. */
22339
- classes: z.array(z.object({
22340
- className: z.string().nullable(),
22341
- count: z.number().int().positive()
22342
- })).readonly()
22343
- });
22344
- var SummariesPageSchema = z.object({ summaries: z.array(SummaryListItemSchema).readonly() });
22345
- /**
22346
- * The paged feed, deliberately the SAME shape as {@link RecentTracksQueryInput}.
22347
- *
22348
- * The reel on the cameras page and the Events gallery both ride a cursor, so a
22349
- * summaries feed that could only answer "the last N for these cameras"
22350
- * (`listSummaries`) would make groups available in the timeline and nowhere
22351
- * else. Two feeds with different ordering contracts would be two ideas of what
22352
- * "newest" means, on one screen.
22353
- */
22354
- var RecentSummariesQueryInput = z.object({
22355
- /** Devices to merge. An empty array yields an empty page. */
22356
- deviceIds: z.array(z.number()),
22357
- /** Window lower bound on `lastActiveAt` (inclusive). */
22358
- since: z.number().optional(),
22359
- /** Window upper bound on `lastActiveAt` (inclusive). */
22360
- until: z.number().optional(),
22361
- limit: z.number().int().min(1).max(500).default(100),
22362
- /** Opaque continuation cursor from a previous page's `nextCursor`. */
22363
- cursor: z.string().optional(),
22364
- /**
22365
- * Restrict to these classes — THE SAME FIELD `listRecentTracks` takes, and
22366
- * deliberately the same name: the events filter tree emits one list of ticked
22367
- * taxonomy nodes, and a summaries feed that called it something else would
22368
- * make the operator's one filter component produce two shapes.
22369
- *
22370
- * A question about the MEMBERS: a group matches when ANY of them does. "Show
22371
- * me the arrivals with a dog" has to return the group of four people who had
22372
- * one with them; a filter on the group's own fields could only ever answer
22373
- * about its primary.
22374
- *
22375
- * Matched against all THREE tiers of a member — the class (`animal`), the
22376
- * sub-class (`dog`) and the instance (a name, a plate) — because which tier a
22377
- * ticked node lives on is the taxonomy's business, not the caller's. `dog` is
22378
- * an event kind in the tree and a tier-1 label on an `animal` track; a filter
22379
- * that read only the class would answer "animal" and never "dog".
22380
- *
22381
- * ABSENT or EMPTY means no filter — absent is not a selection of none.
22382
- */
22383
- classes: z.array(z.string().min(1).max(60)).max(40).optional()
22384
- });
22385
- var RecentSummariesPageSchema = z.object({
22386
- /** Ordered by (`lastActiveAt` DESC, id DESC). Same light item as
22387
- * {@link listSummaries} — one list shape, so a card renders the same
22388
- * whichever feed drew it. */
22389
- summaries: z.array(SummaryListItemSchema).readonly(),
22390
- nextCursor: z.string().nullable()
22391
- });
22392
22256
  var RecentTracksPageSchema = z.object({
22393
22257
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
22394
22258
  tracks: z.array(TrackSchema).readonly(),
@@ -22926,15 +22790,6 @@ var pipelineAnalyticsCapability = {
22926
22790
  * are not included (same contract as `listTracks`).
22927
22791
  */
22928
22792
  listRecentTracks: method(RecentTracksQueryInput, RecentTracksPageSchema),
22929
- /** Newest first by `openedAt`, for a camera set, inside an optional window. */
22930
- listSummaries: method(SummariesQueryInput, SummariesPageSchema),
22931
- /**
22932
- * The PAGED feed — the reel and the Events gallery. Same cursor contract as
22933
- * {@link listRecentTracks}, so one screen cannot hold two ideas of newest.
22934
- */
22935
- listRecentSummaries: method(RecentSummariesQueryInput, RecentSummariesPageSchema),
22936
- /** One summary with its member track ids; `null` for an id nobody wrote. */
22937
- getSummary: method(z.object({ id: z.string() }), SummaryDetailSchema.nullable()),
22938
22793
  clearTracks: method(z.object({ deviceId: z.number() }), z.void(), {
22939
22794
  kind: "mutation",
22940
22795
  auth: "admin"
@@ -51060,12 +50915,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
51060
50915
  addonId: null,
51061
50916
  access: "view"
51062
50917
  },
51063
- "pipelineAnalytics.getSummary": {
51064
- capName: "pipeline-analytics",
51065
- capScope: "device",
51066
- addonId: null,
51067
- access: "view"
51068
- },
51069
50918
  "pipelineAnalytics.getTrack": {
51070
50919
  capName: "pipeline-analytics",
51071
50920
  capScope: "device",
@@ -51126,12 +50975,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
51126
50975
  addonId: null,
51127
50976
  access: "view"
51128
50977
  },
51129
- "pipelineAnalytics.listRecentSummaries": {
51130
- capName: "pipeline-analytics",
51131
- capScope: "device",
51132
- addonId: null,
51133
- access: "view"
51134
- },
51135
50978
  "pipelineAnalytics.listRecentTracks": {
51136
50979
  capName: "pipeline-analytics",
51137
50980
  capScope: "device",
@@ -51162,12 +51005,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
51162
51005
  addonId: null,
51163
51006
  access: "view"
51164
51007
  },
51165
- "pipelineAnalytics.listSummaries": {
51166
- capName: "pipeline-analytics",
51167
- capScope: "device",
51168
- addonId: null,
51169
- access: "view"
51170
- },
51171
51008
  "pipelineAnalytics.listTrackMedia": {
51172
51009
  capName: "pipeline-analytics",
51173
51010
  capScope: "device",
@@ -55337,11 +55174,6 @@ Object.freeze({
55337
55174
  form: "single",
55338
55175
  optional: true
55339
55176
  }],
55340
- "pipelineAnalytics.listRecentSummaries": [{
55341
- name: "deviceIds",
55342
- form: "array",
55343
- optional: false
55344
- }],
55345
55177
  "pipelineAnalytics.listRecentTracks": [{
55346
55178
  name: "deviceIds",
55347
55179
  form: "array",
@@ -55352,11 +55184,6 @@ Object.freeze({
55352
55184
  form: "array",
55353
55185
  optional: true
55354
55186
  }],
55355
- "pipelineAnalytics.listSummaries": [{
55356
- name: "deviceIds",
55357
- form: "array",
55358
- optional: false
55359
- }],
55360
55187
  "pipelineAnalytics.listTrackMedia": [{
55361
55188
  name: "deviceId",
55362
55189
  form: "single",
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("./chunk-Cek0wNdY.js");
3
- const require_dist = require("./dist-Dcy0gVHu.js");
3
+ const require_dist = require("./dist-B0AvBZxe.js");
4
4
  const require_builtins_alerts_alerts_addon = require("./builtins/alerts/alerts.addon.js");
5
5
  require("./builtins/alerts/index.js");
6
6
  const require_builtins_composer_composer_addon = require("./builtins/composer/composer.addon.js");
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM$1, r as __exportAll, t as __commonJSMin$1 } from "./chunk-CNf5ZN-e.mjs";
2
- import { $n as asNumber, Bt as looseSchema, C as METHOD_ACCESS_MAP, Dt as isCollectionArrayMethod, Et as isArrayOutputSchema, Ft as lifecycleJobSchema, Jn as DEVICE_STATUS_METHOD, Jt as objectInputDeclaresRequiredDeviceId, Kn as DATAPLANE_SECRET_HEADER$1, Mt as kebabToCamel, O as RUNTIME_DEFAULTS, Qn as asJsonObject$1, Qt as procedureAuthKey, Wn as errMsg$1, Xn as ReadinessTimeoutError, Yn as ReadinessRegistry, b as LOG_LEVEL_RANK, dr as readinessKey, er as asString$1, fr as resolveCapMount, hr as EventCategory$1, in as resolveMethodAuth, ir as expandCapMethods, jt as isVoidInput, kt as isObjectInput, lr as parseJsonObject, nr as emitDownForOwnedCaps, on as scopesAllowAddon, pr as scopeKey, qn as DEVICE_SETTINGS_CONTRIBUTION_METHODS, qt as objectInputDeclaresAddonId, sn as scopesAllowDeviceCap, t as ALL_CAPABILITY_DEFINITIONS, tr as createEvent, ur as parseJsonUnknown, xt as extractNestedAddonId, z as addonSettingsCapability, zt as logLevelAtMost } from "./dist-CQ9vXSUh.mjs";
2
+ import { $n as asNumber, Bt as looseSchema, C as METHOD_ACCESS_MAP, Dt as isCollectionArrayMethod, Et as isArrayOutputSchema, Ft as lifecycleJobSchema, Jn as DEVICE_STATUS_METHOD, Jt as objectInputDeclaresRequiredDeviceId, Kn as DATAPLANE_SECRET_HEADER$1, Mt as kebabToCamel, O as RUNTIME_DEFAULTS, Qn as asJsonObject$1, Qt as procedureAuthKey, Wn as errMsg$1, Xn as ReadinessTimeoutError, Yn as ReadinessRegistry, b as LOG_LEVEL_RANK, dr as readinessKey, er as asString$1, fr as resolveCapMount, hr as EventCategory$1, in as resolveMethodAuth, ir as expandCapMethods, jt as isVoidInput, kt as isObjectInput, lr as parseJsonObject, nr as emitDownForOwnedCaps, on as scopesAllowAddon, pr as scopeKey, qn as DEVICE_SETTINGS_CONTRIBUTION_METHODS, qt as objectInputDeclaresAddonId, sn as scopesAllowDeviceCap, t as ALL_CAPABILITY_DEFINITIONS, tr as createEvent, ur as parseJsonUnknown, xt as extractNestedAddonId, z as addonSettingsCapability, zt as logLevelAtMost } from "./dist-XfFiGX64.mjs";
3
3
  import { AlertCenterAddon } from "./builtins/alerts/alerts.addon.mjs";
4
4
  import "./builtins/alerts/index.mjs";
5
5
  import { ComposerAddon } from "./builtins/composer/composer.addon.mjs";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-Dcy0gVHu.js");
1
+ const require_dist = require("./dist-B0AvBZxe.js");
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
@@ -1,4 +1,4 @@
1
- import { Qn as asJsonObject } from "./dist-CQ9vXSUh.mjs";
1
+ import { Qn as asJsonObject } from "./dist-XfFiGX64.mjs";
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?