@camstack/addon-model-studio 1.1.268 → 1.1.269

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 (18) hide show
  1. package/dist/{MotionZonesSettings-Bbrx9VW1.mjs → MotionZonesSettings-CQCE7D5x.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-Bc3Nh1vj.mjs → PrivacyMaskSettings-CqIzAvon.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-DoqQ-nbD.mjs → SceneMonitorEditor-D4xyT88g.mjs} +3 -3
  4. package/dist/_stub.js +3529 -3521
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BalgjE7Q.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-CRat01zd.mjs} +4 -4
  6. package/dist/{_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D4LoTU4p.mjs → _virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CnmMjNl4.mjs} +1 -1
  7. package/dist/addon-model-studio.css +1 -1
  8. package/dist/{hostInit-BxoVlAJO.mjs → hostInit-CWxJPCLF.mjs} +3 -3
  9. package/dist/model-studio.addon.js +43 -21
  10. package/dist/model-studio.addon.mjs +43 -21
  11. package/dist/{player-overlays-DqOjIJBM.mjs → player-overlays-Rte6z1Nb.mjs} +1 -1
  12. package/dist/remoteEntry.js +1 -1
  13. package/dist/{responsive-DMQNbXa7.mjs → responsive-DBJKTwS9.mjs} +1 -1
  14. package/dist/{scene-monitor-copy-D7Oz3W2_.mjs → scene-monitor-copy-DHzQxb9S.mjs} +1 -1
  15. package/dist/{square-cSGFDS5x.mjs → square-DW4sxrDb.mjs} +1 -1
  16. package/dist/{trash-2-8LnhGolp.mjs → trash-2-BrJVk_OD.mjs} +1 -1
  17. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BbWnFACc.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CGhEUBpt.mjs} +1 -1
  18. package/package.json +1 -1
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.380",
39
+ version: "1.2.381",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,
@@ -45,7 +45,7 @@ async function r() {
45
45
  }
46
46
  },
