@camstack/addon-post-analysis 1.2.373 → 1.2.601

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 (15) hide show
  1. package/dist/{clip-model-registry-jeFu3pma.mjs → clip-model-registry-BuM8eXlN.mjs} +1004 -117
  2. package/dist/{clip-model-registry-Cy2RokDO.js → clip-model-registry-DAZ9ie-f.js} +1027 -116
  3. package/dist/embedding-encoder/index.js +1 -1
  4. package/dist/embedding-encoder/index.mjs +1 -1
  5. package/dist/pipeline-analytics/_stub.js +2 -2
  6. package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-ujfvEENv.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-DAs_96VP.mjs} +3 -3
  7. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CElkWYPg.mjs +26 -0
  8. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-SRvLcL_J.mjs +26 -0
  9. package/dist/pipeline-analytics/{hostInit-Ddz0CyLk.mjs → hostInit-C3wjY7W8.mjs} +3 -3
  10. package/dist/pipeline-analytics/index.js +79652 -79203
  11. package/dist/pipeline-analytics/index.mjs +79072 -78623
  12. package/dist/pipeline-analytics/remoteEntry.js +1 -1
  13. package/package.json +1 -1
  14. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CyYkqCmx.mjs +0 -26
  15. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Kh1uHJki.mjs +0 -26
