@camstack/addon-post-analysis 1.2.371 → 1.2.372

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.
@@ -5490,7 +5490,7 @@ var ZodIssueCode = {
5490
5490
  var ZodFirstPartyTypeKind;
5491
5491
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5492
5492
  //#endregion
5493
- //#region ../types/dist/sleep-DRqxtc0C.mjs
5493
+ //#region ../types/dist/sleep-bwsTj221.mjs
5494
5494
  /**
5495
5495
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5496
5496
  * window to float samples (D455).
@@ -6741,7 +6741,6 @@ function createHandle(raw, opts) {
6741
6741
  const writeAddon = (patch) => write("addon", opts.addonTree(), void 0, patch, () => readStoredAddonBlob(raw), (p) => raw.writeAddonStore(p));
6742
6742
  const readAddonStoreResult = raw.readAddonStoreResult;
6743
6743
  const readAddonStoreKeyResult = raw.readAddonStoreKeyResult;
6744
- const readDeviceStoreBatch = raw.readDeviceStoreBatch;
6745
6744
  const overrides = {
6746
6745
  readAddonStore: async () => resolveRead("addon", await raw.readAddonStore()),
6747
6746
  ...readAddonStoreResult !== void 0 ? { readAddonStoreResult: async () => {
@@ -6765,12 +6764,12 @@ function createHandle(raw, opts) {
6765
6764
  };
6766
6765
  } } : {},
6767
6766
  readDeviceStore: async (deviceId) => resolveRead(`device:${deviceId}`, await raw.readDeviceStore(deviceId)),
6768
- ...readDeviceStoreBatch !== void 0 ? { readDeviceStoreBatch: async (deviceIds) => {
6769
- const rows = await readDeviceStoreBatch.call(raw, deviceIds);
6767
+ readDeviceStoreBatch: async (deviceIds) => {
6768
+ const rows = await raw.readDeviceStoreBatch(deviceIds);
6770
6769
  const out = /* @__PURE__ */ new Map();
6771
6770
  for (const [deviceId, blob] of rows) out.set(deviceId, await resolveRead(`device:${deviceId}`, blob));
6772
6771
  return out;
6773
- } } : {},
6772
+ },
6774
6773
  writeAddonStore: async (patch) => {
6775
6774
  await writeAddon(patch);
6776
6775
  },
@@ -7597,7 +7596,7 @@ var BaseAddon = class {
7597
7596
  return this._addonSecretTree;
7598
7597
  }
7599
7598
  deviceSecretTree() {
7600
- this._deviceSecretTree ??= secretTreeFromSchema(this.deviceSettingsSchema());
7599
+ this._deviceSecretTree ??= mergeSecretStatePaths(secretTreeFromSchema(this.deviceSettingsSchema()), this.secretStatePaths);
7601
7600
  return this._deviceSecretTree;
7602
7601
  }
7603
7602
  /**
@@ -7673,42 +7672,135 @@ var BaseAddon = class {
7673
7672
  this[timerOf] = timer;
7674
7673
  }
7675
7674
  /**
7676
- * Wrap `ctx.settings.readAddonStore()` with a short retry budget so a
7677
- * transient settings-store outage (mid-restart of sqlite-settings, tsx-watch
7678
- * swap, or any race where the SqliteSettingsBackend is between shutdown and
7679
- * re-initialize) doesn't propagate up into `initialize()` and leave the
7675
+ * Wrap `ctx.settings.readAddonStore()` with a retry budget so a transient
7676
+ * settings-store outage doesn't propagate up into `initialize()` and leave the
7680
7677
  * addon permanently broken.
7681
7678
  *
7682
- * Retry only the two known infra fingerprints. Anything else propagates so
7683
- * real bugs surface immediately. After the budget expires we fall back to
7684
- * `{}` (defaults) — the addon's first successful patch will rehydrate.
7679
+ * Two kinds of outage, two budgets:
7680
+ * - the store's own restart fingerprints (`SqliteSettingsBackend not
7681
+ * initialized`, `provider not available`): a short budget, then the addon
7682
+ * falls back to `{}` (defaults) - its first successful patch rehydrates;
7683
+ * - a TRANSPORT failure (the hub is restarting while this runner boots:
7684
+ * `discovery deadline exceeded`, `parent could not route`, a refused or
7685
+ * timed-out connection). Since D870 a runner's settings read THROWS instead
7686
+ * of answering `{}`, so without a budget a hub restart ends in a respawn
7687
+ * loop. A long, bounded budget; only after it the error propagates - the
7688
+ * addon never runs on defaults for a store it could not ask.
7689
+ * Anything else propagates immediately so real bugs surface.
7685
7690
  */