47
47
  "@camstack/sdk": {
48
- version: "1.2.132",
48
+ version: "1.2.133",
49
49
  scope: "default",
50
50
  shareConfig: {
51
51
  singleton: !0,
@@ -81,7 +81,7 @@ async function r() {
81
81
  }
82
82
  },
83
83
  "@camstack/ui-library": {
84
- version: "1.2.298",
84
+ version: "1.2.299",
85
85
  scope: "default",
86
86
  shareConfig: {
87
87
  singleton: !0,
@@ -5800,7 +5800,7 @@ var ZodIssueCode = {
5800
5800
  var ZodFirstPartyTypeKind;
5801
5801
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5802
5802
  //#endregion
5803
- //#region ../types/dist/sleep-WsrozGDL.mjs
5803
+ //#region ../types/dist/sleep-bZIhUvjd.mjs
5804
5804
  /**
5805
5805
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5806
5806
  * window to float samples (D455).
@@ -5917,7 +5917,7 @@ function isKeychainStoredField(field) {
5917
5917
  var SECRET_CLEAR = { $secretClear: true };
5918
5918
  /** The `'***'` token D634 redaction writes for non-admins. */
5919
5919
  var LEGACY_DEVICE_REDACTION = "***";
5920
- function isRecord$4(value) {
5920
+ function isRecord$5(value) {
5921
5921
  return typeof value === "object" && value !== null && !Array.isArray(value);
5922
5922
  }
5923
5923
  function makeSecretMarker(ref) {
@@ -5928,12 +5928,12 @@ function makeSecretMarker(ref) {
5928
5928
  }
5929
5929
  /** A stored marker: an object whose `$secret` is a non-empty string. */
5930
5930
  function isSecretMarker(value) {
5931
- if (!isRecord$4(value)) return false;
5931
+ if (!isRecord$5(value)) return false;
5932
5932
  const ref = value["$secret"];
5933
5933
  return typeof ref === "string" && ref.length > 0;
5934
5934
  }
5935
5935
  function isSecretClear(value) {
5936
- return isRecord$4(value) && value["$secretClear"] === true;
5936
+ return isRecord$5(value) && value["$secretClear"] === true;
5937
5937
  }
5938
5938
  /**
5939
5939
  * The UI view of a stored secret field value: a marker becomes "set", inline
@@ -6543,7 +6543,7 @@ var KeychainWriteRefusedError = class extends Error {
6543
6543
  }
6544
6544
  };
6545
6545
  var KEEP = { kind: "keep" };
6546
- function isRecord$3(value) {
6546
+ function isRecord$4(value) {
6547
6547
  return typeof value === "object" && value !== null && !Array.isArray(value);
6548
6548
  }
6549
6549
  function defaultMintId() {
@@ -6556,7 +6556,7 @@ function collectSecretMarkerRefs(value, out = []) {
6556
6556
  return out;
6557
6557
  }
6558
6558
  if (Array.isArray(value)) for (const item of value) collectSecretMarkerRefs(item, out);
6559
- else if (isRecord$3(value)) for (const child of Object.values(value)) collectSecretMarkerRefs(child, out);
6559
+ else if (isRecord$4(value)) for (const child of Object.values(value)) collectSecretMarkerRefs(child, out);
6560
6560
  return out;
6561
6561
  }
6562
6562
  async function storedValueEquals(secrets, marker, candidate) {
@@ -6611,7 +6611,7 @@ function rowId(row, idKey) {
6611
6611
  return null;
6612
6612
  }
6613
6613
  async function writeArray(ctx, node, incoming, stored, fieldPath) {
6614
- const storedRows = Array.isArray(stored) ? stored.filter(isRecord$3) : [];
6614
+ const storedRows = Array.isArray(stored) ? stored.filter(isRecord$4) : [];
6615
6615
  if (!Array.isArray(incoming)) {
6616
6616
  ctx.deletes.push(...collectSecretMarkerRefs(storedRows));
6617
6617
  return {
@@ -6627,7 +6627,7 @@ async function writeArray(ctx, node, incoming, stored, fieldPath) {
6627
6627
  const kept = /* @__PURE__ */ new Set();
6628
6628
  const rows = [];
6629
6629
  for (const row of incoming) {
6630
- if (!isRecord$3(row)) {
6630
+ if (!isRecord$4(row)) {
6631
6631
  rows.push(row);
6632
6632
  continue;
6633
6633
  }
@@ -6652,7 +6652,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
6652
6652
  case "leaf": return writeLeaf(ctx, incoming, stored, fieldPath);
6653
6653
  case "array": return writeArray(ctx, node, incoming, stored, fieldPath);
6654
6654
  case "object": {
6655
- if (!isRecord$3(incoming)) {
6655
+ if (!isRecord$4(incoming)) {
6656
6656
  if (incoming === void 0) return KEEP;
6657
6657
  ctx.deletes.push(...collectSecretMarkerRefs(stored));
6658
6658
  return {
@@ -6660,7 +6660,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
6660
6660
  value: incoming
6661
6661
  };
6662
6662
  }
6663
- const storedObj = isRecord$3(stored) ? stored : {};
6663
+ const storedObj = isRecord$4(stored) ? stored : {};
6664
6664
  return {
6665
6665
  kind: "value",
6666
6666
  value: await writeMembers(ctx, node.children, incoming, storedObj, (m) => `${fieldPath}.${m}`)
@@ -6783,7 +6783,7 @@ async function resolveSecretMarkers(value, secrets, options = {}) {
6783
6783
  value: items
6784
6784
  };
6785
6785
  }
6786
- if (isRecord$3(v)) {
6786
+ if (isRecord$4(v)) {
6787
6787
  const out = {};
6788
6788
  for (const [k, child] of Object.entries(v)) {
6789
6789
  const s = substitute(child);
@@ -6815,7 +6815,7 @@ var SecretOverwriteRefusedError = class extends Error {
6815
6815
  this.name = "SecretOverwriteRefusedError";
6816
6816
  }
6817
6817
  };
6818
- function isRecord$2(value) {
6818
+ function isRecord$3(value) {
6819
6819
  return typeof value === "object" && value !== null && !Array.isArray(value);
6820
6820
  }
6821
6821
  function resolvedValue(pass, marker) {
@@ -6844,7 +6844,7 @@ function inArray(pass, incoming, stored) {
6844
6844
  return incoming.map((item, index) => {
6845
6845
  const twin = stored[index];
6846
6846
  if (isSecretMarker(twin)) return typeof item === "string" && item === resolvedValue(pass, twin) ? twin : item;
6847
- if (isRecord$2(item) && isRecord$2(twin)) return inArrayRow(pass, item, twin);
6847
+ if (isRecord$3(item) && isRecord$3(twin)) return inArrayRow(pass, item, twin);
6848
6848
  if (Array.isArray(item) && Array.isArray(twin)) return inArray(pass, item, twin);
6849
6849
  return item;
6850
6850
  });
@@ -6855,7 +6855,7 @@ function inArrayRow(pass, incoming, stored) {
6855
6855
  const twin = stored[key];
6856
6856
  if (isSecretMarker(twin)) {
6857
6857
  if (typeof value === "string" && value === resolvedValue(pass, twin)) out[key] = twin;
6858
- } else if (isRecord$2(value) && isRecord$2(twin)) out[key] = inArrayRow(pass, value, twin);
6858
+ } else if (isRecord$3(value) && isRecord$3(twin)) out[key] = inArrayRow(pass, value, twin);
6859
6859
  else if (Array.isArray(value) && Array.isArray(twin)) out[key] = inArray(pass, value, twin);
6860
6860
  }
6861
6861
  return out;
@@ -6863,7 +6863,7 @@ function inArrayRow(pass, incoming, stored) {
6863
6863
  async function walk(pass, incoming, stored) {
6864
6864
  if (isSecretMarker(stored)) return atMarker(pass, incoming, stored);
6865
6865
  if (Array.isArray(incoming) && Array.isArray(stored)) return inArray(pass, incoming, stored);
6866
- if (!isRecord$2(incoming) || !isRecord$2(stored)) return incoming;
6866
+ if (!isRecord$3(incoming) || !isRecord$3(stored)) return incoming;
6867
6867
  const out = { ...incoming };
6868
6868
  for (const [key, value] of Object.entries(incoming)) out[key] = await walk(pass, value, stored[key]);
6869
6869
  return out;
@@ -6894,7 +6894,7 @@ async function restoreUnchangedSecrets(input) {
6894
6894
  function isJsonEqual(a, b) {
6895
6895
  if (Object.is(a, b)) return true;
6896
6896
  if (Array.isArray(a)) return Array.isArray(b) && a.length === b.length && a.every((v, i) => isJsonEqual(v, b[i]));
6897
- if (isRecord$2(a) && isRecord$2(b)) {
6897
+ if (isRecord$3(a) && isRecord$3(b)) {
6898
6898
  const keys = Object.keys(a);
6899
6899
  if (keys.length !== Object.keys(b).length) return false;
6900
6900
  return keys.every((k) => Object.prototype.hasOwnProperty.call(b, k) && isJsonEqual(a[k], b[k]));
@@ -6918,7 +6918,7 @@ function markerKeysOf(blob, owner) {
6918
6918
  }
6919
6919
  function nodeFromStored(value, owner) {
6920
6920
  if (isSecretMarker(value)) return isSecretRefOwnedBy(value.$secret, owner) ? { kind: "leaf" } : null;
6921
- if (!isRecord$2(value)) return null;
6921
+ if (!isRecord$3(value)) return null;
6922
6922
  const children = /* @__PURE__ */ new Map();
6923
6923
  for (const [key, child] of Object.entries(value)) {
6924
6924
  const node = nodeFromStored(child, owner);
@@ -7706,7 +7706,7 @@ var BaseAddon = class {
7706
7706
  if (!ctx) return;
7707
7707
  const addonId = ctx.id;
7708
7708
  setImmediate(() => {
7709
- ctx.api.addons?.restartAddon?.mutate({ addonId }).then(() => {
7709
+ ctx.api.addons.restartAddon.mutate({ addonId }).then(() => {
7710
7710
  ctx.logger.info("addon auto-restart triggered by restart-required setting change", { meta: { changedFields: patchKeys.filter((k) => restartKeys.has(k)) } });
7711
7711
  }).catch((err) => {
7712
7712
  ctx.logger.error("addon auto-restart failed", { meta: { error: err instanceof Error ? err.message : String(err) } });
@@ -16981,13 +16981,23 @@ method(object({ ownerPrefix: string().min(1).optional() }), object({ tables: arr
16981
16981
  }), RecordQueryResultSchema, { auth: "admin" }), method(object({
16982
16982
  owner: string().min(1),
16983
16983
  kind: RecordKindNameSchema,
16984
- records: array(RecordInputSchema).min(1).max(RECORD_BATCH_MAX),
16984
+ records: array(RecordInputSchema).max(RECORD_BATCH_MAX),
16985
16985
  /** The LAST batch: the copy is complete, the boot guard stops asking. */
16986
16986
  complete: boolean().optional()
16987
- }), object({ adopted: number().int() }), {
16987
+ }).refine((input) => input.records.length > 0 || input.complete === true, { message: "records must be non-empty unless complete is true" }), object({ adopted: number().int() }), {
16988
16988
  kind: "mutation",
16989
16989
  auth: "admin"
16990
- });
16990
+ }), method(object({
16991
+ collection: string().min(1),
16992
+ cursor: string().optional(),
16993
+ limit: number().int().min(1).max(1e3).optional()
16994
+ }), object({
16995
+ rows: array(object({
16996
+ id: string(),
16997
+ data: record(string(), unknown())
16998
+ })),
16999
+ nextCursor: string().nullable()
17000
+ }), { auth: "admin" }), method(object({ collection: string().min(1) }), object({ adopted: boolean() }), { auth: "admin" });
16991
17001
  /**
16992
17002
  * record-entries - the ONE admin surface for every list of user-created entries
16993
17003
  * (D881): notification targets, brokers, LLM profiles, anything an addon
@@ -69063,6 +69073,12 @@ Object.freeze({
69063
69073
  addonId: null,
69064
69074
  access: "delete"
69065
69075
  },
69076
+ "storageAdmin.isAdoptedLegacyTable": {
69077
+ capName: "storage-admin",
69078
+ capScope: "system",
69079
+ addonId: null,
69080
+ access: "view"
69081
+ },
69066
69082
  "storageAdmin.listKinds": {
69067
69083
  capName: "storage-admin",
69068
69084
  capScope: "system",
@@ -69075,6 +69091,12 @@ Object.freeze({
69075
69091
  addonId: null,
69076
69092
  access: "view"
69077
69093
  },
69094
+ "storageAdmin.readLegacyCollection": {
69095
+ capName: "storage-admin",
69096
+ capScope: "system",
69097
+ addonId: null,
69098
+ access: "view"
69099
+ },
69078
69100
  "storageAdmin.readRecords": {
69079
69101
  capName: "storage-admin",
69080
69102
  capScope: "system",
@@ -5774,7 +5774,7 @@ var ZodIssueCode = {
5774
5774
  var ZodFirstPartyTypeKind;
5775
5775
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5776
5776
  //#endregion
5777
- //#region ../types/dist/sleep-WsrozGDL.mjs
5777
+ //#region ../types/dist/sleep-bZIhUvjd.mjs
5778
5778
  /**
5779
5779
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5780
5780
  * window to float samples (D455).
@@ -5891,7 +5891,7 @@ function isKeychainStoredField(field) {
5891
5891
  var SECRET_CLEAR = { $secretClear: true };
5892
5892
  /** The `'***'` token D634 redaction writes for non-admins. */
5893
5893
  var LEGACY_DEVICE_REDACTION = "***";
5894
- function isRecord$4(value) {
5894
+ function isRecord$5(value) {
5895
5895
  return typeof value === "object" && value !== null && !Array.isArray(value);
5896
5896
  }
5897
5897
  function makeSecretMarker(ref) {
@@ -5902,12 +5902,12 @@ function makeSecretMarker(ref) {
5902
5902
  }
5903
5903
  /** A stored marker: an object whose `$secret` is a non-empty string. */
5904
5904
  function isSecretMarker(value) {
5905
- if (!isRecord$4(value)) return false;
5905
+ if (!isRecord$5(value)) return false;
5906
5906
  const ref = value["$secret"];
5907
5907
  return typeof ref === "string" && ref.length > 0;
5908
5908
  }
5909
5909
  function isSecretClear(value) {
5910
- return isRecord$4(value) && value["$secretClear"] === true;
5910
+ return isRecord$5(value) && value["$secretClear"] === true;
5911
5911
  }
5912
5912
  /**
5913
5913
  * The UI view of a stored secret field value: a marker becomes "set", inline
@@ -6517,7 +6517,7 @@ var KeychainWriteRefusedError = class extends Error {
6517
6517
  }
6518
6518
  };
6519
6519
  var KEEP = { kind: "keep" };
6520
- function isRecord$3(value) {
6520
+ function isRecord$4(value) {
6521
6521
  return typeof value === "object" && value !== null && !Array.isArray(value);
6522
6522
  }
6523
6523
  function defaultMintId() {
@@ -6530,7 +6530,7 @@ function collectSecretMarkerRefs(value, out = []) {
6530
6530
  return out;
6531
6531
  }
6532
6532
  if (Array.isArray(value)) for (const item of value) collectSecretMarkerRefs(item, out);
6533
- else if (isRecord$3(value)) for (const child of Object.values(value)) collectSecretMarkerRefs(child, out);
6533
+ else if (isRecord$4(value)) for (const child of Object.values(value)) collectSecretMarkerRefs(child, out);
6534
6534
  return out;
6535
6535
  }
6536
6536
  async function storedValueEquals(secrets, marker, candidate) {
@@ -6585,7 +6585,7 @@ function rowId(row, idKey) {
6585
6585
  return null;
6586
6586
  }
6587
6587
  async function writeArray(ctx, node, incoming, stored, fieldPath) {
6588
- const storedRows = Array.isArray(stored) ? stored.filter(isRecord$3) : [];
6588
+ const storedRows = Array.isArray(stored) ? stored.filter(isRecord$4) : [];
6589
6589
  if (!Array.isArray(incoming)) {
6590
6590
  ctx.deletes.push(...collectSecretMarkerRefs(storedRows));
6591
6591
  return {
@@ -6601,7 +6601,7 @@ async function writeArray(ctx, node, incoming, stored, fieldPath) {
6601
6601
  const kept = /* @__PURE__ */ new Set();
6602
6602
  const rows = [];
6603
6603
  for (const row of incoming) {
6604
- if (!isRecord$3(row)) {
6604
+ if (!isRecord$4(row)) {
6605
6605
  rows.push(row);
6606
6606
  continue;
6607
6607
  }
@@ -6626,7 +6626,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
6626
6626
  case "leaf": return writeLeaf(ctx, incoming, stored, fieldPath);
6627
6627
  case "array": return writeArray(ctx, node, incoming, stored, fieldPath);
6628
6628
  case "object": {
6629
- if (!isRecord$3(incoming)) {
6629
+ if (!isRecord$4(incoming)) {
6630
6630
  if (incoming === void 0) return KEEP;
6631
6631
  ctx.deletes.push(...collectSecretMarkerRefs(stored));
6632
6632
  return {
@@ -6634,7 +6634,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
6634
6634
  value: incoming
6635
6635
  };
6636
6636
  }
6637
- const storedObj = isRecord$3(stored) ? stored : {};
6637
+ const storedObj = isRecord$4(stored) ? stored : {};
6638
6638
  return {
6639
6639
  kind: "value",
6640
6640
  value: await writeMembers(ctx, node.children, incoming, storedObj, (m) => `${fieldPath}.${m}`)
@@ -6757,7 +6757,7 @@ async function resolveSecretMarkers(value, secrets, options = {}) {
6757
6757
  value: items
6758
6758
  };
6759
6759
  }
6760
- if (isRecord$3(v)) {
6760
+ if (isRecord$4(v)) {
6761
6761
  const out = {};
6762
6762
  for (const [k, child] of Object.entries(v)) {
6763
6763
  const s = substitute(child);
@@ -6789,7 +6789,7 @@ var SecretOverwriteRefusedError = class extends Error {
6789
6789
  this.name = "SecretOverwriteRefusedError";
6790
6790
  }
6791
6791
  };
6792
- function isRecord$2(value) {
6792
+ function isRecord$3(value) {
6793
6793
  return typeof value === "object" && value !== null && !Array.isArray(value);
6794
6794
  }
6795
6795
  function resolvedValue(pass, marker) {
@@ -6818,7 +6818,7 @@ function inArray(pass, incoming, stored) {
6818
6818
  return incoming.map((item, index) => {
6819
6819
  const twin = stored[index];
6820
6820
  if (isSecretMarker(twin)) return typeof item === "string" && item === resolvedValue(pass, twin) ? twin : item;
6821
- if (isRecord$2(item) && isRecord$2(twin)) return inArrayRow(pass, item, twin);
6821
+ if (isRecord$3(item) && isRecord$3(twin)) return inArrayRow(pass, item, twin);
6822
6822
  if (Array.isArray(item) && Array.isArray(twin)) return inArray(pass, item, twin);
6823
6823
  return item;
6824
6824
  });
@@ -6829,7 +6829,7 @@ function inArrayRow(pass, incoming, stored) {
6829
6829
  const twin = stored[key];
6830
6830
  if (isSecretMarker(twin)) {
6831
6831
  if (typeof value === "string" && value === resolvedValue(pass, twin)) out[key] = twin;
6832
- } else if (isRecord$2(value) && isRecord$2(twin)) out[key] = inArrayRow(pass, value, twin);
6832
+ } else if (isRecord$3(value) && isRecord$3(twin)) out[key] = inArrayRow(pass, value, twin);
6833
6833
  else if (Array.isArray(value) && Array.isArray(twin)) out[key] = inArray(pass, value, twin);
6834
6834
  }
6835
6835
  return out;
@@ -6837,7 +6837,7 @@ function inArrayRow(pass, incoming, stored) {
6837
6837
  async function walk(pass, incoming, stored) {
6838
6838
  if (isSecretMarker(stored)) return atMarker(pass, incoming, stored);
6839
6839
  if (Array.isArray(incoming) && Array.isArray(stored)) return inArray(pass, incoming, stored);
6840
- if (!isRecord$2(incoming) || !isRecord$2(stored)) return incoming;
6840
+ if (!isRecord$3(incoming) || !isRecord$3(stored)) return incoming;
6841
6841
  const out = { ...incoming };
6842
6842
  for (const [key, value] of Object.entries(incoming)) out[key] = await walk(pass, value, stored[key]);
6843
6843
  return out;
@@ -6868,7 +6868,7 @@ async function restoreUnchangedSecrets(input) {
6868
6868
  function isJsonEqual(a, b) {
6869
6869
  if (Object.is(a, b)) return true;
6870
6870
  if (Array.isArray(a)) return Array.isArray(b) && a.length === b.length && a.every((v, i) => isJsonEqual(v, b[i]));
6871
- if (isRecord$2(a) && isRecord$2(b)) {
6871
+ if (isRecord$3(a) && isRecord$3(b)) {
6872
6872
  const keys = Object.keys(a);
6873
6873
  if (keys.length !== Object.keys(b).length) return false;
6874
6874
  return keys.every((k) => Object.prototype.hasOwnProperty.call(b, k) && isJsonEqual(a[k], b[k]));
@@ -6892,7 +6892,7 @@ function markerKeysOf(blob, owner) {
6892
6892
  }
6893
6893
  function nodeFromStored(value, owner) {
6894
6894
  if (isSecretMarker(value)) return isSecretRefOwnedBy(value.$secret, owner) ? { kind: "leaf" } : null;
6895
- if (!isRecord$2(value)) return null;
6895
+ if (!isRecord$3(value)) return null;
6896
6896
  const children = /* @__PURE__ */ new Map();
6897
6897
  for (const [key, child] of Object.entries(value)) {
6898
6898
  const node = nodeFromStored(child, owner);
@@ -7680,7 +7680,7 @@ var BaseAddon = class {
7680
7680
  if (!ctx) return;
7681
7681
  const addonId = ctx.id;
7682
7682
  setImmediate(() => {
7683
- ctx.api.addons?.restartAddon?.mutate({ addonId }).then(() => {
7683
+ ctx.api.addons.restartAddon.mutate({ addonId }).then(() => {
7684
7684
  ctx.logger.info("addon auto-restart triggered by restart-required setting change", { meta: { changedFields: patchKeys.filter((k) => restartKeys.has(k)) } });
7685
7685
  }).catch((err) => {
7686
7686
  ctx.logger.error("addon auto-restart failed", { meta: { error: err instanceof Error ? err.message : String(err) } });
@@ -16955,13 +16955,23 @@ method(object({ ownerPrefix: string().min(1).optional() }), object({ tables: arr
16955
16955
  }), RecordQueryResultSchema, { auth: "admin" }), method(object({
16956
16956
  owner: string().min(1),
16957
16957
  kind: RecordKindNameSchema,
16958
- records: array(RecordInputSchema).min(1).max(RECORD_BATCH_MAX),
16958
+ records: array(RecordInputSchema).max(RECORD_BATCH_MAX),
16959
16959
  /** The LAST batch: the copy is complete, the boot guard stops asking. */
16960
16960
  complete: boolean().optional()
16961
- }), object({ adopted: number().int() }), {
16961
+ }).refine((input) => input.records.length > 0 || input.complete === true, { message: "records must be non-empty unless complete is true" }), object({ adopted: number().int() }), {
16962
16962
  kind: "mutation",
16963
16963
  auth: "admin"
16964
- });
16964
+ }), method(object({
16965
+ collection: string().min(1),
16966
+ cursor: string().optional(),
16967
+ limit: number().int().min(1).max(1e3).optional()
16968
+ }), object({
16969
+ rows: array(object({
16970
+ id: string(),
16971
+ data: record(string(), unknown())
16972
+ })),
16973
+ nextCursor: string().nullable()
16974
+ }), { auth: "admin" }), method(object({ collection: string().min(1) }), object({ adopted: boolean() }), { auth: "admin" });
16965
16975
  /**
16966
16976
  * record-entries - the ONE admin surface for every list of user-created entries
16967
16977
  * (D881): notification targets, brokers, LLM profiles, anything an addon
@@ -69037,6 +69047,12 @@ Object.freeze({
69037
69047
  addonId: null,
69038
69048
  access: "delete"
69039
69049
  },
69050
+ "storageAdmin.isAdoptedLegacyTable": {
69051
+ capName: "storage-admin",
69052
+ capScope: "system",
69053
+ addonId: null,
69054
+ access: "view"
69055
+ },
69040
69056
  "storageAdmin.listKinds": {
69041
69057
  capName: "storage-admin",
69042
69058
  capScope: "system",
@@ -69049,6 +69065,12 @@ Object.freeze({
69049
69065
  addonId: null,
69050
69066
  access: "view"
69051
69067
  },
69068
+ "storageAdmin.readLegacyCollection": {
69069
+ capName: "storage-admin",
69070
+ capScope: "system",
69071
+ addonId: null,
69072
+ access: "view"
69073
+ },
69052
69074
  "storageAdmin.readRecords": {
69053
69075
  capName: "storage-admin",
69054
69076
  capScope: "system",
@@ -1,6 +1,6 @@
1
1
  import { S as e, d as t, u as n, v as r } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DMBKVIH7.mjs";
2
2
  import { n as i, r as a, t as o } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
3
- import { g as s, h as c } from "./responsive-DMQNbXa7.mjs";
3
+ import { g as s, h as c } from "./responsive-DBJKTwS9.mjs";
4
4
  var l = s("chevron-down", [["path", {
5
5
  d: "m6 9 6 6 6-6",
6
6
  key: "qrunsl"
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BbWnFACc.mjs";
1
+ import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CGhEUBpt.mjs";
2
2
  export { t as get, e as init };
@@ -1,6 +1,6 @@
1
1
  import { S as e, d as t, g as n, i as r, l as i, n as a, r as o, u as s, v as c, y as l } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DMBKVIH7.mjs";
2
2
  import "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
3
- import { g as u } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D4LoTU4p.mjs";
3
+ import { g as u } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CnmMjNl4.mjs";
4
4
  //#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
5
5
  e();
6
6
  var d = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), f = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), p = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), m = (e) => {
@@ -1,6 +1,6 @@
1
1
  import { S as e, g as t, l as n, v as r } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DMBKVIH7.mjs";
2
2
  import { n as i } from "./ui-text-BqZa5BNK.mjs";
3
- import { g as a } from "./responsive-DMQNbXa7.mjs";
3
+ import { g as a } from "./responsive-DBJKTwS9.mjs";
4
4
  var o = a("camera", [["path", {
5
5
  d: "M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z",
6
6
  key: "18u6gg"
@@ -1,4 +1,4 @@
1
- import { g as e } from "./responsive-DMQNbXa7.mjs";
1
+ import { g as e } from "./responsive-DBJKTwS9.mjs";
2
2
  var t = e("eye-off", [
3
3
  ["path", {
4
4
  d: "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",
@@ -1,4 +1,4 @@
1
- import { g as e } from "./responsive-DMQNbXa7.mjs";
1
+ import { g as e } from "./responsive-DBJKTwS9.mjs";
2
2
  var t = e("trash-2", [
3
3
  ["path", {
4
4
  d: "M10 11v6",
@@ -2753,7 +2753,7 @@ async function rr(e) {
2753
2753
  }
2754
2754
  }
2755
2755
  async function ir() {
2756
- return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BalgjE7Q.mjs")).catch((e) => {
2756
+ return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-CRat01zd.mjs")).catch((e) => {
2757
2757
  throw tr = void 0, e;
2758
2758
  }), tr;
2759
2759
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-model-studio",
3
- "version": "1.1.268",
3
+ "version": "1.1.269",
4
4
  "description": "Custom detection model registry, conversion & distribution for CamStack",
5
5
  "keywords": [
6
6
  "camstack",