@@ -4168,6 +4168,12 @@ var numberProcessor = (schema, ctx, _json, _params) => {
4168
4168
  var booleanProcessor = (_schema, _ctx, json, _params) => {
4169
4169
  json.type = "boolean";
4170
4170
  };
4171
+ var bigintProcessor = (_schema, ctx, _json, _params) => {
4172
+ if (ctx.unrepresentable === "throw") throw new Error("BigInt cannot be represented in JSON Schema");
4173
+ };
4174
+ var symbolProcessor = (_schema, ctx, _json, _params) => {
4175
+ if (ctx.unrepresentable === "throw") throw new Error("Symbols cannot be represented in JSON Schema");
4176
+ };
4171
4177
  var nullProcessor = (_schema, ctx, json, _params) => {
4172
4178
  if (ctx.target === "openapi-3.0") {
4173
4179
  json.type = "string";
@@ -4175,12 +4181,17 @@ var nullProcessor = (_schema, ctx, json, _params) => {
4175
4181
  json.enum = [null];
4176
4182
  } else json.type = "null";
4177
4183
  };
4184
+ var undefinedProcessor = (_schema, ctx, _json, _params) => {
4185
+ if (ctx.unrepresentable === "throw") throw new Error("Undefined cannot be represented in JSON Schema");
4186
+ };
4178
4187
  var voidProcessor = (_schema, ctx, _json, _params) => {
4179
4188
  if (ctx.unrepresentable === "throw") throw new Error("Void cannot be represented in JSON Schema");
4180
4189
  };
4181
4190
  var neverProcessor = (_schema, _ctx, json, _params) => {
4182
4191
  json.not = {};
4183
4192
  };
4193
+ var anyProcessor = (_schema, _ctx, _json, _params) => {};
4194
+ var unknownProcessor = (_schema, _ctx, _json, _params) => {};
4184
4195
  var dateProcessor = (_schema, ctx, _json, _params) => {
4185
4196
  if (ctx.unrepresentable === "throw") throw new Error("Date cannot be represented in JSON Schema");
4186
4197
  };
@@ -4212,6 +4223,9 @@ var literalProcessor = (schema, ctx, json, _params) => {
4212
4223
  json.enum = vals;
4213
4224
  }
4214
4225
  };
4226
+ var nanProcessor = (_schema, ctx, _json, _params) => {
4227
+ if (ctx.unrepresentable === "throw") throw new Error("NaN cannot be represented in JSON Schema");
4228
+ };
4215
4229
  var templateLiteralProcessor = (schema, _ctx, json, _params) => {
4216
4230
  const _json = json;
4217
4231
  const pattern = schema._zod.pattern;
@@ -4219,12 +4233,43 @@ var templateLiteralProcessor = (schema, _ctx, json, _params) => {
4219
4233
  _json.type = "string";
4220
4234
  _json.pattern = pattern.source;
4221
4235
  };
4236
+ var fileProcessor = (schema, _ctx, json, _params) => {
4237
+ const _json = json;
4238
+ const file = {
4239
+ type: "string",
4240
+ format: "binary",
4241
+ contentEncoding: "binary"
4242
+ };
4243
+ const { minimum, maximum, mime } = schema._zod.bag;
4244
+ if (minimum !== void 0) file.minLength = minimum;
4245
+ if (maximum !== void 0) file.maxLength = maximum;
4246
+ if (mime) if (mime.length === 1) {
4247
+ file.contentMediaType = mime[0];
4248
+ Object.assign(_json, file);
4249
+ } else {
4250
+ Object.assign(_json, file);
4251
+ _json.anyOf = mime.map((m) => ({ contentMediaType: m }));
4252
+ }
4253
+ else Object.assign(_json, file);
4254
+ };
4255
+ var successProcessor = (_schema, _ctx, json, _params) => {
4256
+ json.type = "boolean";
4257
+ };
4222
4258
  var customProcessor = (_schema, ctx, _json, _params) => {
4223
4259
  if (ctx.unrepresentable === "throw") throw new Error("Custom types cannot be represented in JSON Schema");
4224
4260
  };
4261
+ var functionProcessor = (_schema, ctx, _json, _params) => {
4262
+ if (ctx.unrepresentable === "throw") throw new Error("Function types cannot be represented in JSON Schema");
4263
+ };
4225
4264
  var transformProcessor = (_schema, ctx, _json, _params) => {
4226
4265
  if (ctx.unrepresentable === "throw") throw new Error("Transforms cannot be represented in JSON Schema");
4227
4266
  };
4267
+ var mapProcessor = (_schema, ctx, _json, _params) => {
4268
+ if (ctx.unrepresentable === "throw") throw new Error("Map cannot be represented in JSON Schema");
4269
+ };
4270
+ var setProcessor = (_schema, ctx, _json, _params) => {
4271
+ if (ctx.unrepresentable === "throw") throw new Error("Set cannot be represented in JSON Schema");
4272
+ };
4228
4273
  var arrayProcessor = (schema, ctx, _json, params) => {
4229
4274
  const json = _json;
4230
4275
  const def = schema._zod.def;
@@ -4429,6 +4474,12 @@ var readonlyProcessor = (schema, ctx, json, params) => {
4429
4474
  seen.ref = def.innerType;
4430
4475
  json.readOnly = true;
4431
4476
  };
4477
+ var promiseProcessor = (schema, ctx, _json, params) => {
4478
+ const def = schema._zod.def;
4479
+ process(def.innerType, ctx, params);
4480
+ const seen = ctx.seen.get(schema);
4481
+ seen.ref = def.innerType;
4482
+ };
4432
4483
  var optionalProcessor = (schema, ctx, _json, params) => {
4433
4484
  const def = schema._zod.def;
4434
4485
  process(def.innerType, ctx, params);
@@ -4441,6 +4492,81 @@ var lazyProcessor = (schema, ctx, _json, params) => {
4441
4492
  const seen = ctx.seen.get(schema);
4442
4493
  seen.ref = innerType;
4443
4494
  };
4495
+ var allProcessors = {
4496
+ string: stringProcessor,
4497
+ number: numberProcessor,
4498
+ boolean: booleanProcessor,
4499
+ bigint: bigintProcessor,
4500
+ symbol: symbolProcessor,
4501
+ null: nullProcessor,
4502
+ undefined: undefinedProcessor,
4503
+ void: voidProcessor,
4504
+ never: neverProcessor,
4505
+ any: anyProcessor,
4506
+ unknown: unknownProcessor,
4507
+ date: dateProcessor,
4508
+ enum: enumProcessor,
4509
+ literal: literalProcessor,
4510
+ nan: nanProcessor,
4511
+ template_literal: templateLiteralProcessor,
4512
+ file: fileProcessor,
4513
+ success: successProcessor,
4514
+ custom: customProcessor,
4515
+ function: functionProcessor,
4516
+ transform: transformProcessor,
4517
+ map: mapProcessor,
4518
+ set: setProcessor,
4519
+ array: arrayProcessor,
4520
+ object: objectProcessor,
4521
+ union: unionProcessor,
4522
+ intersection: intersectionProcessor,
4523
+ tuple: tupleProcessor,
4524
+ record: recordProcessor,
4525
+ nullable: nullableProcessor,
4526
+ nonoptional: nonoptionalProcessor,
4527
+ default: defaultProcessor,
4528
+ prefault: prefaultProcessor,
4529
+ catch: catchProcessor,
4530
+ pipe: pipeProcessor,
4531
+ readonly: readonlyProcessor,
4532
+ promise: promiseProcessor,
4533
+ optional: optionalProcessor,
4534
+ lazy: lazyProcessor
4535
+ };
4536
+ function toJSONSchema(input, params) {
4537
+ if ("_idmap" in input) {
4538
+ const registry = input;
4539
+ const ctx = initializeContext({
4540
+ ...params,
4541
+ processors: allProcessors
4542
+ });
4543
+ const defs = {};
4544
+ for (const entry of registry._idmap.entries()) {
4545
+ const [_, schema] = entry;
4546
+ process(schema, ctx);
4547
+ }
4548
+ const schemas = {};
4549
+ ctx.external = {
4550
+ registry,
4551
+ uri: params?.uri,
4552
+ defs
4553
+ };
4554
+ for (const entry of registry._idmap.entries()) {
4555
+ const [key, schema] = entry;
4556
+ extractDefs(ctx, schema);
4557
+ schemas[key] = finalize(ctx, schema);
4558
+ }
4559
+ if (Object.keys(defs).length > 0) schemas.__shared = { [ctx.target === "draft-2020-12" ? "$defs" : "definitions"]: defs };
4560
+ return { schemas };
4561
+ }
4562
+ const ctx = initializeContext({
4563
+ ...params,
4564
+ processors: allProcessors
4565
+ });
4566
+ process(input, ctx);
4567
+ extractDefs(ctx, input);
4568
+ return finalize(ctx, input);
4569
+ }
4444
4570
  //#endregion
4445
4571
  //#region ../../node_modules/zod/v4/classic/iso.js
4446
4572
  var ZodISODateTime = /*@__PURE__*/ $constructor("ZodISODateTime", (inst, def) => {
@@ -5477,7 +5603,7 @@ var ZodIssueCode = {
5477
5603
  var ZodFirstPartyTypeKind;
5478
5604
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5479
5605
  //#endregion
5480
- //#region ../types/dist/sleep-bgZLodYc.mjs
5606
+ //#region ../types/dist/sleep-bZIhUvjd.mjs
5481
5607
  /**
5482
5608
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5483
5609
  * window to float samples (D455).
@@ -5594,7 +5720,7 @@ function isKeychainStoredField(field) {
5594
5720
  var SECRET_CLEAR = { $secretClear: true };
5595
5721
  /** The `'***'` token D634 redaction writes for non-admins. */
5596
5722
  var LEGACY_DEVICE_REDACTION = "***";
5597
- function isRecord$2(value) {
5723
+ function isRecord$5(value) {
5598
5724
  return typeof value === "object" && value !== null && !Array.isArray(value);
5599
5725
  }
5600
5726
  function makeSecretMarker(ref) {
@@ -5605,12 +5731,12 @@ function makeSecretMarker(ref) {
5605
5731
  }
5606
5732
  /** A stored marker: an object whose `$secret` is a non-empty string. */
5607
5733
  function isSecretMarker(value) {
5608
- if (!isRecord$2(value)) return false;
5734
+ if (!isRecord$5(value)) return false;
5609
5735
  const ref = value["$secret"];
5610
5736
  return typeof ref === "string" && ref.length > 0;
5611
5737
  }
5612
5738
  function isSecretClear(value) {
5613
- return isRecord$2(value) && value["$secretClear"] === true;
5739
+ return isRecord$5(value) && value["$secretClear"] === true;
5614
5740
  }
5615
5741
  /**
5616
5742
  * The UI view of a stored secret field value: a marker becomes "set", inline
@@ -6220,7 +6346,7 @@ var KeychainWriteRefusedError = class extends Error {
6220
6346
  }
6221
6347
  };
6222
6348
  var KEEP = { kind: "keep" };
6223
- function isRecord$1(value) {
6349
+ function isRecord$4(value) {
6224
6350
  return typeof value === "object" && value !== null && !Array.isArray(value);
6225
6351
  }
6226
6352
  function defaultMintId() {
@@ -6233,7 +6359,7 @@ function collectSecretMarkerRefs(value, out = []) {
6233
6359
  return out;
6234
6360
  }
6235
6361
  if (Array.isArray(value)) for (const item of value) collectSecretMarkerRefs(item, out);
6236
- else if (isRecord$1(value)) for (const child of Object.values(value)) collectSecretMarkerRefs(child, out);
6362
+ else if (isRecord$4(value)) for (const child of Object.values(value)) collectSecretMarkerRefs(child, out);
6237
6363
  return out;
6238
6364
  }
6239
6365
  async function storedValueEquals(secrets, marker, candidate) {
@@ -6288,7 +6414,7 @@ function rowId(row, idKey) {
6288
6414
  return null;
6289
6415
  }
6290
6416
  async function writeArray(ctx, node, incoming, stored, fieldPath) {
6291
- const storedRows = Array.isArray(stored) ? stored.filter(isRecord$1) : [];
6417
+ const storedRows = Array.isArray(stored) ? stored.filter(isRecord$4) : [];
6292
6418
  if (!Array.isArray(incoming)) {
6293
6419
  ctx.deletes.push(...collectSecretMarkerRefs(storedRows));
6294
6420
  return {
@@ -6304,7 +6430,7 @@ async function writeArray(ctx, node, incoming, stored, fieldPath) {
6304
6430
  const kept = /* @__PURE__ */ new Set();
6305
6431
  const rows = [];
6306
6432
  for (const row of incoming) {
6307
- if (!isRecord$1(row)) {
6433
+ if (!isRecord$4(row)) {
6308
6434
  rows.push(row);
6309
6435
  continue;
6310
6436
  }
@@ -6329,7 +6455,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
6329
6455
  case "leaf": return writeLeaf(ctx, incoming, stored, fieldPath);
6330
6456
  case "array": return writeArray(ctx, node, incoming, stored, fieldPath);
6331
6457
  case "object": {
6332
- if (!isRecord$1(incoming)) {
6458
+ if (!isRecord$4(incoming)) {
6333
6459
  if (incoming === void 0) return KEEP;
6334
6460
  ctx.deletes.push(...collectSecretMarkerRefs(stored));
6335
6461
  return {
@@ -6337,7 +6463,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
6337
6463
  value: incoming
6338
6464
  };
6339
6465
  }
6340
- const storedObj = isRecord$1(stored) ? stored : {};
6466
+ const storedObj = isRecord$4(stored) ? stored : {};
6341
6467
  return {
6342
6468
  kind: "value",
6343
6469
  value: await writeMembers(ctx, node.children, incoming, storedObj, (m) => `${fieldPath}.${m}`)
@@ -6460,7 +6586,7 @@ async function resolveSecretMarkers(value, secrets, options = {}) {
6460
6586
  value: items
6461
6587
  };
6462
6588
  }
6463
- if (isRecord$1(v)) {
6589
+ if (isRecord$4(v)) {
6464
6590
  const out = {};
6465
6591
  for (const [k, child] of Object.entries(v)) {
6466
6592
  const s = substitute(child);
@@ -6492,7 +6618,7 @@ var SecretOverwriteRefusedError = class extends Error {
6492
6618
  this.name = "SecretOverwriteRefusedError";
6493
6619
  }
6494
6620
  };
6495
- function isRecord(value) {
6621
+ function isRecord$3(value) {
6496
6622
  return typeof value === "object" && value !== null && !Array.isArray(value);
6497
6623
  }
6498
6624
  function resolvedValue(pass, marker) {
@@ -6521,7 +6647,7 @@ function inArray(pass, incoming, stored) {
6521
6647
  return incoming.map((item, index) => {
6522
6648
  const twin = stored[index];
6523
6649
  if (isSecretMarker(twin)) return typeof item === "string" && item === resolvedValue(pass, twin) ? twin : item;
6524
- if (isRecord(item) && isRecord(twin)) return inArrayRow(pass, item, twin);
6650
+ if (isRecord$3(item) && isRecord$3(twin)) return inArrayRow(pass, item, twin);
6525
6651
  if (Array.isArray(item) && Array.isArray(twin)) return inArray(pass, item, twin);
6526
6652
  return item;
6527
6653
  });
@@ -6532,7 +6658,7 @@ function inArrayRow(pass, incoming, stored) {
6532
6658
  const twin = stored[key];
6533
6659
  if (isSecretMarker(twin)) {
6534
6660
  if (typeof value === "string" && value === resolvedValue(pass, twin)) out[key] = twin;
6535
- } else if (isRecord(value) && isRecord(twin)) out[key] = inArrayRow(pass, value, twin);
6661
+ } else if (isRecord$3(value) && isRecord$3(twin)) out[key] = inArrayRow(pass, value, twin);
6536
6662
  else if (Array.isArray(value) && Array.isArray(twin)) out[key] = inArray(pass, value, twin);
6537
6663
  }
6538
6664
  return out;
@@ -6540,7 +6666,7 @@ function inArrayRow(pass, incoming, stored) {
6540
6666
  async function walk(pass, incoming, stored) {
6541
6667
  if (isSecretMarker(stored)) return atMarker(pass, incoming, stored);
6542
6668
  if (Array.isArray(incoming) && Array.isArray(stored)) return inArray(pass, incoming, stored);
6543
- if (!isRecord(incoming) || !isRecord(stored)) return incoming;
6669
+ if (!isRecord$3(incoming) || !isRecord$3(stored)) return incoming;
6544
6670
  const out = { ...incoming };
6545
6671
  for (const [key, value] of Object.entries(incoming)) out[key] = await walk(pass, value, stored[key]);
6546
6672
  return out;
@@ -6571,7 +6697,7 @@ async function restoreUnchangedSecrets(input) {
6571
6697
  function isJsonEqual(a, b) {
6572
6698
  if (Object.is(a, b)) return true;
6573
6699
  if (Array.isArray(a)) return Array.isArray(b) && a.length === b.length && a.every((v, i) => isJsonEqual(v, b[i]));
6574
- if (isRecord(a) && isRecord(b)) {
6700
+ if (isRecord$3(a) && isRecord$3(b)) {
6575
6701
  const keys = Object.keys(a);
6576
6702
  if (keys.length !== Object.keys(b).length) return false;
6577
6703
  return keys.every((k) => Object.prototype.hasOwnProperty.call(b, k) && isJsonEqual(a[k], b[k]));
@@ -6595,7 +6721,7 @@ function markerKeysOf(blob, owner) {
6595
6721
  }
6596
6722
  function nodeFromStored(value, owner) {
6597
6723
  if (isSecretMarker(value)) return isSecretRefOwnedBy(value.$secret, owner) ? { kind: "leaf" } : null;
6598
- if (!isRecord(value)) return null;
6724
+ if (!isRecord$3(value)) return null;
6599
6725
  const children = /* @__PURE__ */ new Map();
6600
6726
  for (const [key, child] of Object.entries(value)) {
6601
6727
  const node = nodeFromStored(child, owner);
@@ -7383,7 +7509,7 @@ var BaseAddon = class {
7383
7509
  if (!ctx) return;
7384
7510
  const addonId = ctx.id;
7385
7511
  setImmediate(() => {
7386
- ctx.api.addons?.restartAddon?.mutate({ addonId }).then(() => {
7512
+ ctx.api.addons.restartAddon.mutate({ addonId }).then(() => {
7387
7513
  ctx.logger.info("addon auto-restart triggered by restart-required setting change", { meta: { changedFields: patchKeys.filter((k) => restartKeys.has(k)) } });
7388
7514
  }).catch((err) => {
7389
7515
  ctx.logger.error("addon auto-restart failed", { meta: { error: err instanceof Error ? err.message : String(err) } });
@@ -7877,6 +8003,303 @@ var PeerBytesTicketSchema = object({
7877
8003
  */
7878
8004
  declaredBytes: number().int().nonnegative().nullable()
7879
8005
  });
8006
+ /** Limits and names of `ctx.records` (D881). One authority; the engine and the facade read it. */
8007
+ /** The files a kind may live in. `history` is device-history's (D850), never records. */
8008
+ var RECORD_DATABASES = ["settings", "events"];
8009
+ /** The classes of a kind: the `@durable` vocabulary, one authority (replaces the annotation). */
8010
+ var RECORD_CLASSES = [
8011
+ "config",
8012
+ "ledger",
8013
+ "audit",
8014
+ "mirror",
8015
+ "ephemeral"
8016
+ ];
8017
+ var RECORD_DEFAULT_MAX_DATA_BYTES = 64 * 1024;
8018
+ var RECORD_MAX_DATA_BYTES = 1024 * 1024;
8019
+ var RECORD_BATCH_MAX = 1e3;
8020
+ var RECORD_QUERY_MAX = 1e3;
8021
+ /** A kind in the `settings` file may not bound itself above this (D447: high volume is `events`). */
8022
+ var RECORD_SETTINGS_MAX_ROWS = 5e4;
8023
+ var PREFIX = "records/";
8024
+ /** The base of every records failure. `detail` is the human part of the message. */
8025
+ var RecordsError = class extends Error {
8026
+ code;
8027
+ detail;
8028
+ constructor(code, detail) {
8029
+ super(`${PREFIX}${code}: ${detail}`);
8030
+ this.name = "RecordsError";
8031
+ this.code = code;
8032
+ this.detail = detail;
8033
+ }
8034
+ };
8035
+ var InvalidRecordError = class extends RecordsError {
8036
+ constructor(detail) {
8037
+ super("invalid-record", detail);
8038
+ this.name = "InvalidRecordError";
8039
+ }
8040
+ };
8041
+ /** A kind declaration the engine refuses (non-additive change, bad shape, wrong file). */
8042
+ var DeclarationRefusedError = class extends RecordsError {
8043
+ constructor(detail) {
8044
+ super("declaration-refused", detail);
8045
+ this.name = "DeclarationRefusedError";
8046
+ }
8047
+ };
8048
+ function defOf(schema) {
8049
+ const zodBag = Reflect.get(schema, "_zod");
8050
+ if (typeof zodBag !== "object" || zodBag === null) return {};
8051
+ const def = Reflect.get(zodBag, "def");
8052
+ if (typeof def !== "object" || def === null) return {};
8053
+ return def;
8054
+ }
8055
+ function declaredHere(schema) {
8056
+ return globalRegistry.get(schema)?.secret === true;
8057
+ }
8058
+ /** Wrapper kinds whose `innerType` is the field itself. */
8059
+ var WRAPPERS = new Set([
8060
+ "optional",
8061
+ "nullable",
8062
+ "default",
8063
+ "prefault",
8064
+ "catch",
8065
+ "readonly",
8066
+ "nonoptional"
8067
+ ]);
8068
+ /**
8069
+ * The schema layers that make up ONE field: the schema itself and every
8070
+ * wrapper below it (optional / default / nullable / readonly / catch), plus
8071
+ * both sides of a pipe (`z.preprocess` puts the real schema on `out`,
8072
+ * `.transform` on `in`).
8073
+ */
8074
+ function layersOf(schema) {
8075
+ const out = [];
8076
+ const queue = [schema];
8077
+ while (queue.length > 0) {
8078
+ const s = queue.shift();
8079
+ if (!s || out.includes(s)) continue;
8080
+ out.push(s);
8081
+ const def = defOf(s);
8082
+ if (def.type !== void 0 && WRAPPERS.has(def.type) && def.innerType) queue.push(def.innerType);
8083
+ if (def.type === "pipe") {
8084
+ if (def.in) queue.push(def.in);
8085
+ if (def.out) queue.push(def.out);
8086
+ }
8087
+ }
8088
+ return out;
8089
+ }
8090
+ /** True when any layer of this field declares `.meta({ secret: true })`. */
8091
+ function isZodSecret(schema) {
8092
+ return layersOf(schema).some(declaredHere);
8093
+ }
8094
+ /**
8095
+ * Every declared secret path in a config schema: dotted keys, `[]` for "each
8096
+ * element of this array" (`connection.password`, `rows[].token`). A declared
8097
+ * object or array is reported as one path and not descended into — everything
8098
+ * under it is secret.
8099
+ */
8100
+ function collectZodSecretPaths(schema, prefix = "") {
8101
+ if (isZodSecret(schema)) return prefix.length > 0 ? [prefix] : [];
8102
+ const paths = [];
8103
+ for (const layer of layersOf(schema)) {
8104
+ const def = defOf(layer);
8105
+ if (def.type === "object" && def.shape) for (const [key, child] of Object.entries(def.shape)) paths.push(...collectZodSecretPaths(child, prefix ? `${prefix}.${key}` : key));
8106
+ else if (def.type === "array" && def.element) paths.push(...collectZodSecretPaths(def.element, `${prefix}[]`));
8107
+ else if (def.type === "union" && def.options) for (const option of def.options) paths.push(...collectZodSecretPaths(option, prefix));
8108
+ else if (def.type === "intersection") {
8109
+ if (def.left) paths.push(...collectZodSecretPaths(def.left, prefix));
8110
+ if (def.right) paths.push(...collectZodSecretPaths(def.right, prefix));
8111
+ }
8112
+ }
8113
+ return [...new Set(paths)];
8114
+ }
8115
+ /**
8116
+ * Secret fields of a record, addressed the way a Zod schema declares them
8117
+ * (`collectZodSecretPaths`): dotted keys, `[]` for "each element of this array"
8118
+ * (`auth.accessToken`, `headers[].value`).
8119
+ *
8120
+ * Array elements are matched by a DECLARED id key (`secretArrayKeys`:
8121
+ * `{ headers: 'name' }`), never by index, so reordering a list keeps every
8122
+ * keychain ref (the same rule as `arrayItemFieldPath`). The concrete path of a
8123
+ * leaf names its element: `headers[X-Api].value`.
8124
+ *
8125
+ * Pure and browser-safe. Nothing here mutates: every transform returns a new value.
8126
+ */
8127
+ /** The array prefixes (declared form, e.g. `headers` or `a.headers`) of a path. */
8128
+ function parseSecretPath(path) {
8129
+ if (path.length === 0) throw new InvalidRecordError("an empty secret path");
8130
+ return path.split(".").map((raw) => {
8131
+ const each = raw.endsWith("[]");
8132
+ const key = each ? raw.slice(0, -2) : raw;
8133
+ if (key.length === 0) throw new InvalidRecordError(`secret path "${path}" has an empty segment`);
8134
+ return {
8135
+ key,
8136
+ each
8137
+ };
8138
+ });
8139
+ }
8140
+ /** The declared array prefixes of `path` that need an id key (`headers`, `a.rows`). */
8141
+ function secretArrayPrefixes(path) {
8142
+ const segments = parseSecretPath(path);
8143
+ const prefixes = [];
8144
+ const walked = [];
8145
+ for (const segment of segments) {
8146
+ walked.push(segment.key);
8147
+ if (segment.each) prefixes.push(walked.join("."));
8148
+ }
8149
+ return prefixes;
8150
+ }
8151
+ /**
8152
+ * Record kinds (D881): the declaration an addon makes of one kind of fact, the
8153
+ * Zod row schema that describes it, and the helper that turns the two into the
8154
+ * JSON the engine stores.
8155
+ *
8156
+ * A kind is declared ONCE, next to the code that owns it, and the engine's
8157
+ * reconciler creates its indexes - nothing creates DDL at runtime from a write.
8158
+ * Everything the generic machinery needs (secret fields, the entry descriptor)
8159
+ * is DERIVED from the Zod schema: `.meta({ secret: true })` marks a credential,
8160
+ * never a field name (D879).
8161
+ */
8162
+ /** A JSON field path: `trackId`, `auth.accessToken`. Charset-restricted: it is rendered into DDL. */
8163
+ var RecordFieldPathSchema = string().regex(/^[A-Za-z_][A-Za-z0-9_]{0,63}(\.[A-Za-z_][A-Za-z0-9_]{0,63}){0,3}$/);
8164
+ var RecordIndexSchema = object({
8165
+ name: string().regex(/^[a-z][a-z0-9_]{0,31}$/),
8166
+ fields: array(RecordFieldPathSchema).min(1).max(4),
8167
+ unique: boolean().optional()
8168
+ }).strict();
8169
+ var RecordRetentionSchema = union([
8170
+ object({
8171
+ ttlMs: number().int().positive(),
8172
+ from: _enum(["at", "write"])
8173
+ }).strict(),
8174
+ object({
8175
+ maxRows: number().int().positive().optional(),
8176
+ maxRowsPerDevice: number().int().positive().optional()
8177
+ }).strict().refine((r) => r.maxRows !== void 0 || r.maxRowsPerDevice !== void 0, { message: "name maxRows, maxRowsPerDevice or both" }),
8178
+ object({
8179
+ owner: string().min(1),
8180
+ reason: string().min(1)
8181
+ }).strict(),
8182
+ object({ none: string().min(1) }).strict()
8183
+ ]);
8184
+ /** The descriptor a generic entries UI reads (D881 "generic entries"). */
8185
+ var EntryDescriptorSchema = object({
8186
+ title: string().min(1),
8187
+ /** The record body field shown as the entry's name. */
8188
+ nameField: string().min(1),
8189
+ /** JSON Schema of the entry body; `secret: true` marks a password field. */
8190
+ fields: record(string(), unknown())
8191
+ }).strict();
8192
+ /** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
8193
+ var RecordKindDeclarationSchema = object({
8194
+ database: _enum(RECORD_DATABASES).default("settings"),
8195
+ class: _enum(RECORD_CLASSES),
8196
+ writeTrigger: string().min(1),
8197
+ device: _enum([
8198
+ "required",
8199
+ "optional",
8200
+ "none"
8201
+ ]).default("none"),
8202
+ at: _enum(["required", "none"]).default("none"),
8203
+ indexes: array(RecordIndexSchema).max(8).default([]),
8204
+ retention: RecordRetentionSchema,
8205
+ deviceRemoval: _enum(["delete", "none"]).default("none"),
8206
+ maxDataBytes: number().int().positive().max(RECORD_MAX_DATA_BYTES).default(RECORD_DEFAULT_MAX_DATA_BYTES),
8207
+ /** Derived from the Zod schema; never written by hand. */
8208
+ secretPaths: array(string().min(1)).default([]),
8209
+ /** The id key of each array that carries a secret (`{ headers: 'name' }`). */
8210
+ secretArrayKeys: record(string(), string()).default({}),
8211
+ /** The legacy table this kind adopts from; the boot guard reads it (D853: no migration code). */
8212
+ adoptsFrom: string().min(1).optional(),
8213
+ /** Kinds that must agree through `transact` sit in one file under one family name. */
8214
+ transactFamily: string().min(1).optional(),
8215
+ entry: EntryDescriptorSchema.optional()
8216
+ }).strict();
8217
+ /** The kind names: lower-case, dash separated, short enough for an index name. */
8218
+ var RecordKindNameSchema = string().regex(/^[a-z][a-z0-9-]{0,47}$/);
8219
+ /** Cross-field rules a declaration must satisfy. Throws {@link DeclarationRefusedError}. */
8220
+ function assertValidDeclaration(name, decl) {
8221
+ const refuse = (why) => {
8222
+ throw new DeclarationRefusedError(`kind "${name}": ${why}`);
8223
+ };
8224
+ if (!RecordKindNameSchema.safeParse(name).success) refuse("the name must be lower-case-dashed");
8225
+ const seen = /* @__PURE__ */ new Set();
8226
+ for (const index of decl.indexes) {
8227
+ if (seen.has(index.name)) refuse(`index name "${index.name}" is declared twice`);
8228
+ seen.add(index.name);
8229
+ }
8230
+ const { retention } = decl;
8231
+ const hasSecrets = decl.secretPaths.length > 0;
8232
+ if ("ttlMs" in retention) {
8233
+ if (retention.from === "at" && decl.at !== "required") refuse("a ttl from \"at\" needs at: \"required\"");
8234
+ if (hasSecrets) refuse("a kind with secret fields cannot use engine TTL (its keychain values would be orphaned)");
8235
+ }
8236
+ if ("maxRows" in retention || "maxRowsPerDevice" in retention) {
8237
+ if (retention.maxRowsPerDevice !== void 0 && decl.device !== "required") refuse("maxRowsPerDevice needs device: \"required\"");
8238
+ if (decl.at !== "required") refuse("a row bound trims the oldest \"at\": it needs at: \"required\"");
8239
+ if (hasSecrets) refuse("a kind with secret fields cannot use an engine row bound");
8240
+ const bound = Math.max(retention.maxRows ?? 0, retention.maxRowsPerDevice ?? 0);
8241
+ if (decl.database === "settings" && bound > 5e4) refuse(`a row bound above ${RECORD_SETTINGS_MAX_ROWS} belongs in database: "events" (a big delete on the settings thread stalls every configuration read)`);
8242
+ }
8243
+ if (decl.deviceRemoval === "delete" && decl.device === "none") refuse("deviceRemoval: \"delete\" needs a device: \"required\" or \"optional\"");
8244
+ for (const path of decl.secretPaths) for (const prefix of secretArrayPrefixes(path)) if (decl.secretArrayKeys[prefix] === void 0) refuse(`secret path "${path}" crosses the array "${prefix}": declare its id key in secretArrayKeys`);
8245
+ }
8246
+ function bodyFieldsOf(schema) {
8247
+ return { ...toJSONSchema(schema, {
8248
+ unrepresentable: "any",
8249
+ io: "input"
8250
+ }) };
8251
+ }
8252
+ function isRecordLike(value) {
8253
+ return typeof value === "object" && value !== null && !Array.isArray(value);
8254
+ }
8255
+ /** Does every branch of the body schema carry `field`? (A discriminated union has several.) */
8256
+ function hasNameField(json, field) {
8257
+ const branches = json["oneOf"] ?? json["anyOf"];
8258
+ if (Array.isArray(branches)) return branches.length > 0 && branches.every((b) => isRecordLike(b) && hasNameField(b, field));
8259
+ const properties = json["properties"];
8260
+ return isRecordLike(properties) && Object.prototype.hasOwnProperty.call(properties, field);
8261
+ }
8262
+ /**
8263
+ * Declare the kinds of a package. The keys are the kind names. The result is
8264
+ * what `ctx.records.declare` sends to the engine and what `ctx.records.kind`
8265
+ * types its handle from.
8266
+ */
8267
+ function defineRecordKinds(specs) {
8268
+ const out = {};
8269
+ for (const [name, spec] of Object.entries(specs)) {
8270
+ const secretPaths = collectZodSecretPaths(spec.schema);
8271
+ const nameField = spec.entry?.nameField ?? "name";
8272
+ const fields = bodyFieldsOf(spec.schema);
8273
+ if (spec.entry !== void 0 && !hasNameField(fields, nameField)) throw new DeclarationRefusedError(`kind "${name}": an entry kind's schema needs a "${nameField}" field`);
8274
+ const parsed = RecordKindDeclarationSchema.parse({
8275
+ database: spec.database,
8276
+ class: spec.class,
8277
+ writeTrigger: spec.writeTrigger,
8278
+ device: spec.device,
8279
+ at: spec.at,
8280
+ indexes: spec.indexes === void 0 ? void 0 : [...spec.indexes],
8281
+ retention: spec.retention,
8282
+ deviceRemoval: spec.deviceRemoval,
8283
+ maxDataBytes: spec.maxDataBytes,
8284
+ secretPaths: [...secretPaths],
8285
+ secretArrayKeys: spec.secretArrayKeys === void 0 ? void 0 : { ...spec.secretArrayKeys },
8286
+ adoptsFrom: spec.adoptsFrom,
8287
+ transactFamily: spec.transactFamily,
8288
+ entry: spec.entry === void 0 ? void 0 : {
8289
+ title: spec.entry.title,
8290
+ nameField,
8291
+ fields
8292
+ }
8293
+ });
8294
+ assertValidDeclaration(name, parsed);
8295
+ out[name] = {
8296
+ name,
8297
+ schema: spec.schema,
8298
+ declaration: parsed
8299
+ };
8300
+ }
8301
+ return out;
8302
+ }
7880
8303
  /** Shared Zod schemas used across streaming capabilities. */
7881
8304
  var CamProfileSchema = _enum([
7882
8305
  "high",
@@ -8422,69 +8845,6 @@ method(object({ deviceId: number() }), array(StreamSourceEntrySchema)), method(o
8422
8845
  kind: "mutation",
8423
8846
  auth: "admin"
8424
8847
  }), method(object({ deviceId: number() }), unknown().nullable()), method(object({ deviceId: number() }), RawStateResultSchema.nullable(), { auth: "protected" });
8425
- function defOf(schema) {
8426
- return schema._zod?.def ?? {};
8427
- }
8428
- function declaredHere(schema) {
8429
- return globalRegistry.get(schema)?.secret === true;
8430
- }
8431
- /** Wrapper kinds whose `innerType` is the field itself. */
8432
- var WRAPPERS = new Set([
8433
- "optional",
8434
- "nullable",
8435
- "default",
8436
- "prefault",
8437
- "catch",
8438
- "readonly",
8439
- "nonoptional"
8440
- ]);
8441
- /**
8442
- * The schema layers that make up ONE field: the schema itself and every
8443
- * wrapper below it (optional / default / nullable / readonly / catch), plus
8444
- * both sides of a pipe (`z.preprocess` puts the real schema on `out`,
8445
- * `.transform` on `in`).
8446
- */
8447
- function layersOf(schema) {
8448
- const out = [];
8449
- const queue = [schema];
8450
- while (queue.length > 0) {
8451
- const s = queue.shift();
8452
- if (!s || out.includes(s)) continue;
8453
- out.push(s);
8454
- const def = defOf(s);
8455
- if (def.type !== void 0 && WRAPPERS.has(def.type) && def.innerType) queue.push(def.innerType);
8456
- if (def.type === "pipe") {
8457
- if (def.in) queue.push(def.in);
8458
- if (def.out) queue.push(def.out);
8459
- }
8460
- }
8461
- return out;
8462
- }
8463
- /** True when any layer of this field declares `.meta({ secret: true })`. */
8464
- function isZodSecret(schema) {
8465
- return layersOf(schema).some(declaredHere);
8466
- }
8467
- /**
8468
- * Every declared secret path in a config schema: dotted keys, `[]` for "each
8469
- * element of this array" (`connection.password`, `rows[].token`). A declared
8470
- * object or array is reported as one path and not descended into — everything
8471
- * under it is secret.
8472
- */
8473
- function collectZodSecretPaths(schema, prefix = "") {
8474
- if (isZodSecret(schema)) return prefix.length > 0 ? [prefix] : [];
8475
- const paths = [];
8476
- for (const layer of layersOf(schema)) {
8477
- const def = defOf(layer);
8478
- if (def.type === "object" && def.shape) for (const [key, child] of Object.entries(def.shape)) paths.push(...collectZodSecretPaths(child, prefix ? `${prefix}.${key}` : key));
8479
- else if (def.type === "array" && def.element) paths.push(...collectZodSecretPaths(def.element, `${prefix}[]`));
8480
- else if (def.type === "union" && def.options) for (const option of def.options) paths.push(...collectZodSecretPaths(option, prefix));
8481
- else if (def.type === "intersection") {
8482
- if (def.left) paths.push(...collectZodSecretPaths(def.left, prefix));
8483
- if (def.right) paths.push(...collectZodSecretPaths(def.right, prefix));
8484
- }
8485
- }
8486
- return [...new Set(paths)];
8487
- }
8488
8848
  /**
8489
8849
  * AUTO-GENERATED by scripts/generate-device-scoped-caps.ts — DO NOT EDIT.
8490
8850
  *
@@ -16825,6 +17185,41 @@ var ComposableCapabilitiesSchema = object({ caps: array(object({
16825
17185
  keyField: string()
16826
17186
  }).optional()
16827
17187
  })) });
17188
+ /**
17189
+ * The report of a one-shot "move this owner's plaintext secrets into the
17190
+ * keychain" run (D878). COUNTS only - never a value, never a ref.
17191
+ *
17192
+ * The owner runs it on its own rows, through its own write path; an operator
17193
+ * script (`scripts/hub/migrate-raw-secrets.ts`) calls the owner's cap method.
17194
+ * Dry run (`apply: false`) reports what WOULD move and changes nothing.
17195
+ */
17196
+ var RawSecretMigrationInputSchema = object({
17197
+ /** `false` (the default of the script) = report only. */
17198
+ apply: boolean() });
17199
+ var RawSecretMigrationReportSchema = object({
17200
+ apply: boolean(),
17201
+ /** Rows that can carry a secret (a profile, an enrolment). */
17202
+ rows: number().int(),
17203
+ /** Rows whose secret was plaintext when the run started. */
17204
+ raw: number().int(),
17205
+ /** Rows that already held a keychain marker when the run started. */
17206
+ markers: number().int(),
17207
+ /** Plaintext rows moved by THIS run (always 0 on a dry run). */
17208
+ migrated: number().int(),
17209
+ /** Plaintext rows left in place because the move or its read-back failed. */
17210
+ failed: number().int(),
17211
+ /** After the run: rows still holding plaintext. */
17212
+ remainingRaw: number().int(),
17213
+ /** After the run: markers the keychain could not resolve right now. */
17214
+ unresolvedMarkers: number().int(),
17215
+ /**
17216
+ * A second, redundant copy of the secrets' rows that the run found (and, on
17217
+ * `apply`, deleted after verifying the first). Owners with a single copy omit it.
17218
+ */
17219
+ redundantCopies: number().int().optional(),
17220
+ /** True when nothing is raw and every marker resolves. */
17221
+ verified: boolean()
17222
+ });
16828
17223
  /** The block id behind a generated addon/runner id, or null when the id belongs
16829
17224
  * to something else. The inverse of {@link coreBlockAddonId}. */
16830
17225
  function coreBlockIdFromAddonId(addonId) {
@@ -17058,6 +17453,9 @@ method(object({}), object({ blocks: array(CoreBlockSchema) }), { auth: "admin" }
17058
17453
  }), SettingsUpdateResultSchema, {
17059
17454
  kind: "mutation",
17060
17455
  auth: "admin"
17456
+ }), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
17457
+ kind: "mutation",
17458
+ auth: "admin"
17061
17459
  }), method(object({}), object({ libs: array(object({
17062
17460
  filePath: string(),
17063
17461
  content: string()
@@ -17320,6 +17718,222 @@ id: union([string(), number()]) }), {
17320
17718
  kind: "mutation",
17321
17719
  auth: "admin"
17322
17720
  });
17721
+ /**
17722
+ * records - an addon's own facts and documents (D881): ledgers, audit rows,
17723
+ * config documents, mirrors. The third storage API next to `ctx.settings`
17724
+ * (operator intent, D870) and device-history (numbers over time, D850).
17725
+ *
17726
+ * Who the OWNER is: `callerAddonId`, stamped by the transport on a call that
17727
+ * crossed a process and stated by a hub in-process caller (`ctx.records` does
17728
+ * that with the addon id closed over). It is deliberately NOT in any input
17729
+ * schema, so a session can never supply it, and a call with no stamp is refused
17730
+ * `records/no-caller`. A kind is readable and writable only by its owner; other
17731
+ * addons go through the owner's capability.
17732
+ *
17733
+ * Every read is three-way: a row, `null`, or the call THROWS. A failed read is
17734
+ * never `[]`. Secret fields are never on the wire: a read shows the
17735
+ * redaction token, `secretRefs` hands the owner's `ctx.secrets` the refs it
17736
+ * resolves itself, and a write may carry only a keychain marker bound to the
17737
+ * row's own ref.
17738
+ *
17739
+ * Internal: addons reach it through `ctx.records`, never directly.
17740
+ */
17741
+ var RecordIdSchema = string().min(1).max(256);
17742
+ /** A JSON object body. Size is the engine's check (`maxDataBytes`), not a schema's. */
17743
+ var RecordBodySchema = record(string(), unknown());
17744
+ var RecordInputSchema = object({
17745
+ id: RecordIdSchema,
17746
+ /** The device this row belongs to (D865 removal, per-device reads). */
17747
+ deviceId: number().int().optional(),
17748
+ /** The domain clock, ms: observed / created / opened. */
17749
+ at: number().int().optional(),
17750
+ /** Producer-set expiry, ms. Refused on a kind whose retention is an engine TTL. */
17751
+ expiresAt: number().int().optional(),
17752
+ data: RecordBodySchema
17753
+ });
17754
+ var RecordViewSchema = object({
17755
+ id: string(),
17756
+ deviceId: number().int().nullable(),
17757
+ at: number().nullable(),
17758
+ expiresAt: number().nullable(),
17759
+ rev: number().int(),
17760
+ updatedAt: number(),
17761
+ data: RecordBodySchema
17762
+ });
17763
+ /** Declared index fields only. Anything else does not compile, by design. */
17764
+ var RecordWhereSchema = record(RecordFieldPathSchema, union([
17765
+ string(),
17766
+ number(),
17767
+ boolean(),
17768
+ object({ in: array(union([
17769
+ string(),
17770
+ number(),
17771
+ boolean()
17772
+ ])).min(1).max(RECORD_BATCH_MAX) }),
17773
+ object({
17774
+ gt: union([string(), number()]).optional(),
17775
+ gte: union([string(), number()]).optional(),
17776
+ lt: union([string(), number()]).optional(),
17777
+ lte: union([string(), number()]).optional()
17778
+ }).refine((r) => Object.keys(r).length > 0, { message: "name at least one bound" })
17779
+ ]));
17780
+ var KindShape = { kind: RecordKindNameSchema };
17781
+ var TimeWindowShape = {
17782
+ deviceId: number().int().optional(),
17783
+ atFrom: number().optional(),
17784
+ atTo: number().optional()
17785
+ };
17786
+ var RecordQueryInputSchema = object({
17787
+ ...KindShape,
17788
+ ...TimeWindowShape,
17789
+ where: RecordWhereSchema.optional(),
17790
+ /** Without `where`: `at` (default for a kind with a clock) or `id`. With `where` the order is the index's. */
17791
+ order: _enum(["at", "id"]).optional(),
17792
+ desc: boolean().optional(),
17793
+ limit: number().int().min(1).max(RECORD_QUERY_MAX).default(100),
17794
+ /** Opaque keyset cursor from a previous answer. There is no offset. */
17795
+ cursor: string().min(1).optional()
17796
+ });
17797
+ var RecordQueryResultSchema = object({
17798
+ records: array(RecordViewSchema),
17799
+ nextCursor: string().nullable()
17800
+ });
17801
+ var RecordKindStateSchema = _enum([
17802
+ "created",
17803
+ "unchanged",
17804
+ "updated"
17805
+ ]);
17806
+ var DeclareKindResultSchema = object({
17807
+ kindId: number().int(),
17808
+ state: RecordKindStateSchema,
17809
+ createdIndexes: array(string()),
17810
+ /** The boot guard: the kind is empty while its legacy table still holds rows. */
17811
+ adoptionPending: object({
17812
+ legacyTable: string(),
17813
+ legacyRows: number().int()
17814
+ }).nullable()
17815
+ });
17816
+ /** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
17817
+ var SecretRefsList = array(string());
17818
+ var RecordSecretRefsSchema = record(string(), record(string(), string()));
17819
+ method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
17820
+ kind: "mutation",
17821
+ auth: "admin"
17822
+ }), method(object({
17823
+ ...KindShape,
17824
+ id: RecordIdSchema
17825
+ }), RecordViewSchema.nullable(), { auth: "admin" }), method(object({
17826
+ ...KindShape,
17827
+ ids: array(RecordIdSchema).min(1).max(RECORD_BATCH_MAX)
17828
+ }), array(RecordViewSchema), { auth: "admin" }), method(object({
17829
+ ...KindShape,
17830
+ ids: array(RecordIdSchema).min(1).max(RECORD_BATCH_MAX)
17831
+ }), RecordSecretRefsSchema, { auth: "admin" }), method(object({
17832
+ ...KindShape,
17833
+ record: RecordInputSchema,
17834
+ /** Compare-and-set. `0` means "the row must not exist". */
17835
+ ifRev: number().int().min(0).optional()
17836
+ }), object({
17837
+ rev: number().int(),
17838
+ releasedRefs: SecretRefsList
17839
+ }), {
17840
+ kind: "mutation",
17841
+ auth: "admin"
17842
+ }), method(object({
17843
+ ...KindShape,
17844
+ records: array(RecordInputSchema).min(1).max(RECORD_BATCH_MAX)
17845
+ }), object({
17846
+ count: number().int(),
17847
+ releasedRefs: SecretRefsList
17848
+ }), {
17849
+ kind: "mutation",
17850
+ auth: "admin"
17851
+ }), method(object({
17852
+ ...KindShape,
17853
+ id: RecordIdSchema,
17854
+ data: RecordBodySchema,
17855
+ at: number().int().nullable().optional(),
17856
+ expiresAt: number().int().nullable().optional(),
17857
+ ifRev: number().int().min(1).optional()
17858
+ }), object({
17859
+ rev: number().int(),
17860
+ releasedRefs: SecretRefsList
17861
+ }), {
17862
+ kind: "mutation",
17863
+ auth: "admin"
17864
+ }), method(object({
17865
+ ...KindShape,
17866
+ id: RecordIdSchema
17867
+ }), object({
17868
+ deleted: boolean(),
17869
+ secretRefs: SecretRefsList
17870
+ }), {
17871
+ kind: "mutation",
17872
+ auth: "admin"
17873
+ }), method(object({
17874
+ ...KindShape,
17875
+ ids: array(RecordIdSchema).min(1).max(RECORD_BATCH_MAX)
17876
+ }), object({
17877
+ deleted: number().int(),
17878
+ secretRefs: SecretRefsList
17879
+ }), {
17880
+ kind: "mutation",
17881
+ auth: "admin"
17882
+ }), method(RecordQueryInputSchema, RecordQueryResultSchema, { auth: "admin" }), method(object({
17883
+ ...KindShape,
17884
+ ...TimeWindowShape,
17885
+ where: RecordWhereSchema.optional()
17886
+ }), object({ count: number().int() }), { auth: "admin" }), method(object({
17887
+ ...KindShape,
17888
+ deviceId: number().int().optional(),
17889
+ from: number(),
17890
+ to: number(),
17891
+ bucketMs: number().int().positive()
17892
+ }), object({ buckets: array(object({
17893
+ bucketStart: number(),
17894
+ count: number().int()
17895
+ })) }), { auth: "admin" }), method(object({
17896
+ ...KindShape,
17897
+ op: _enum([
17898
+ "sum",
17899
+ "min",
17900
+ "max",
17901
+ "count"
17902
+ ]),
17903
+ field: RecordFieldPathSchema.optional(),
17904
+ groupBy: RecordFieldPathSchema.optional(),
17905
+ where: RecordWhereSchema.optional()
17906
+ }), object({ rows: array(object({
17907
+ group: union([
17908
+ string(),
17909
+ number(),
17910
+ _null()
17911
+ ]),
17912
+ value: number().nullable()
17913
+ })) }), { auth: "admin" }), method(object({
17914
+ ...KindShape,
17915
+ deviceId: number().int().optional(),
17916
+ atBefore: number().optional(),
17917
+ where: RecordWhereSchema.optional()
17918
+ }), object({
17919
+ deleted: number().int(),
17920
+ secretRefs: SecretRefsList
17921
+ }), {
17922
+ kind: "mutation",
17923
+ auth: "admin"
17924
+ }), method(object({
17925
+ deviceId: number().int(),
17926
+ kinds: array(RecordKindNameSchema).optional()
17927
+ }), object({
17928
+ deleted: record(string(), number().int()),
17929
+ secretRefs: SecretRefsList
17930
+ }), {
17931
+ kind: "mutation",
17932
+ auth: "admin"
17933
+ }), method(object(KindShape), object({ id: number().int() }), {
17934
+ kind: "mutation",
17935
+ auth: "admin"
17936
+ });
17323
17937
  /** One table of the settings database. */
17324
17938
  var StorageTableSchema = object({
17325
17939
  /** The table's full name, e.g. `recorder:addon-settings` or `addon-device-settings`. */
@@ -17332,6 +17946,28 @@ var StorageTableSchema = object({
17332
17946
  /** Declared by an addon since this engine process started (a running addon claims it). */
17333
17947
  declaredThisBoot: boolean()
17334
17948
  });
17949
+ /** One declared record kind (D881) as System -> Data shows it. */
17950
+ var StorageKindSchema = object({
17951
+ owner: string(),
17952
+ kind: string(),
17953
+ database: _enum(["settings", "events"]),
17954
+ class: string(),
17955
+ state: _enum([
17956
+ "declared",
17957
+ "orphaned",
17958
+ "dropped"
17959
+ ]),
17960
+ /** `null` when the caller asked for no counts (`counts: false`). */
17961
+ rows: number().int().nonnegative().nullable(),
17962
+ /** Rows x the average size of a sample; null for an empty kind. */
17963
+ bytesEstimate: number().int().nonnegative().nullable(),
17964
+ writeTrigger: string(),
17965
+ retention: RecordRetentionSchema,
17966
+ /** `true` when the kind is an entry kind (the generic entries UI lists it). */
17967
+ entry: boolean(),
17968
+ /** The whole declaration, secret paths and entry descriptor included (the entries service builds its handle from it). */
17969
+ declaration: RecordKindDeclarationSchema
17970
+ });
17335
17971
  method(object({ ownerPrefix: string().min(1).optional() }), object({ tables: array(StorageTableSchema) }), { auth: "admin" }), method(object({
17336
17972
  collection: string().min(1),
17337
17973
  expectRows: number().int().nonnegative()
@@ -17341,6 +17977,87 @@ method(object({ ownerPrefix: string().min(1).optional() }), object({ tables: arr
17341
17977
  }), {
17342
17978
  kind: "mutation",
17343
17979
  auth: "admin"
17980
+ }), method(object({
17981
+ owner: string().min(1).optional(),
17982
+ /** `false` skips the per-kind row count (a catalog read only). Default true. */
17983
+ counts: boolean().optional()
17984
+ }), object({ kinds: array(StorageKindSchema) }), { auth: "admin" }), method(RecordQueryInputSchema.extend({
17985
+ owner: string().min(1),
17986
+ kind: RecordKindNameSchema
17987
+ }), RecordQueryResultSchema, { auth: "admin" }), method(object({
17988
+ owner: string().min(1),
17989
+ kind: RecordKindNameSchema,
17990
+ records: array(RecordInputSchema).max(RECORD_BATCH_MAX),
17991
+ /** The LAST batch: the copy is complete, the boot guard stops asking. */
17992
+ complete: boolean().optional()
17993
+ }).refine((input) => input.records.length > 0 || input.complete === true, { message: "records must be non-empty unless complete is true" }), object({ adopted: number().int() }), {
17994
+ kind: "mutation",
17995
+ auth: "admin"
17996
+ }), method(object({
17997
+ collection: string().min(1),
17998
+ cursor: string().optional(),
17999
+ limit: number().int().min(1).max(1e3).optional()
18000
+ }), object({
18001
+ rows: array(object({
18002
+ id: string(),
18003
+ data: record(string(), unknown())
18004
+ })),
18005
+ nextCursor: string().nullable()
18006
+ }), { auth: "admin" }), method(object({ collection: string().min(1) }), object({ adopted: boolean() }), { auth: "admin" });
18007
+ /**
18008
+ * record-entries - the ONE admin surface for every list of user-created entries
18009
+ * (D881): notification targets, brokers, LLM profiles, anything an addon
18010
+ * declares as an ENTRY kind (`entry: { title }` in `defineRecordKinds`).
18011
+ *
18012
+ * The UI is generic. `listEntryKinds` hands it, per kind, the JSON Schema of
18013
+ * the entry body with `secret: true` on every credential field, so a password
18014
+ * field is derived from the schema and never from a name. `putEntry` takes the
18015
+ * redaction token for an untouched secret (the stored value is kept), a string
18016
+ * for a new one, and the clear instruction to remove one. A read never carries
18017
+ * a secret value, and a locked keychain refuses the write with
18018
+ * `records/secret-unavailable` instead of storing plaintext.
18019
+ *
18020
+ * Hub-only, served in-process (it acts for each entry's owner on the keychain).
18021
+ */
18022
+ var EntryKindInfoSchema = object({
18023
+ owner: string(),
18024
+ kind: RecordKindNameSchema,
18025
+ title: string(),
18026
+ nameField: string(),
18027
+ /** JSON Schema of the body; `secret: true` marks a password field. */
18028
+ fields: record(string(), unknown()),
18029
+ secretPaths: array(string()),
18030
+ rows: number().int().nonnegative()
18031
+ });
18032
+ var EntryViewSchema = object({
18033
+ id: RecordIdSchema,
18034
+ name: string(),
18035
+ rev: number().int(),
18036
+ updatedAt: number(),
18037
+ /** Secret fields hold the redaction token. */
18038
+ data: RecordBodySchema
18039
+ });
18040
+ var EntryAddress = {
18041
+ owner: string().min(1),
18042
+ kind: RecordKindNameSchema
18043
+ };
18044
+ method(object({}), object({ kinds: array(EntryKindInfoSchema) }), { auth: "admin" }), method(object({ ...EntryAddress }), object({ entries: array(EntryViewSchema) }), { auth: "admin" }), method(object({
18045
+ ...EntryAddress,
18046
+ id: RecordIdSchema.optional(),
18047
+ data: RecordBodySchema,
18048
+ ifRev: number().int().min(1).optional()
18049
+ }), object({
18050
+ id: string(),
18051
+ rev: number().int()
18052
+ }), {
18053
+ kind: "mutation",
18054
+ auth: "admin"
18055
+ }), method(object({
18056
+ ...EntryAddress,
18057
+ id: RecordIdSchema
18058
+ }), object({ deleted: boolean() }), {
18059
+ kind: "mutation",
18060
+ auth: "admin"
17344
18061
  });
17345
18062
  /**
17346
18063
  * `keychain` — the hub's encrypted store of secret values (D787).
@@ -40486,36 +41203,6 @@ method(LlmRuntimeCompleteInputSchema, LlmGenerateResultSchema, {
40486
41203
  timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
40487
41204
  });
40488
41205
  /**
40489
- * The report of a one-shot "move this owner's plaintext secrets into the
40490
- * keychain" run (D878). COUNTS only - never a value, never a ref.
40491
- *
40492
- * The owner runs it on its own rows, through its own write path; an operator
40493
- * script (`scripts/hub/migrate-raw-secrets.ts`) calls the owner's cap method.
40494
- * Dry run (`apply: false`) reports what WOULD move and changes nothing.
40495
- */
40496
- var RawSecretMigrationInputSchema = object({
40497
- /** `false` (the default of the script) = report only. */
40498
- apply: boolean() });
40499
- var RawSecretMigrationReportSchema = object({
40500
- apply: boolean(),
40501
- /** Rows that can carry a secret (a profile, an enrolment). */
40502
- rows: number().int(),
40503
- /** Rows whose secret was plaintext when the run started. */
40504
- raw: number().int(),
40505
- /** Rows that already held a keychain marker when the run started. */
40506
- markers: number().int(),
40507
- /** Plaintext rows moved by THIS run (always 0 on a dry run). */
40508
- migrated: number().int(),
40509
- /** Plaintext rows left in place because the move or its read-back failed. */
40510
- failed: number().int(),
40511
- /** After the run: rows still holding plaintext. */
40512
- remainingRaw: number().int(),
40513
- /** After the run: markers the keychain could not resolve right now. */
40514
- unresolvedMarkers: number().int(),
40515
- /** True when nothing is raw and every marker resolves. */
40516
- verified: boolean()
40517
- });
40518
- /**
40519
41206
  * `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
40520
41207
  * methods concat-fan across providers; single-row methods route to ONE
40521
41208
  * provider by the `addonId` in the call input (the notification-output
@@ -43711,6 +44398,7 @@ var NcThrottleSchema = object({
43711
44398
  var NC_CONFIRM_MIN_TIMEOUT_MS = 1e3;
43712
44399
  var NC_CONFIRM_MAX_TIMEOUT_MS = 2e4;
43713
44400
  var NC_CONFIRM_DEFAULT_TIMEOUT_MS = 8e3;
44401
+ var NC_CONFIRM_DEFAULT_MAX_IMAGE_PX = 448;
43714
44402
  /** Comparison the model's COUNT must satisfy for the notification to fire. */
43715
44403
  var NcConfirmExpectSchema = object({
43716
44404
  op: _enum([
@@ -68541,13 +69229,14 @@ var BaseDevice = class {
68541
69229
  get state() {
68542
69230
  if (!this._stateProxyCache) {
68543
69231
  const cache = {};
68544
- const handler = { get: (_target, key) => {
69232
+ const handler = { get: (target, key) => {
68545
69233
  const k = key;
68546
- if (k in cache) return cache[k];
69234
+ const existing = Reflect.get(target, k);
69235
+ if (existing !== void 0) return existing;
68547
69236
  const cap = DEVICE_LOCAL_STATE_CAPS[k];
68548
69237
  if (!cap) return void 0;
68549
69238
  const proxy = this.sliceProxy(cap);
68550
- cache[k] = proxy;
69239
+ Reflect.set(target, k, proxy);
68551
69240
  return proxy;
68552
69241
  } };
68553
69242
  this._stateProxyCache = new Proxy(cache, handler);
@@ -68746,7 +69435,7 @@ var BaseDevice = class {
68746
69435
  async updateSourceInfo(patch) {
68747
69436
  const next = mergeSourceInfo(this.sourceInfo, patch);
68748
69437
  this._sourceInfoCache = Object.freeze({ ...next });
68749
- const action = this.ctx.api?.deviceManager?.setMetadata;
69438
+ const action = this.ctx.api.deviceManager?.setMetadata;
68750
69439
  if (action) try {
68751
69440
  await action.mutate({
68752
69441
  deviceId: this.id,
@@ -68781,7 +69470,7 @@ var BaseDevice = class {
68781
69470
  * device boot on a meta refresh.
68782
69471
  */
68783
69472
  async refreshFeatures() {
68784
- const action = this.ctx.api?.deviceManager?.registerDevice;
69473
+ const action = this.ctx.api.deviceManager?.registerDevice;
68785
69474
  if (!action) return;
68786
69475
  try {
68787
69476
  await action.mutate({
@@ -70378,6 +71067,12 @@ Object.freeze({
70378
71067
  addonId: null,
70379
71068
  access: "view"
70380
71069
  },
71070
+ "coreBlocks.migrateRawSecrets": {
71071
+ capName: "core-blocks",
71072
+ capScope: "system",
71073
+ addonId: null,
71074
+ access: "create"
71075
+ },
70381
71076
  "coreBlocks.restart": {
70382
71077
  capName: "core-blocks",
70383
71078
  capScope: "system",
@@ -75130,6 +75825,30 @@ Object.freeze({
75130
75825
  addonId: null,
75131
75826
  access: "create"
75132
75827
  },
75828
+ "recordEntries.deleteEntry": {
75829
+ capName: "record-entries",
75830
+ capScope: "system",
75831
+ addonId: null,
75832
+ access: "delete"
75833
+ },
75834
+ "recordEntries.listEntries": {
75835
+ capName: "record-entries",
75836
+ capScope: "system",
75837
+ addonId: null,
75838
+ access: "view"
75839
+ },
75840
+ "recordEntries.listEntryKinds": {
75841
+ capName: "record-entries",
75842
+ capScope: "system",
75843
+ addonId: null,
75844
+ access: "view"
75845
+ },
75846
+ "recordEntries.putEntry": {
75847
+ capName: "record-entries",
75848
+ capScope: "system",
75849
+ addonId: null,
75850
+ access: "create"
75851
+ },
75133
75852
  "recording.getAvailability": {
75134
75853
  capName: "recording",
75135
75854
  capScope: "device",
@@ -75430,6 +76149,102 @@ Object.freeze({
75430
76149
  addonId: null,
75431
76150
  access: "view"
75432
76151
  },
76152
+ "records.aggregate": {
76153
+ capName: "records",
76154
+ capScope: "system",
76155
+ addonId: null,
76156
+ access: "view"
76157
+ },
76158
+ "records.allocateId": {
76159
+ capName: "records",
76160
+ capScope: "system",
76161
+ addonId: null,
76162
+ access: "create"
76163
+ },
76164
+ "records.count": {
76165
+ capName: "records",
76166
+ capScope: "system",
76167
+ addonId: null,
76168
+ access: "view"
76169
+ },
76170
+ "records.declareKinds": {
76171
+ capName: "records",
76172
+ capScope: "system",
76173
+ addonId: null,
76174
+ access: "create"
76175
+ },
76176
+ "records.delete": {
76177
+ capName: "records",
76178
+ capScope: "system",
76179
+ addonId: null,
76180
+ access: "delete"
76181
+ },
76182
+ "records.deleteDevice": {
76183
+ capName: "records",
76184
+ capScope: "system",
76185
+ addonId: null,
76186
+ access: "delete"
76187
+ },
76188
+ "records.deleteMany": {
76189
+ capName: "records",
76190
+ capScope: "system",
76191
+ addonId: null,
76192
+ access: "delete"
76193
+ },
76194
+ "records.deleteWhere": {
76195
+ capName: "records",
76196
+ capScope: "system",
76197
+ addonId: null,
76198
+ access: "delete"
76199
+ },
76200
+ "records.get": {
76201
+ capName: "records",
76202
+ capScope: "system",
76203
+ addonId: null,
76204
+ access: "view"
76205
+ },
76206
+ "records.getMany": {
76207
+ capName: "records",
76208
+ capScope: "system",
76209
+ addonId: null,
76210
+ access: "view"
76211
+ },
76212
+ "records.histogram": {
76213
+ capName: "records",
76214
+ capScope: "system",
76215
+ addonId: null,
76216
+ access: "view"
76217
+ },
76218
+ "records.patch": {
76219
+ capName: "records",
76220
+ capScope: "system",
76221
+ addonId: null,
76222
+ access: "create"
76223
+ },
76224
+ "records.put": {
76225
+ capName: "records",
76226
+ capScope: "system",
76227
+ addonId: null,
76228
+ access: "create"
76229
+ },
76230
+ "records.putMany": {
76231
+ capName: "records",
76232
+ capScope: "system",
76233
+ addonId: null,
76234
+ access: "create"
76235
+ },
76236
+ "records.query": {
76237
+ capName: "records",
76238
+ capScope: "system",
76239
+ addonId: null,
76240
+ access: "view"
76241
+ },
76242
+ "records.secretRefs": {
76243
+ capName: "records",
76244
+ capScope: "system",
76245
+ addonId: null,
76246
+ access: "view"
76247
+ },
75433
76248
  "sceneMonitor.captureReference": {
75434
76249
  capName: "scene-monitor",
75435
76250
  capScope: "device",
@@ -75862,18 +76677,48 @@ Object.freeze({
75862
76677
  addonId: null,
75863
76678
  access: "create"
75864
76679
  },
76680
+ "storageAdmin.adoptRecords": {
76681
+ capName: "storage-admin",
76682
+ capScope: "system",
76683
+ addonId: null,
76684
+ access: "create"
76685
+ },
75865
76686
  "storageAdmin.dropCollection": {
75866
76687
  capName: "storage-admin",
75867
76688
  capScope: "system",
75868
76689
  addonId: null,
75869
76690
  access: "delete"
75870
76691
  },
76692
+ "storageAdmin.isAdoptedLegacyTable": {
76693
+ capName: "storage-admin",
76694
+ capScope: "system",
76695
+ addonId: null,
76696
+ access: "view"
76697
+ },
76698
+ "storageAdmin.listKinds": {
76699
+ capName: "storage-admin",
76700
+ capScope: "system",
76701
+ addonId: null,
76702
+ access: "view"
76703
+ },
75871
76704
  "storageAdmin.listTables": {
75872
76705
  capName: "storage-admin",
75873
76706
  capScope: "system",
75874
76707
  addonId: null,
75875
76708
  access: "view"
75876
76709
  },
76710
+ "storageAdmin.readLegacyCollection": {
76711
+ capName: "storage-admin",
76712
+ capScope: "system",
76713
+ addonId: null,
76714
+ access: "view"
76715
+ },
76716
+ "storageAdmin.readRecords": {
76717
+ capName: "storage-admin",
76718
+ capScope: "system",
76719
+ addonId: null,
76720
+ access: "view"
76721
+ },
75877
76722
  "storageEvictable.evict": {
75878
76723
  capName: "storage-evictable",
75879
76724
  capScope: "system",
@@ -79468,6 +80313,37 @@ Object.freeze({
79468
80313
  form: "single",
79469
80314
  optional: false
79470
80315
  }],
80316
+ "records.count": [{
80317
+ name: "deviceId",
80318
+ form: "single",
80319
+ optional: true
80320
+ }],
80321
+ "records.deleteDevice": [{
80322
+ name: "deviceId",
80323
+ form: "single",
80324
+ optional: false
80325
+ }],
80326
+ "records.deleteWhere": [{
80327
+ name: "deviceId",
80328
+ form: "single",
80329
+ optional: true
80330
+ }],
80331
+ "records.histogram": [{
80332
+ name: "deviceId",
80333
+ form: "single",
80334
+ optional: true
80335
+ }],
80336
+ "records.putMany": [{
80337
+ name: "records",
80338
+ form: "object-array",
80339
+ optional: false,
80340
+ itemField: "deviceId"
80341
+ }],
80342
+ "records.query": [{
80343
+ name: "deviceId",
80344
+ form: "single",
80345
+ optional: true
80346
+ }],
79471
80347
  "sceneMonitor.captureReference": [{
79472
80348
  name: "deviceId",
79473
80349
  form: "single",
@@ -79584,6 +80460,17 @@ Object.freeze({
79584
80460
  form: "single",
79585
80461
  optional: false
79586
80462
  }],
80463
+ "storageAdmin.adoptRecords": [{
80464
+ name: "records",
80465
+ form: "object-array",
80466
+ optional: false,
80467
+ itemField: "deviceId"
80468
+ }],
80469
+ "storageAdmin.readRecords": [{
80470
+ name: "deviceId",
80471
+ form: "single",
80472
+ optional: true
80473
+ }],
79587
80474
  "streamBroker.acquireEgressTranscode": [{
79588
80475
  name: "deviceId",
79589
80476
  form: "single",
@@ -84056,4 +84943,4 @@ function buildClipModelRegistry(entries) {
84056
84943
  /** The built-in catalog's registry. */
84057
84944
  var BUILTIN_CLIP_MODELS = buildClipModelRegistry(CLIP_IMAGE_MODELS);
84058
84945
  //#endregion
84059
- export { MotionTriggeredBySchema as $, union as $i, deriveRecordingMode as $n, ruleAutoTriggersAlarm as $r, PoolMemoryWatchdog as $t, DetectionSourceSchema as A, createEvent as Ai, addonWidgetsSourceCapability as An, isSystemEventSummaryRule as Ar, NcConditionDescriptorSchema as At, FailureCounters as B, array as Bi, audioModeOf as Bn, pipelineAnalyticsCapability as Br, NcScheduleSchema as Bt, CoverStateSchema as C, canonicalHash as Ci, TimelapseRuleSchema as Cn, isKnownTemplateVar as Cr, NC_TAXONOMY as Ct, DETECTION_MACRO_CLASSES as D, errMsg as Di, TrackSideSchema as Dn, isRootSuppliableStepId as Dr, NcAlarmSensorsInputSchema as Dt, DEFAULT_TIMELAPSE_PREVIEW_TEXT as E, DeviceType as Ei, TrackRelationSchema as En, isRetiredClearKey as Er, NcAlarmPostTriggeredActionSchema as Et, EVENT_KIND_BY_CAP as F, nodePin as Fi, applyNonBlockingEdit as Fn, memoizePinnedFfmpeg as Fr, NcRuleInputSchema as Ft, LockStateSchema as G, number as Gi, cloneAlarmSettings as Gn, renameAlarmProfile as Gr, NcStateSummarySectionIdSchema as Gt, LabelAttributionSchema as H, discriminatedUnion as Hi, buildViewerLink as Hn, readDeviceStateFrom as Hr, NcSnoozeInputSchema as Ht, EVENT_OWNER_TYPES as I, normalizeNodeId as Ii, applySecureOnArmEdit as In, notificationRulesCapability as Ir, NcRulePatchSchema as It, MAX_BIRTH_LATENCY_PROXY_MS as J, record as Ji, cosineSimilarity as Jn, resolveModeDelays as Jr, NcTemplatePreviewInputSchema as Jt, MAX_ARCHIVED_DEBUG_NOTES as K, object as Ki, consumableLowPercentOf as Kn, resolveClipSearchMinScore as Kr, NcSystemEventKindSchema as Kt, EXPORT_DENSE_MAX_RANGES as L, sleep as Li, armRemovalReconcile as Ln, occupancyScope as Lr, NcRuleSchema as Lt, EMBEDDING_REQUIREMENTS_FAILED as M, defineCustomActions as Mi, alarmPanelCapability as Mn, kebabToCamel as Mr, NcLegacyRuleActionSequenceSchema as Mt, EMBEDDING_REQUIREMENTS_UNAVAILABLE as N, hydrateSchema as Ni, applyBlockingEdit as Nn, linkedStepOf as Nr, NcRuleActionSchema as Nt, DETECTION_PIPELINE_CAP_NAME as O, BaseAddon as Oi, TrackSourceSchema as On, isScheduleActive as Or, NcAlarmSensorsSchema as Ot, EVENT_DENSITY_BATCH_MAX as P, isDeviceScopedCap as Pi, applyModeDelaysEdits as Pn, mayWriteToLocation as Pr, NcRuleActionsSchema as Pt, MediaFileKindEnum as Q, tuple as Qi, derivePostTriggeredAction as Qn, rootSupplyServes as Qr, OpsLogEntrySchema as Qt, FIRST_LEVEL_MACRO_CLASSES as R, ZodObject as Ri, assertTimelapseCadences as Rn, parseProcStatus as Rr, NcRuleTargetSchema as Rt, ClearTrackRelationResultSchema as S, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as Si, TimelapseRulePatchSchema as Sn, isEventOwnerType as Sr, NC_TANK_SYSTEM_EVENT_KINDS as St, DEFAULT_EVENT_COLOR as T, isSourceCap as Ti, TrackRelationKindSchema as Tn, isMediaOwnerType as Tr, NcAlarmConfigSchema as Tt, ListTrackRelationsInputSchema as U, literal as Ui, calendarEventLocalSpan as Un, readMotionTriggeredBy as Ur, NcSnoozeSchema as Ut, LABEL_SUPPLY_MACRO as V, boolean as Vi, buildEventKindDescriptor as Vn, plateGalleryCapability as Vr, NcSharedSequenceSchema as Vt, ListTrackRelationsResultSchema as W, looseObject as Wi, classifyRetrainReview as Wn, readTimelapseGeneratedAt as Wr, NcSnoozeSuppressedSchema as Wt, MAX_TRACK_RELATIONS as X, string as Xi, deleteAlarmProfile as Xn, resolvePoolMemoryPolicy as Xr, NcTemplateVarDescriptorSchema as Xt, MAX_TRACK_PURITIES as Y, strictObject as Yi, createAlarmProfile as Yn, resolveModeNotifyPolicy as Yr, NcTemplatePreviewSchema as Yt, MOTION_CLOSE_AFTER_MS as Z, templateLiteral as Zi, deriveDetailCropRect as Zn, retrainRevisionConflictMessage as Zr, OPS_LOG_DEFAULT_LIMIT as Zt, BIRTH_DECISION_DEFAULT_LIMIT as _, templateCarriesSummary as _i, SetTrackPurityResultSchema as _n, isAppLinkBase as _r, NC_GROUPING_MAX_SEC as _t, CLIP_EMBEDDING_STEP_ID as a, secureActuationFor as ai, RetrainStatusSchema as an, embeddingRefusalOf as ar, NC_ALARM_SYSTEM_EVENT_KINDS as at, COCO_TO_MACRO as b, viewerLinkBaseOf as bi, TRACK_RELATIONS_DEFAULT_LIMIT as bn, isDetectionMacroClass as br, NC_SNOOZE_MAX_MINUTES as bt, readClusterModelPinStrict as c, storageOccupancyCapability as ci, SCENE_DEFAULT_ANCHOR_THRESHOLD as cn, encodeVectorBase64 as cr, NC_AUDIO_CONFIRM_WINDOW_SEC_DEFAULT as ct, APPEARANCE_BLOCKS as d, syncActiveAlarmProfileSettings as di, SCENE_DEFAULT_QUIET_SECONDS as dn, evictionPolicyOfLocation as dr, NC_CLIP_RETENTION_MAX_SEC as dt, unknown as ea, ruleBelongsToAlarm as ei, RECORDING_EXPORT_MAX_READ_BYTES as en, describeSystemEventDeliveryProblem as er, NC_ALARM_DEFAULT_PROFILE_ID as et, APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT as f, systemEventDeliveryProblems as fi, SCENE_DEFAULT_UNCOVERED_POLICY as fn, faceGalleryCapability as fr, NC_CONDITION_CATALOG as ft, ArchivedDebugNoteSchema as g, systemEventSummarySplitOf as gi, SetTrackPurityInputSchema as gn, isAlarmControllableCap as gr, NC_GROUPING_DEFAULT_SEC as gt, AlarmArmModeSchema as h, systemEventSummaryScheduleOf as hi, SceneMonitorSchema as hn, gifFromMp4Args as hr, NC_DEFAULT_SNOOZE_MINUTES as ht, CLIP_TEXT_MODELS as i, sceneMonitorCapability as ii, RetrainOriginSchema as in, embeddingModelFailedError as ir, NC_ALARM_NOTIFY_FIELDS as it, EMBEDDING_MODEL_FAILED as j, customAction as ji, alarmDeviceSecureOnArm as jn, isVectorIndexDimConflict as jr, NcConditionsSchema as jt, DeclaredDevices as k, CamProfileSchema as ki, activateAlarmProfile as kn, isSystemDelivery as kr, NcAlarmSettingsPatchSchema as kt, resolveClusterModelPin as l, subKindsOf as li, SCENE_DEFAULT_CHECK_INTERVAL_SEC as ln, ensureAlarmProfiles as lr, NC_CLIP_POST_ROLL_DEFAULT_SEC as lt, AUDIO_MACRO_LABELS as m, systemEventFilterApplies as mi, SCENE_RESET_RECAPTURES as mn, gifDeriveSpeed as mr, NC_CONSUMABLE_SYSTEM_EVENT_KINDS as mt, DEFAULT_CLIP_MODEL as n, ruleGroupingApplies as ni, RebuildObjectEmbeddingsRefusalSchema as nn, deviceRemovalHookCapability as nr, NC_ALARM_DELAY_FIELDS as nt, CLUSTER_MODEL_OWNER_ADDON_ID as o, sensorRaisedOf as oi, SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX as on, embeddingRequirementsFailedError as or, NC_ALARM_TRIGGERED_MAX_SEC as ot, ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT as p, systemEventFamilyProblems as pi, SCENE_DIVERGED as pn, failureContributionCapability as pr, NC_CONSUMABLE_LOW_PERCENT_DEFAULT as pt, MAX_BIRTH_DECISION_RECORDS as q, partialRecord as qi, coreBlockIdFromAddonId as qn, resolveLocationMode as qr, NcTaxonomySchema as qt, CLIP_IMAGE_MODELS as r, ruleKindOf as ri, RetrainDismissedSchema as rn, embeddingEncoderCapability as rr, NC_ALARM_DELAY_MAX_SEC as rt, FACE_EMBEDDING_STEP_ID as s, servedTemplateVars as si, SCENE_CONFIRM_DEFAULT_TIMEOUT_MS as sn, embeddingRequirementsUnavailableError as sr, NC_AUDIO_CONFIRM_HITS_DEFAULT as st, BUILTIN_CLIP_MODELS as t, EventCategory as ta, ruleDeviceCompatCapQueries as ti, RECORDING_SOURCE_CAMSTACK_ADDON as tn, describeSystemEventFamilyProblem as tr, NC_ALARM_DEFAULT_TRIGGERED_DURATION_SEC as tt, APPEARANCE_BIN_COUNT as u, summarizeReview as ui, SCENE_DEFAULT_OBSERVATION_SPACING_SEC as un, eventKindLabel as ur, NC_CLIP_PRE_ROLL_DEFAULT_SEC as ut, BaseDevice as v, templateVarsFor as vi, SetTrackRelationInputSchema as vn, isAudioClassName as vr, NC_GROUPING_MIN_SEC as vt, DEFAULT_DETAIL_CROP_CONVENTION as w, evaluateSensorEdge as wi, TrackPuritySchema as wn, isLabelSupplyStepId as wr, NC_TEMPLATE_VARS as wt, ClearTrackRelationInputSchema as x, zoneAnalyticsCapability as xi, TimelapseRuleInputSchema as xn, isEventKindLabelKey as xr, NC_SYSTEM_EVENT_KIND_GROUP_SPECS as xt, BirthDecisionRecordSchema as y, vectorDimFromBase64 as yi, TIMELAPSE_DENSE_FLOOR_SEC as yn, isDefaultAlarmProfileId as yr, NC_SENSOR_TRANSITION_KINDS as yt, FULL_IMAGE_BBOX as z, _enum as zi, audioMetricsCapability as zn, pickFaceRescoreIntervalMinutes as zr, NcRuleUpdateInputSchema as zt };
84946
+ export { MotionTriggeredBySchema as $, strictObject as $i, deriveDetailCropRect as $n, retrainRevisionConflictMessage as $r, OPS_LOG_DEFAULT_LIMIT as $t, DetectionSourceSchema as A, BaseAddon as Ai, TrackSourceSchema as An, isScheduleActive as Ar, NcAlarmSensorsSchema as At, FailureCounters as B, normalizeNodeId as Bi, assertTimelapseCadences as Bn, parseProcStatus as Br, NcRuleTargetSchema as Bt, CoverStateSchema as C, zoneAnalyticsCapability as Ci, TimelapseRuleInputSchema as Cn, isEventKindLabelKey as Cr, NC_SYSTEM_EVENT_KIND_GROUP_SPECS as Ct, DETECTION_MACRO_CLASSES as D, isSourceCap as Di, TrackRelationKindSchema as Dn, isMediaOwnerType as Dr, NcAlarmConfigSchema as Dt, DEFAULT_TIMELAPSE_PREVIEW_TEXT as E, evaluateSensorEdge as Ei, TrackPuritySchema as En, isLabelSupplyStepId as Er, NC_TEMPLATE_VARS as Et, EVENT_KIND_BY_CAP as F, defineCustomActions as Fi, applyBlockingEdit as Fn, linkedStepOf as Fr, NcRuleActionSchema as Ft, LockStateSchema as G, boolean as Gi, calendarEventLocalSpan as Gn, readMotionTriggeredBy as Gr, NcSnoozeSchema as Gt, LabelAttributionSchema as H, ZodObject as Hi, audioModeOf as Hn, pipelineAnalyticsCapability as Hr, NcScheduleSchema as Ht, EVENT_OWNER_TYPES as I, defineRecordKinds as Ii, applyModeDelaysEdits as In, mayWriteToLocation as Ir, NcRuleActionsSchema as It, MAX_BIRTH_LATENCY_PROXY_MS as J, looseObject as Ji, consumableLowPercentOf as Jn, resolveClipSearchMinScore as Jr, NcSystemEventKindSchema as Jt, MAX_ARCHIVED_DEBUG_NOTES as K, discriminatedUnion as Ki, classifyRetrainReview as Kn, readTimelapseGeneratedAt as Kr, NcSnoozeSuppressedSchema as Kt, EXPORT_DENSE_MAX_RANGES as L, hydrateSchema as Li, applyNonBlockingEdit as Ln, memoizePinnedFfmpeg as Lr, NcRuleInputSchema as Lt, EMBEDDING_REQUIREMENTS_FAILED as M, RECORD_MAX_DATA_BYTES as Mi, addonWidgetsSourceCapability as Mn, isSystemEventSummaryRule as Mr, NcConditionDescriptorSchema as Mt, EMBEDDING_REQUIREMENTS_UNAVAILABLE as N, createEvent as Ni, alarmDeviceSecureOnArm as Nn, isVectorIndexDimConflict as Nr, NcConditionsSchema as Nt, DETECTION_PIPELINE_CAP_NAME as O, DeviceType as Oi, TrackRelationSchema as On, isRetiredClearKey as Or, NcAlarmPostTriggeredActionSchema as Ot, EVENT_DENSITY_BATCH_MAX as P, customAction as Pi, alarmPanelCapability as Pn, kebabToCamel as Pr, NcLegacyRuleActionSequenceSchema as Pt, MediaFileKindEnum as Q, record as Qi, deleteAlarmProfile as Qn, resolvePoolMemoryPolicy as Qr, NcTemplateVarDescriptorSchema as Qt, FIRST_LEVEL_MACRO_CLASSES as R, isDeviceScopedCap as Ri, applySecureOnArmEdit as Rn, notificationRulesCapability as Rr, NcRulePatchSchema as Rt, ClearTrackRelationResultSchema as S, viewerLinkBaseOf as Si, TRACK_RELATIONS_DEFAULT_LIMIT as Sn, isDetectionMacroClass as Sr, NC_SNOOZE_MAX_MINUTES as St, DEFAULT_EVENT_COLOR as T, canonicalHash as Ti, TimelapseRuleSchema as Tn, isKnownTemplateVar as Tr, NC_TAXONOMY as Tt, ListTrackRelationsInputSchema as U, _enum as Ui, buildEventKindDescriptor as Un, plateGalleryCapability as Ur, NcSharedSequenceSchema as Ut, LABEL_SUPPLY_MACRO as V, sleep as Vi, audioMetricsCapability as Vn, pickFaceRescoreIntervalMinutes as Vr, NcRuleUpdateInputSchema as Vt, ListTrackRelationsResultSchema as W, array as Wi, buildViewerLink as Wn, readDeviceStateFrom as Wr, NcSnoozeInputSchema as Wt, MAX_TRACK_RELATIONS as X, object as Xi, cosineSimilarity as Xn, resolveModeDelays as Xr, NcTemplatePreviewInputSchema as Xt, MAX_TRACK_PURITIES as Y, number as Yi, coreBlockIdFromAddonId as Yn, resolveLocationMode as Yr, NcTaxonomySchema as Yt, MOTION_CLOSE_AFTER_MS as Z, partialRecord as Zi, createAlarmProfile as Zn, resolveModeNotifyPolicy as Zr, NcTemplatePreviewSchema as Zt, BIRTH_DECISION_DEFAULT_LIMIT as _, systemEventSummaryScheduleOf as _i, SceneMonitorSchema as _n, gifFromMp4Args as _r, NC_DEFAULT_SNOOZE_MINUTES as _t, CLIP_EMBEDDING_STEP_ID as a, EventCategory as aa, ruleKindOf as ai, RetrainDismissedSchema as an, embeddingEncoderCapability as ar, NC_ALARM_SYSTEM_EVENT_KINDS as at, COCO_TO_MACRO as b, templateVarsFor as bi, SetTrackRelationInputSchema as bn, isAudioClassName as br, NC_GROUPING_MIN_SEC as bt, readClusterModelPinStrict as c, sensorRaisedOf as ci, SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX as cn, embeddingRequirementsFailedError as cr, NC_AUDIO_CONFIRM_WINDOW_SEC_DEFAULT as ct, APPEARANCE_BLOCKS as d, subKindsOf as di, SCENE_DEFAULT_CHECK_INTERVAL_SEC as dn, ensureAlarmProfiles as dr, NC_CLIP_RETENTION_MAX_SEC as dt, string as ea, rootSupplyServes as ei, OpsLogEntrySchema as en, derivePostTriggeredAction as er, NC_ALARM_DEFAULT_PROFILE_ID as et, APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT as f, summarizeReview as fi, SCENE_DEFAULT_OBSERVATION_SPACING_SEC as fn, eventKindLabel as fr, NC_CONDITION_CATALOG as ft, ArchivedDebugNoteSchema as g, systemEventFilterApplies as gi, SCENE_RESET_RECAPTURES as gn, gifDeriveSpeed as gr, NC_CONSUMABLE_SYSTEM_EVENT_KINDS as gt, AlarmArmModeSchema as h, systemEventFamilyProblems as hi, SCENE_DIVERGED as hn, failureContributionCapability as hr, NC_CONSUMABLE_LOW_PERCENT_DEFAULT as ht, CLIP_TEXT_MODELS as i, unknown as ia, ruleGroupingApplies as ii, RebuildObjectEmbeddingsRefusalSchema as in, deviceRemovalHookCapability as ir, NC_ALARM_NOTIFY_FIELDS as it, EMBEDDING_MODEL_FAILED as j, CamProfileSchema as ji, activateAlarmProfile as jn, isSystemDelivery as jr, NcAlarmSettingsPatchSchema as jt, DeclaredDevices as k, errMsg as ki, TrackSideSchema as kn, isRootSuppliableStepId as kr, NcAlarmSensorsInputSchema as kt, resolveClusterModelPin as l, servedTemplateVars as li, SCENE_CONFIRM_DEFAULT_TIMEOUT_MS as ln, embeddingRequirementsUnavailableError as lr, NC_CLIP_POST_ROLL_DEFAULT_SEC as lt, AUDIO_MACRO_LABELS as m, systemEventDeliveryProblems as mi, SCENE_DEFAULT_UNCOVERED_POLICY as mn, faceGalleryCapability as mr, NC_CONFIRM_DEFAULT_TIMEOUT_MS as mt, DEFAULT_CLIP_MODEL as n, tuple as na, ruleBelongsToAlarm as ni, RECORDING_EXPORT_MAX_READ_BYTES as nn, describeSystemEventDeliveryProblem as nr, NC_ALARM_DELAY_FIELDS as nt, CLUSTER_MODEL_OWNER_ADDON_ID as o, sceneMonitorCapability as oi, RetrainOriginSchema as on, embeddingModelFailedError as or, NC_ALARM_TRIGGERED_MAX_SEC as ot, ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT as p, syncActiveAlarmProfileSettings as pi, SCENE_DEFAULT_QUIET_SECONDS as pn, evictionPolicyOfLocation as pr, NC_CONFIRM_DEFAULT_MAX_IMAGE_PX as pt, MAX_BIRTH_DECISION_RECORDS as q, literal as qi, cloneAlarmSettings as qn, renameAlarmProfile as qr, NcStateSummarySectionIdSchema as qt, CLIP_IMAGE_MODELS as r, union as ra, ruleDeviceCompatCapQueries as ri, RECORDING_SOURCE_CAMSTACK_ADDON as rn, describeSystemEventFamilyProblem as rr, NC_ALARM_DELAY_MAX_SEC as rt, FACE_EMBEDDING_STEP_ID as s, secureActuationFor as si, RetrainStatusSchema as sn, embeddingRefusalOf as sr, NC_AUDIO_CONFIRM_HITS_DEFAULT as st, BUILTIN_CLIP_MODELS as t, templateLiteral as ta, ruleAutoTriggersAlarm as ti, PoolMemoryWatchdog as tn, deriveRecordingMode as tr, NC_ALARM_DEFAULT_TRIGGERED_DURATION_SEC as tt, APPEARANCE_BIN_COUNT as u, storageOccupancyCapability as ui, SCENE_DEFAULT_ANCHOR_THRESHOLD as un, encodeVectorBase64 as ur, NC_CLIP_PRE_ROLL_DEFAULT_SEC as ut, BaseDevice as v, systemEventSummarySplitOf as vi, SetTrackPurityInputSchema as vn, isAlarmControllableCap as vr, NC_GROUPING_DEFAULT_SEC as vt, DEFAULT_DETAIL_CROP_CONVENTION as w, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as wi, TimelapseRulePatchSchema as wn, isEventOwnerType as wr, NC_TANK_SYSTEM_EVENT_KINDS as wt, ClearTrackRelationInputSchema as x, vectorDimFromBase64 as xi, TIMELAPSE_DENSE_FLOOR_SEC as xn, isDefaultAlarmProfileId as xr, NC_SENSOR_TRANSITION_KINDS as xt, BirthDecisionRecordSchema as y, templateCarriesSummary as yi, SetTrackPurityResultSchema as yn, isAppLinkBase as yr, NC_GROUPING_MAX_SEC as yt, FULL_IMAGE_BBOX as z, nodePin as zi, armRemovalReconcile as zn, occupancyScope as zr, NcRuleSchema as zt };