7686
7691
  async readAddonStoreWithRetry() {
7687
7692
  const settings = this.rawSettings();
7688
7693
  if (!settings) return {};
7689
- const delaysMs = [
7690
- 150,
7691
- 350,
7692
- 600,
7693
- 900
7694
- ];
7695
7694
  let lastErr;
7696
- for (let attempt = 0; attempt <= delaysMs.length; attempt++) try {
7695
+ for (let attempt = 0;; attempt++) try {
7697
7696
  const stored = await settings.readAddonStore() ?? {};
7698
7697
  this.settingsStoreReady = true;
7699
7698
  return stored;
7700
7699
  } catch (err) {
7701
7700
  lastErr = err;
7702
- const msg = err instanceof Error ? err.message : String(err);
7703
- if (!(msg.includes("SqliteSettingsBackend not initialized") || msg.includes("provider not available"))) throw err;
7704
- if (attempt === delaysMs.length) break;
7705
- await new Promise((r) => setTimeout(r, delaysMs[attempt]));
7701
+ const kind = classifyStoreError(err);
7702
+ if (kind === "permanent") throw err;
7703
+ const delay = (kind === "transport" ? TRANSPORT_RETRY_DELAYS_MS : RESTART_RETRY_DELAYS_MS)[attempt];
7704
+ if (delay === void 0) {
7705
+ if (kind === "transport") throw err;
7706
+ break;
7707
+ }
7708
+ await new Promise((r) => setTimeout(r, delay));
7706
7709
  }
7707
7710
  this.settingsStoreReady = false;
7708
7711
  this._ctx?.logger?.warn?.("readAddonStore: settings-store unavailable after retries — using defaults", { meta: { error: lastErr instanceof Error ? lastErr.message : String(lastErr) } });
7709
7712
  return {};
7710
7713
  }
7711
7714
  };
7715
+ /** The settings store's own restart fingerprints. */
7716
+ var RESTART_RETRY_DELAYS_MS = [
7717
+ 150,
7718
+ 350,
7719
+ 600,
7720
+ 900
7721
+ ];
7722
+ /** A hub restarting under a booting runner: ~100 s in total. */
7723
+ var TRANSPORT_RETRY_DELAYS_MS = [
7724
+ 150,
7725
+ 350,
7726
+ 600,
7727
+ 900,
7728
+ 2e3,
7729
+ 5e3,
7730
+ 1e4,
7731
+ 2e4,
7732
+ 3e4,
7733
+ 3e4
7734
+ ];
7735
+ var RESTART_FINGERPRINTS = ["SqliteSettingsBackend not initialized", "provider not available"];
7736
+ /** Node / socket error codes of a connection that did not happen or broke. */
7737
+ var TRANSPORT_CODES = new Set([
7738
+ "ECONNREFUSED",
7739
+ "ECONNRESET",
7740
+ "ETIMEDOUT",
7741
+ "EPIPE",
7742
+ "EHOSTUNREACH",
7743
+ "ENETUNREACH"
7744
+ ]);
7745
+ /** tRPC error codes that mean "the other side is not answering now", not "your call is wrong". */
7746
+ var UNAVAILABLE_TRPC_CODES = new Set([
7747
+ "TIMEOUT",
7748
+ "SERVICE_UNAVAILABLE",
7749
+ "BAD_GATEWAY",
7750
+ "GATEWAY_TIMEOUT"
7751
+ ]);
7752
+ /** The exact phrases OUR transport raises when it cannot reach the hub. */
7753
+ var TRANSPORT_PHRASES = [
7754
+ "discovery deadline exceeded",
7755
+ "parent could not route child unowned cap call",
7756
+ "UDS request timed out after",
7757
+ "channel closed"
7758
+ ];
7759
+ /** Moleculer error `type`s of a call that could not be served right now. */
7760
+ var MOLECULER_TRANSIENT_TYPES = new Set([
7761
+ "REQUEST_TIMEOUT",
7762
+ "SERVICE_NOT_FOUND",
7763
+ "SERVICE_NOT_AVAILABLE",
7764
+ "REQUEST_REJECTED",
7765
+ "BROKER_DISCONNECTED"
7766
+ ]);
7767
+ function stringProp(value, key) {
7768
+ if (typeof value !== "object" || value === null) return void 0;
7769
+ const found = Reflect.get(value, key);
7770
+ return typeof found === "string" ? found : void 0;
7771
+ }
7772
+ /** The code an error carries: its own, its cause's, or a tRPC `data.code`. */
7773
+ function errorCode(err) {
7774
+ const out = {};
7775
+ const cause = typeof err === "object" && err !== null ? Reflect.get(err, "cause") : void 0;
7776
+ const data = typeof err === "object" && err !== null ? Reflect.get(err, "data") : void 0;
7777
+ const node = stringProp(err, "code") ?? stringProp(cause, "code");
7778
+ if (node !== void 0) out.node = node;
7779
+ const trpc = stringProp(data, "code");
7780
+ if (trpc !== void 0) out.trpc = trpc;
7781
+ return out;
7782
+ }
7783
+ /**
7784
+ * Is a settings read failure worth retrying, and with which budget? Only
7785
+ * EXPLICIT signals count: a socket error code, a tRPC "unavailable" code, or
7786
+ * one of the exact phrases our own transport raises. A message that merely
7787
+ * contains "timed out" or "unreachable" is not evidence of anything, and
7788
+ * `settings store not wired` is a wiring bug that retrying cannot fix.
7789
+ */
7790
+ function classifyStoreError(err) {
7791
+ const message = err instanceof Error ? err.message : String(err);
7792
+ if (RESTART_FINGERPRINTS.some((f) => message.includes(f))) return "restart";
7793
+ const code = errorCode(err);
7794
+ if (code.node !== void 0 && TRANSPORT_CODES.has(code.node)) return "transport";
7795
+ if (code.trpc !== void 0 && UNAVAILABLE_TRPC_CODES.has(code.trpc)) return "transport";
7796
+ if (typeof err === "object" && err !== null) {
7797
+ if (Reflect.get(err, "retryable") === true) return "transport";
7798
+ const type = stringProp(err, "type");
7799
+ if (type !== void 0 && MOLECULER_TRANSIENT_TYPES.has(type)) return "transport";
7800
+ }
7801
+ if (TRANSPORT_PHRASES.some((f) => message.includes(f))) return "transport";
7802
+ return "permanent";
7803
+ }
7712
7804
  /**
7713
7805
  * Collect the keys of every field marked `perNode: true`, recursing into
7714
7806
  * layout containers (`group` fields and `sub-tabs` tabs) the same way
@@ -17238,6 +17330,28 @@ id: union([string(), number()]) }), {
17238
17330
  kind: "mutation",
17239
17331
  auth: "admin"
17240
17332
  });
17333
+ /** One table of the settings database. */
17334
+ var StorageTableSchema = object({
17335
+ /** The table's full name, e.g. `recorder:addon-settings` or `addon-device-settings`. */
17336
+ name: string(),
17337
+ /** The owner prefix of a scoped name (`recorder` for `recorder:addon-settings`), else null. */
17338
+ owner: string().nullable(),
17339
+ rows: number().int().nonnegative(),
17340
+ /** Bytes the table's pages occupy (`dbstat`); null when the engine cannot measure. */
17341
+ bytes: number().int().nonnegative().nullable(),
17342
+ /** Declared by an addon since this engine process started (a running addon claims it). */
17343
+ declaredThisBoot: boolean()
17344
+ });
17345
+ method(object({ ownerPrefix: string().min(1).optional() }), object({ tables: array(StorageTableSchema) }), { auth: "admin" }), method(object({
17346
+ collection: string().min(1),
17347
+ expectRows: number().int().nonnegative()
17348
+ }), object({
17349
+ dropped: literal(true),
17350
+ rows: number().int().nonnegative()
17351
+ }), {
17352
+ kind: "mutation",
17353
+ auth: "admin"
17354
+ });
17241
17355
  /**
17242
17356
  * `keychain` — the hub's encrypted store of secret values (D787).
17243
17357
  *
@@ -17779,6 +17893,16 @@ method(object({}), KeychainStatusSchema, { auth: "admin" }), method(object({}),
17779
17893
  kind: "mutation",
17780
17894
  auth: "admin",
17781
17895
  caller: "required"
17896
+ }), method(object({
17897
+ ref: string().min(1),
17898
+ value: string().min(1)
17899
+ }), object({
17900
+ ref: string(),
17901
+ version: number().int()
17902
+ }), {
17903
+ kind: "mutation",
17904
+ auth: "admin",
17905
+ caller: "required"
17782
17906
  }), method(object({ refs: array(string().min(1)).max(1e3) }), object({
17783
17907
  deleted: array(string()).readonly(),
17784
17908
  kept: array(object({
@@ -71843,6 +71967,12 @@ Object.freeze({
71843
71967
  addonId: null,
71844
71968
  access: "create"
71845
71969
  },
71970
+ "keychainAdmin.importSecret": {
71971
+ capName: "keychain-admin",
71972
+ capScope: "system",
71973
+ addonId: null,
71974
+ access: "create"
71975
+ },
71846
71976
  "keychainAdmin.listAudit": {
71847
71977
  capName: "keychain-admin",
71848
71978
  capScope: "system",
@@ -75629,6 +75759,18 @@ Object.freeze({
75629
75759
  addonId: null,
75630
75760
  access: "create"
75631
75761
  },
75762
+ "storageAdmin.dropCollection": {
75763
+ capName: "storage-admin",
75764
+ capScope: "system",
75765
+ addonId: null,
75766
+ access: "delete"
75767
+ },
75768
+ "storageAdmin.listTables": {
75769
+ capName: "storage-admin",
75770
+ capScope: "system",
75771
+ addonId: null,
75772
+ access: "view"
75773
+ },
75632
75774
  "storageEvictable.evict": {
75633
75775
  capName: "storage-evictable",
75634
75776
  capScope: "system",
@@ -5459,7 +5459,7 @@ var ZodIssueCode = {
5459
5459
  var ZodFirstPartyTypeKind;
5460
5460
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5461
5461
  //#endregion
5462
- //#region ../types/dist/sleep-DRqxtc0C.mjs
5462
+ //#region ../types/dist/sleep-bwsTj221.mjs
5463
5463
  /**
5464
5464
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5465
5465
  * window to float samples (D455).
@@ -6710,7 +6710,6 @@ function createHandle(raw, opts) {
6710
6710
  const writeAddon = (patch) => write("addon", opts.addonTree(), void 0, patch, () => readStoredAddonBlob(raw), (p) => raw.writeAddonStore(p));
6711
6711
  const readAddonStoreResult = raw.readAddonStoreResult;
6712
6712
  const readAddonStoreKeyResult = raw.readAddonStoreKeyResult;
6713
- const readDeviceStoreBatch = raw.readDeviceStoreBatch;
6714
6713
  const overrides = {
6715
6714
  readAddonStore: async () => resolveRead("addon", await raw.readAddonStore()),
6716
6715
  ...readAddonStoreResult !== void 0 ? { readAddonStoreResult: async () => {
@@ -6734,12 +6733,12 @@ function createHandle(raw, opts) {
6734
6733
  };
6735
6734
  } } : {},
6736
6735
  readDeviceStore: async (deviceId) => resolveRead(`device:${deviceId}`, await raw.readDeviceStore(deviceId)),
6737
- ...readDeviceStoreBatch !== void 0 ? { readDeviceStoreBatch: async (deviceIds) => {
6738
- const rows = await readDeviceStoreBatch.call(raw, deviceIds);
6736
+ readDeviceStoreBatch: async (deviceIds) => {
6737
+ const rows = await raw.readDeviceStoreBatch(deviceIds);
6739
6738
  const out = /* @__PURE__ */ new Map();
6740
6739
  for (const [deviceId, blob] of rows) out.set(deviceId, await resolveRead(`device:${deviceId}`, blob));
6741
6740
  return out;
6742
- } } : {},
6741
+ },
6743
6742
  writeAddonStore: async (patch) => {
6744
6743
  await writeAddon(patch);
6745
6744
  },
@@ -7566,7 +7565,7 @@ var BaseAddon = class {
7566
7565
  return this._addonSecretTree;
7567
7566
  }
7568
7567
  deviceSecretTree() {
7569
- this._deviceSecretTree ??= secretTreeFromSchema(this.deviceSettingsSchema());
7568
+ this._deviceSecretTree ??= mergeSecretStatePaths(secretTreeFromSchema(this.deviceSettingsSchema()), this.secretStatePaths);
7570
7569
  return this._deviceSecretTree;
7571
7570
  }
7572
7571
  /**
@@ -7642,42 +7641,135 @@ var BaseAddon = class {
7642
7641
  this[timerOf] = timer;
7643
7642
  }
7644
7643
  /**
7645
- * Wrap `ctx.settings.readAddonStore()` with a short retry budget so a
7646
- * transient settings-store outage (mid-restart of sqlite-settings, tsx-watch
7647
- * swap, or any race where the SqliteSettingsBackend is between shutdown and
7648
- * re-initialize) doesn't propagate up into `initialize()` and leave the
7644
+ * Wrap `ctx.settings.readAddonStore()` with a retry budget so a transient
7645
+ * settings-store outage doesn't propagate up into `initialize()` and leave the
7649
7646
  * addon permanently broken.
7650
7647
  *
7651
- * Retry only the two known infra fingerprints. Anything else propagates so
7652
- * real bugs surface immediately. After the budget expires we fall back to
7653
- * `{}` (defaults) — the addon's first successful patch will rehydrate.
7648
+ * Two kinds of outage, two budgets:
7649
+ * - the store's own restart fingerprints (`SqliteSettingsBackend not
7650
+ * initialized`, `provider not available`): a short budget, then the addon
7651
+ * falls back to `{}` (defaults) - its first successful patch rehydrates;
7652
+ * - a TRANSPORT failure (the hub is restarting while this runner boots:
7653
+ * `discovery deadline exceeded`, `parent could not route`, a refused or
7654
+ * timed-out connection). Since D870 a runner's settings read THROWS instead
7655
+ * of answering `{}`, so without a budget a hub restart ends in a respawn
7656
+ * loop. A long, bounded budget; only after it the error propagates - the
7657
+ * addon never runs on defaults for a store it could not ask.
7658
+ * Anything else propagates immediately so real bugs surface.
7654
7659
  */
7655
7660
  async readAddonStoreWithRetry() {
7656
7661
  const settings = this.rawSettings();
7657
7662
  if (!settings) return {};
7658
- const delaysMs = [
7659
- 150,
7660
- 350,
7661
- 600,
7662
- 900
7663
- ];
7664
7663
  let lastErr;
7665
- for (let attempt = 0; attempt <= delaysMs.length; attempt++) try {
7664
+ for (let attempt = 0;; attempt++) try {
7666
7665
  const stored = await settings.readAddonStore() ?? {};
7667
7666
  this.settingsStoreReady = true;
7668
7667
  return stored;
7669
7668
  } catch (err) {
7670
7669
  lastErr = err;
7671
- const msg = err instanceof Error ? err.message : String(err);
7672
- if (!(msg.includes("SqliteSettingsBackend not initialized") || msg.includes("provider not available"))) throw err;
7673
- if (attempt === delaysMs.length) break;
7674
- await new Promise((r) => setTimeout(r, delaysMs[attempt]));
7670
+ const kind = classifyStoreError(err);
7671
+ if (kind === "permanent") throw err;
7672
+ const delay = (kind === "transport" ? TRANSPORT_RETRY_DELAYS_MS : RESTART_RETRY_DELAYS_MS)[attempt];
7673
+ if (delay === void 0) {
7674
+ if (kind === "transport") throw err;
7675
+ break;
7676
+ }
7677
+ await new Promise((r) => setTimeout(r, delay));
7675
7678
  }
7676
7679
  this.settingsStoreReady = false;
7677
7680
  this._ctx?.logger?.warn?.("readAddonStore: settings-store unavailable after retries — using defaults", { meta: { error: lastErr instanceof Error ? lastErr.message : String(lastErr) } });
7678
7681
  return {};
7679
7682
  }
7680
7683
  };
7684
+ /** The settings store's own restart fingerprints. */
7685
+ var RESTART_RETRY_DELAYS_MS = [
7686
+ 150,
7687
+ 350,
7688
+ 600,
7689
+ 900
7690
+ ];
7691
+ /** A hub restarting under a booting runner: ~100 s in total. */
7692
+ var TRANSPORT_RETRY_DELAYS_MS = [
7693
+ 150,
7694
+ 350,
7695
+ 600,
7696
+ 900,
7697
+ 2e3,
7698
+ 5e3,
7699
+ 1e4,
7700
+ 2e4,
7701
+ 3e4,
7702
+ 3e4
7703
+ ];
7704
+ var RESTART_FINGERPRINTS = ["SqliteSettingsBackend not initialized", "provider not available"];
7705
+ /** Node / socket error codes of a connection that did not happen or broke. */
7706
+ var TRANSPORT_CODES = new Set([
7707
+ "ECONNREFUSED",
7708
+ "ECONNRESET",
7709
+ "ETIMEDOUT",
7710
+ "EPIPE",
7711
+ "EHOSTUNREACH",
7712
+ "ENETUNREACH"
7713
+ ]);
7714
+ /** tRPC error codes that mean "the other side is not answering now", not "your call is wrong". */
7715
+ var UNAVAILABLE_TRPC_CODES = new Set([
7716
+ "TIMEOUT",
7717
+ "SERVICE_UNAVAILABLE",
7718
+ "BAD_GATEWAY",
7719
+ "GATEWAY_TIMEOUT"
7720
+ ]);
7721
+ /** The exact phrases OUR transport raises when it cannot reach the hub. */
7722
+ var TRANSPORT_PHRASES = [
7723
+ "discovery deadline exceeded",
7724
+ "parent could not route child unowned cap call",
7725
+ "UDS request timed out after",
7726
+ "channel closed"
7727
+ ];
7728
+ /** Moleculer error `type`s of a call that could not be served right now. */
7729
+ var MOLECULER_TRANSIENT_TYPES = new Set([
7730
+ "REQUEST_TIMEOUT",
7731
+ "SERVICE_NOT_FOUND",
7732
+ "SERVICE_NOT_AVAILABLE",
7733
+ "REQUEST_REJECTED",
7734
+ "BROKER_DISCONNECTED"
7735
+ ]);
7736
+ function stringProp(value, key) {
7737
+ if (typeof value !== "object" || value === null) return void 0;
7738
+ const found = Reflect.get(value, key);
7739
+ return typeof found === "string" ? found : void 0;
7740
+ }
7741
+ /** The code an error carries: its own, its cause's, or a tRPC `data.code`. */
7742
+ function errorCode(err) {
7743
+ const out = {};
7744
+ const cause = typeof err === "object" && err !== null ? Reflect.get(err, "cause") : void 0;
7745
+ const data = typeof err === "object" && err !== null ? Reflect.get(err, "data") : void 0;
7746
+ const node = stringProp(err, "code") ?? stringProp(cause, "code");
7747
+ if (node !== void 0) out.node = node;
7748
+ const trpc = stringProp(data, "code");
7749
+ if (trpc !== void 0) out.trpc = trpc;
7750
+ return out;
7751
+ }
7752
+ /**
7753
+ * Is a settings read failure worth retrying, and with which budget? Only
7754
+ * EXPLICIT signals count: a socket error code, a tRPC "unavailable" code, or
7755
+ * one of the exact phrases our own transport raises. A message that merely
7756
+ * contains "timed out" or "unreachable" is not evidence of anything, and
7757
+ * `settings store not wired` is a wiring bug that retrying cannot fix.
7758
+ */
7759
+ function classifyStoreError(err) {
7760
+ const message = err instanceof Error ? err.message : String(err);
7761
+ if (RESTART_FINGERPRINTS.some((f) => message.includes(f))) return "restart";
7762
+ const code = errorCode(err);
7763
+ if (code.node !== void 0 && TRANSPORT_CODES.has(code.node)) return "transport";
7764
+ if (code.trpc !== void 0 && UNAVAILABLE_TRPC_CODES.has(code.trpc)) return "transport";
7765
+ if (typeof err === "object" && err !== null) {
7766
+ if (Reflect.get(err, "retryable") === true) return "transport";
7767
+ const type = stringProp(err, "type");
7768
+ if (type !== void 0 && MOLECULER_TRANSIENT_TYPES.has(type)) return "transport";
7769
+ }
7770
+ if (TRANSPORT_PHRASES.some((f) => message.includes(f))) return "transport";
7771
+ return "permanent";
7772
+ }
7681
7773
  /**
7682
7774
  * Collect the keys of every field marked `perNode: true`, recursing into
7683
7775
  * layout containers (`group` fields and `sub-tabs` tabs) the same way
@@ -17207,6 +17299,28 @@ id: union([string(), number()]) }), {
17207
17299
  kind: "mutation",
17208
17300
  auth: "admin"
17209
17301
  });
17302
+ /** One table of the settings database. */
17303
+ var StorageTableSchema = object({
17304
+ /** The table's full name, e.g. `recorder:addon-settings` or `addon-device-settings`. */
17305
+ name: string(),
17306
+ /** The owner prefix of a scoped name (`recorder` for `recorder:addon-settings`), else null. */
17307
+ owner: string().nullable(),
17308
+ rows: number().int().nonnegative(),
17309
+ /** Bytes the table's pages occupy (`dbstat`); null when the engine cannot measure. */
17310
+ bytes: number().int().nonnegative().nullable(),
17311
+ /** Declared by an addon since this engine process started (a running addon claims it). */
17312
+ declaredThisBoot: boolean()
17313
+ });
17314
+ method(object({ ownerPrefix: string().min(1).optional() }), object({ tables: array(StorageTableSchema) }), { auth: "admin" }), method(object({
17315
+ collection: string().min(1),
17316
+ expectRows: number().int().nonnegative()
17317
+ }), object({
17318
+ dropped: literal(true),
17319
+ rows: number().int().nonnegative()
17320
+ }), {
17321
+ kind: "mutation",
17322
+ auth: "admin"
17323
+ });
17210
17324
  /**
17211
17325
  * `keychain` — the hub's encrypted store of secret values (D787).
17212
17326
  *
@@ -17748,6 +17862,16 @@ method(object({}), KeychainStatusSchema, { auth: "admin" }), method(object({}),
17748
17862
  kind: "mutation",
17749
17863
  auth: "admin",
17750
17864
  caller: "required"
17865
+ }), method(object({
17866
+ ref: string().min(1),
17867
+ value: string().min(1)
17868
+ }), object({
17869
+ ref: string(),
17870
+ version: number().int()
17871
+ }), {
17872
+ kind: "mutation",
17873
+ auth: "admin",
17874
+ caller: "required"
17751
17875
  }), method(object({ refs: array(string().min(1)).max(1e3) }), object({
17752
17876
  deleted: array(string()).readonly(),
17753
17877
  kept: array(object({
@@ -71812,6 +71936,12 @@ Object.freeze({
71812
71936
  addonId: null,
71813
71937
  access: "create"
71814
71938
  },
71939
+ "keychainAdmin.importSecret": {
71940
+ capName: "keychain-admin",
71941
+ capScope: "system",
71942
+ addonId: null,
71943
+ access: "create"
71944
+ },
71815
71945
  "keychainAdmin.listAudit": {
71816
71946
  capName: "keychain-admin",
71817
71947
  capScope: "system",
@@ -75598,6 +75728,18 @@ Object.freeze({
75598
75728
  addonId: null,
75599
75729
  access: "create"
75600
75730
  },
75731
+ "storageAdmin.dropCollection": {
75732
+ capName: "storage-admin",
75733
+ capScope: "system",
75734
+ addonId: null,
75735
+ access: "delete"
75736
+ },
75737
+ "storageAdmin.listTables": {
75738
+ capName: "storage-admin",
75739
+ capScope: "system",
75740
+ addonId: null,
75741
+ access: "view"
75742
+ },
75601
75743
  "storageEvictable.evict": {
75602
75744
  capName: "storage-evictable",
75603
75745
  capScope: "system",
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_clip_model_registry = require("../clip-model-registry-aWakBGm3.js");
5
+ const require_clip_model_registry = require("../clip-model-registry-CJMlelSr.js");
6
6
  let node_fs = require("node:fs");
7
7
  node_fs = require_clip_model_registry.__toESM(node_fs);
8
8
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { $t as PoolMemoryWatchdog, Ii as normalizeNodeId, Oi as BaseAddon, Rr as parseProcStatus, Xr as resolvePoolMemoryPolicy, a as CLIP_EMBEDDING_STEP_ID, i as CLIP_TEXT_MODELS, ir as embeddingModelFailedError, l as resolveClusterModelPin, n as DEFAULT_CLIP_MODEL, or as embeddingRequirementsFailedError, r as CLIP_IMAGE_MODELS, rr as embeddingEncoderCapability, sr as embeddingRequirementsUnavailableError, t as BUILTIN_CLIP_MODELS } from "../clip-model-registry-DnJSHCsn.mjs";
1
+ import { $t as PoolMemoryWatchdog, Ii as normalizeNodeId, Oi as BaseAddon, Rr as parseProcStatus, Xr as resolvePoolMemoryPolicy, a as CLIP_EMBEDDING_STEP_ID, i as CLIP_TEXT_MODELS, ir as embeddingModelFailedError, l as resolveClusterModelPin, n as DEFAULT_CLIP_MODEL, or as embeddingRequirementsFailedError, r as CLIP_IMAGE_MODELS, rr as embeddingEncoderCapability, sr as embeddingRequirementsUnavailableError, t as BUILTIN_CLIP_MODELS } from "../clip-model-registry-YcxOhKAs.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import * as fs from "node:fs";
4
4
  import * as path$1 from "node:path";
@@ -1,8 +1,8 @@
1
1
  import { a as e, i as t, n, o as r, r as i, t as a } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react__loadShare__.js-C0AuF9av.mjs";
2
2
  import { t as o } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-B3Wx5J80.mjs";
3
- import { a as s, c, i as l, n as u, o as d, r as f, s as p, t as m } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CYfz4e5v.mjs";
3
+ import { a as s, c, i as l, n as u, o as d, r as f, s as p, t as m } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-XFjQPo0r.mjs";
4
4
  import { n as h, r as g, t as _ } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-Bm-iyjmq.mjs";
5
- import { t as v } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BRMRfKVO.mjs";
5
+ import { t as v } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BrZNQ-qA.mjs";
6
6
  //#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
7
7
  var y = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), b = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), x = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), S = (e) => {
8
8
  let t = x(e);
@@ -18,7 +18,7 @@ var e = {
18
18
  },
19
19
  "@camstack/types": {
20
20
  name: "@camstack/types",
21
- version: "1.2.375",
21
+ version: "1.2.376",
22
22
  scope: ["default"],
23
23
  loaded: !1,
24
24
  from: "addon_pipeline_analytics_widgets",
@@ -33,7 +33,7 @@ var e = {
33
33
  },
34
34
  "@camstack/ui-library": {
35
35
  name: "@camstack/ui-library",
36
- version: "1.2.293",
36
+ version: "1.2.294",
37
37
  scope: ["default"],
38
38
  loaded: !1,
39
39
  from: "addon_pipeline_analytics_widgets",