@camstack/system 1.2.231 → 1.2.233

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 (62) hide show
  1. package/dist/addon-runner.js +1 -1
  2. package/dist/addon-runner.mjs +1 -1
  3. package/dist/addon-utils.d.ts +1 -0
  4. package/dist/addon-utils.js +6 -1
  5. package/dist/addon-utils.mjs +3 -2
  6. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  7. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  8. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  9. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  10. package/dist/builtins/alerts/alerts.addon.js +1 -1
  11. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  12. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +17 -1
  13. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +17 -1
  14. package/dist/builtins/console-logging/index.js +1 -1
  15. package/dist/builtins/console-logging/index.mjs +1 -1
  16. package/dist/builtins/core-blocks/core-blocks.addon.js +1 -1
  17. package/dist/builtins/core-blocks/core-blocks.addon.mjs +1 -1
  18. package/dist/builtins/device-manager/device-config-contribution.d.ts +1 -0
  19. package/dist/builtins/device-manager/device-manager.addon.js +46 -3
  20. package/dist/builtins/device-manager/device-manager.addon.mjs +46 -3
  21. package/dist/builtins/device-manager/native-object-detection-config-schema.d.ts +3 -0
  22. package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
  23. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
  24. package/dist/builtins/hub-forwarder/index.js +1 -1
  25. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  26. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  27. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  28. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  29. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  30. package/dist/builtins/local-network/local-network.addon.js +1 -1
  31. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  32. package/dist/builtins/loki-logging/index.js +1 -1
  33. package/dist/builtins/loki-logging/index.mjs +1 -1
  34. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  35. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  36. package/dist/builtins/platform-probe/index.js +1 -1
  37. package/dist/builtins/platform-probe/index.mjs +1 -1
  38. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  39. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  40. package/dist/builtins/snapshot/index.js +5 -140
  41. package/dist/builtins/snapshot/index.mjs +2 -137
  42. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  43. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  44. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  45. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  46. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  47. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  48. package/dist/builtins/system-config/system-config.addon.js +1 -1
  49. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  50. package/dist/builtins/winston-logging/index.js +1 -1
  51. package/dist/builtins/winston-logging/index.mjs +1 -1
  52. package/dist/{custom-action-registry-CM03Xda0.mjs → custom-action-registry-CFHYDHAu.mjs} +1 -1
  53. package/dist/{custom-action-registry-DAFhWd0h.js → custom-action-registry-CWFK5UDj.js} +1 -1
  54. package/dist/{dist-Zhe9cTnK.mjs → dist-BIvXRexm.mjs} +291 -18
  55. package/dist/{dist-DUSfUAgz.js → dist-D3lJV9M7.js} +291 -18
  56. package/dist/index.js +2 -2
  57. package/dist/index.mjs +2 -2
  58. package/dist/{retired-settings-keys-BK_geSOq.mjs → retired-settings-keys-CV3ZLGnJ.mjs} +1 -1
  59. package/dist/{retired-settings-keys-D61PxN8L.js → retired-settings-keys-YPsd2Exa.js} +1 -1
  60. package/dist/snapshot-courtesy-LoJNgHHZ.mjs +140 -0
  61. package/dist/snapshot-courtesy-oeTWCXPv.js +165 -0
  62. package/package.json +1 -1
@@ -3,7 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DUSfUAgz.js");
6
+ const require_dist = require("../../dist-D3lJV9M7.js");
7
+ const require_snapshot_courtesy = require("../../snapshot-courtesy-oeTWCXPv.js");
7
8
  let zod = require("zod");
8
9
  let node_crypto = require("node:crypto");
9
10
  let _camstack_types_node = require("@camstack/types/node");
@@ -322,142 +323,6 @@ function raceForResult(promise, timeoutMs) {
322
323
  if (timer) clearTimeout(timer);
323
324
  });
324
325
  }
325
- //#endregion
326
- //#region src/builtins/snapshot/snapshot-courtesy.ts
327
- /**
328
- * State treatment for a camera that cannot produce a current frame.
329
- *
330
- * ── Why this exists ───────────────────────────────────────────────────────
331
- * A disabled, offline or sleeping camera has no frame, and until 2026-08-11 the
332
- * snapshot service simply had nothing to say about it: the media route answered
333
- * **404** and the client painted "Unavailable". Measured on the live grid that
334
- * day, 10 of 26 tiles were 404s — one genuinely disabled camera plus nine dead
335
- * legacy rows. A 404 is indistinguishable from a broken camera, so an operator
336
- * who deliberately switched a camera off saw the same thing as a fault ([D62]:
337
- * "an off switch is REPORTED off; disabled must never look like broken").
338
- *
339
- * So the service answers with an image that SAYS what is going on, carrying
340
- * the camera's own name. When a real cached frame exists it remains visible
341
- * under the treatment; otherwise the generated courtesy background is used.
342
- *
343
- * ── Why sharp and not ffmpeg ──────────────────────────────────────────────
344
- * The first draft of this file shelled out to `ffmpeg` with a `drawtext`
345
- * filter. That was written before the resize path was measured, and it was the
346
- * wrong call for the same reason: this runs in the snapshot wrapper, a system
347
- * builtin loaded in the hub's ROOT process, so every render was a fork + exec
348
- * on the loop that serves the API — 52 ms against sharp's 4.8 ms in that
349
- * container, to draw two lines of text.
350
- *
351
- * `terminal-frame-renderer.ts` already renders text this way (SVG → sharp), so
352
- * this is the house pattern rather than a new one. It also drops the font-PATH
353
- * probing the ffmpeg version needed: an SVG names a font FAMILY and fontconfig
354
- * resolves it — verified in the hub image, where `fc-match "DejaVu Sans Mono"`
355
- * answers with the real file.
356
- *
357
- * Rendering is pure input → bytes with no I/O of its own, and the geometry and
358
- * escaping are separated out so they stay testable without rasterizing.
359
- */
360
- /**
361
- * Font stack for the rendered text. Family names, not paths — librsvg resolves
362
- * them through fontconfig, and the trailing generics keep a host without DejaVu
363
- * rendering something legible instead of nothing.
364
- */
365
- var COURTESY_FONT_STACK = "DejaVu Sans,DejaVu Sans Mono,Helvetica,Arial,sans-serif";
366
- /** The word the frame carries. Deliberately the operator's vocabulary. */
367
- function courtesyLabel(reason) {
368
- switch (reason) {
369
- case "disabled": return "Disabled";
370
- case "offline": return "Offline";
371
- case "sleeping": return "Sleeping";
372
- case "unreachable": return "Unreachable";
373
- case "waking": return "Waking";
374
- }
375
- }
376
- /**
377
- * Background per reason. A disabled camera is a DELIBERATE state and must not
378
- * read as an alarm, so it is neutral grey; offline is a fault and is warmer.
379
- */
380
- function courtesyBackground(reason) {
381
- switch (reason) {
382
- case "disabled": return "#2b2b31";
383
- case "offline": return "#3a2b2b";
384
- case "sleeping": return "#232b3a";
385
- case "waking": return "#243247";
386
- case "unreachable": return "#3a2b2b";
387
- }
388
- }
389
- /** XML escaping for text placed inside an SVG `<text>` node. */
390
- function escapeCourtesyText(value) {
391
- return value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\"", "&quot;").replaceAll("'", "&apos;");
392
- }
393
- /**
394
- * The SVG the frame is rasterized from: the state large and centred, the
395
- * camera's name under it, smaller and dimmer.
396
- *
397
- * Sizes derive from the width so a 240 px grid tile and a 1920 px full-bleed
398
- * frame read the same, with a floor so a thumbnail stays legible.
399
- */
400
- function buildCourtesySvg(spec) {
401
- return buildStateSvg(spec, false);
402
- }
403
- /**
404
- * The same state treatment as a courtesy frame, but translucent so the last
405
- * real camera frame remains visible underneath it.
406
- */
407
- function buildCourtesyOverlaySvg(spec) {
408
- return buildStateSvg(spec, true);
409
- }
410
- function buildStateSvg(spec, overlay) {
411
- const stateSize = Math.max(12, Math.round(spec.width / 12));
412
- const nameSize = Math.max(9, Math.round(spec.width / 26));
413
- const state = escapeCourtesyText(courtesyLabel(spec.reason));
414
- const name = escapeCourtesyText(spec.deviceName);
415
- const midY = spec.height / 2;
416
- const washOpacity = overlay ? "0.62" : "1";
417
- const textStroke = Math.max(1, Math.round(spec.width / 320));
418
- return [
419
- `<svg xmlns="http://www.w3.org/2000/svg" width="${String(spec.width)}" height="${String(spec.height)}">`,
420
- `<rect width="100%" height="100%" fill="${courtesyBackground(spec.reason)}" fill-opacity="${washOpacity}"/>`,
421
- `<g font-family="${COURTESY_FONT_STACK}" text-anchor="middle" paint-order="stroke" stroke="#111118" stroke-width="${String(textStroke)}">`,
422
- `<text x="50%" y="${String(Math.round(midY))}" font-size="${String(stateSize)}" fill="#e8e8ee">${state}</text>`,
423
- `<text x="50%" y="${String(Math.round(midY + stateSize))}" font-size="${String(nameSize)}" fill="#9a9aa8">${name}</text>`,
424
- `</g></svg>`
425
- ].join("");
426
- }
427
- /** Cache key — a courtesy frame is a pure function of these four. */
428
- function courtesyCacheKey(spec) {
429
- return `${spec.reason}:${String(spec.width)}x${String(spec.height)}:${spec.deviceName}`;
430
- }
431
- /**
432
- * Render the frame.
433
- *
434
- * Rejects on failure — the caller decides what to do, exactly as `resizeJpeg`
435
- * does, so a broken courtesy path is never mistaken for a broken camera.
436
- */
437
- function renderCourtesyJpeg(spec) {
438
- return (0, sharp.default)(Buffer.from(buildCourtesySvg(spec))).jpeg({ quality: 82 }).toBuffer().then((bytes) => {
439
- if (bytes.length === 0) throw new Error("courtesy frame produced no bytes");
440
- return bytes;
441
- });
442
- }
443
- /**
444
- * Paint the state treatment over a real cached frame.
445
- *
446
- * The source dimensions are authoritative: overlays preserve the original
447
- * frame rather than resizing it to the generated courtesy-frame default.
448
- */
449
- async function renderCourtesyOverlayJpeg(background, spec) {
450
- const metadata = await (0, sharp.default)(background).metadata();
451
- if (!metadata.width || !metadata.height) throw new Error("cached snapshot has no renderable dimensions");
452
- const overlay = Buffer.from(buildCourtesyOverlaySvg({
453
- ...spec,
454
- width: metadata.width,
455
- height: metadata.height
456
- }));
457
- const bytes = await (0, sharp.default)(background).composite([{ input: overlay }]).jpeg({ quality: 82 }).toBuffer();
458
- if (bytes.length === 0) throw new Error("courtesy overlay produced no bytes");
459
- return bytes;
460
- }
461
326
  var NativeSnapshotFatigue = class {
462
327
  baseMs;
463
328
  maxMs;
@@ -2346,7 +2211,7 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
2346
2211
  async courtesyFrame(deviceId, reason, deviceName) {
2347
2212
  const width = 640;
2348
2213
  const height = Math.round(width * 9 / 16);
2349
- const key = courtesyCacheKey({
2214
+ const key = require_snapshot_courtesy.courtesyCacheKey({
2350
2215
  deviceName,
2351
2216
  reason,
2352
2217
  width,
@@ -2355,7 +2220,7 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
2355
2220
  const cached = this.courtesyFrames.get(key);
2356
2221
  if (cached !== void 0) return cached;
2357
2222
  try {
2358
- const bytes = await renderCourtesyJpeg({
2223
+ const bytes = await require_snapshot_courtesy.renderCourtesyJpeg({
2359
2224
  deviceName,
2360
2225
  reason,
2361
2226
  width,
@@ -2425,7 +2290,7 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
2425
2290
  contentType: "image/jpeg"
2426
2291
  };
2427
2292
  try {
2428
- const bytes = await renderCourtesyOverlayJpeg(Buffer.from(hit.data.base64, "base64"), {
2293
+ const bytes = await require_snapshot_courtesy.renderCourtesyOverlayJpeg(Buffer.from(hit.data.base64, "base64"), {
2429
2294
  deviceName: resolvedName,
2430
2295
  reason
2431
2296
  });
@@ -1,4 +1,5 @@
1
- import { $t as DeviceFeature, F as bareAddonId, I as batteryCapability, Jt as errMsg, Rt as snapshotCapability, Ut as streamQualityLabel, W as deriveBatteryPresence, Yt as BaseAddon, i as BatteryStatusSchema, mn as nodePin, tn as DeviceType, xn as EventCategory } from "../../dist-Zhe9cTnK.mjs";
1
+ import { $t as DeviceFeature, F as bareAddonId, I as batteryCapability, Jt as errMsg, Rt as snapshotCapability, Ut as streamQualityLabel, W as deriveBatteryPresence, Yt as BaseAddon, i as BatteryStatusSchema, mn as nodePin, tn as DeviceType, xn as EventCategory } from "../../dist-BIvXRexm.mjs";
2
+ import { i as renderCourtesyOverlayJpeg, n as courtesyCacheKey, r as renderCourtesyJpeg } from "../../snapshot-courtesy-LoJNgHHZ.mjs";
2
3
  import { z } from "zod";
3
4
  import { randomUUID } from "node:crypto";
4
5
  import { signExpiringUrl, verifyExpiringUrl } from "@camstack/types/node";
@@ -316,142 +317,6 @@ function raceForResult(promise, timeoutMs) {
316
317
  if (timer) clearTimeout(timer);
317
318
  });
318
319
  }
319
- //#endregion
320
- //#region src/builtins/snapshot/snapshot-courtesy.ts
321
- /**
322
- * State treatment for a camera that cannot produce a current frame.
323
- *
324
- * ── Why this exists ───────────────────────────────────────────────────────
325
- * A disabled, offline or sleeping camera has no frame, and until 2026-08-11 the
326
- * snapshot service simply had nothing to say about it: the media route answered
327
- * **404** and the client painted "Unavailable". Measured on the live grid that
328
- * day, 10 of 26 tiles were 404s — one genuinely disabled camera plus nine dead
329
- * legacy rows. A 404 is indistinguishable from a broken camera, so an operator
330
- * who deliberately switched a camera off saw the same thing as a fault ([D62]:
331
- * "an off switch is REPORTED off; disabled must never look like broken").
332
- *
333
- * So the service answers with an image that SAYS what is going on, carrying
334
- * the camera's own name. When a real cached frame exists it remains visible
335
- * under the treatment; otherwise the generated courtesy background is used.
336
- *
337
- * ── Why sharp and not ffmpeg ──────────────────────────────────────────────
338
- * The first draft of this file shelled out to `ffmpeg` with a `drawtext`
339
- * filter. That was written before the resize path was measured, and it was the
340
- * wrong call for the same reason: this runs in the snapshot wrapper, a system
341
- * builtin loaded in the hub's ROOT process, so every render was a fork + exec
342
- * on the loop that serves the API — 52 ms against sharp's 4.8 ms in that
343
- * container, to draw two lines of text.
344
- *
345
- * `terminal-frame-renderer.ts` already renders text this way (SVG → sharp), so
346
- * this is the house pattern rather than a new one. It also drops the font-PATH
347
- * probing the ffmpeg version needed: an SVG names a font FAMILY and fontconfig
348
- * resolves it — verified in the hub image, where `fc-match "DejaVu Sans Mono"`
349
- * answers with the real file.
350
- *
351
- * Rendering is pure input → bytes with no I/O of its own, and the geometry and
352
- * escaping are separated out so they stay testable without rasterizing.
353
- */
354
- /**
355
- * Font stack for the rendered text. Family names, not paths — librsvg resolves
356
- * them through fontconfig, and the trailing generics keep a host without DejaVu
357
- * rendering something legible instead of nothing.
358
- */
359
- var COURTESY_FONT_STACK = "DejaVu Sans,DejaVu Sans Mono,Helvetica,Arial,sans-serif";
360
- /** The word the frame carries. Deliberately the operator's vocabulary. */
361
- function courtesyLabel(reason) {
362
- switch (reason) {
363
- case "disabled": return "Disabled";
364
- case "offline": return "Offline";
365
- case "sleeping": return "Sleeping";
366
- case "unreachable": return "Unreachable";
367
- case "waking": return "Waking";
368
- }
369
- }
370
- /**
371
- * Background per reason. A disabled camera is a DELIBERATE state and must not
372
- * read as an alarm, so it is neutral grey; offline is a fault and is warmer.
373
- */
374
- function courtesyBackground(reason) {
375
- switch (reason) {
376
- case "disabled": return "#2b2b31";
377
- case "offline": return "#3a2b2b";
378
- case "sleeping": return "#232b3a";
379
- case "waking": return "#243247";
380
- case "unreachable": return "#3a2b2b";
381
- }
382
- }
383
- /** XML escaping for text placed inside an SVG `<text>` node. */
384
- function escapeCourtesyText(value) {
385
- return value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\"", "&quot;").replaceAll("'", "&apos;");
386
- }
387
- /**
388
- * The SVG the frame is rasterized from: the state large and centred, the
389
- * camera's name under it, smaller and dimmer.
390
- *
391
- * Sizes derive from the width so a 240 px grid tile and a 1920 px full-bleed
392
- * frame read the same, with a floor so a thumbnail stays legible.
393
- */
394
- function buildCourtesySvg(spec) {
395
- return buildStateSvg(spec, false);
396
- }
397
- /**
398
- * The same state treatment as a courtesy frame, but translucent so the last
399
- * real camera frame remains visible underneath it.
400
- */
401
- function buildCourtesyOverlaySvg(spec) {
402
- return buildStateSvg(spec, true);
403
- }
404
- function buildStateSvg(spec, overlay) {
405
- const stateSize = Math.max(12, Math.round(spec.width / 12));
406
- const nameSize = Math.max(9, Math.round(spec.width / 26));
407
- const state = escapeCourtesyText(courtesyLabel(spec.reason));
408
- const name = escapeCourtesyText(spec.deviceName);
409
- const midY = spec.height / 2;
410
- const washOpacity = overlay ? "0.62" : "1";
411
- const textStroke = Math.max(1, Math.round(spec.width / 320));
412
- return [
413
- `<svg xmlns="http://www.w3.org/2000/svg" width="${String(spec.width)}" height="${String(spec.height)}">`,
414
- `<rect width="100%" height="100%" fill="${courtesyBackground(spec.reason)}" fill-opacity="${washOpacity}"/>`,
415
- `<g font-family="${COURTESY_FONT_STACK}" text-anchor="middle" paint-order="stroke" stroke="#111118" stroke-width="${String(textStroke)}">`,
416
- `<text x="50%" y="${String(Math.round(midY))}" font-size="${String(stateSize)}" fill="#e8e8ee">${state}</text>`,
417
- `<text x="50%" y="${String(Math.round(midY + stateSize))}" font-size="${String(nameSize)}" fill="#9a9aa8">${name}</text>`,
418
- `</g></svg>`
419
- ].join("");
420
- }
421
- /** Cache key — a courtesy frame is a pure function of these four. */
422
- function courtesyCacheKey(spec) {
423
- return `${spec.reason}:${String(spec.width)}x${String(spec.height)}:${spec.deviceName}`;
424
- }
425
- /**
426
- * Render the frame.
427
- *
428
- * Rejects on failure — the caller decides what to do, exactly as `resizeJpeg`
429
- * does, so a broken courtesy path is never mistaken for a broken camera.
430
- */
431
- function renderCourtesyJpeg(spec) {
432
- return sharp(Buffer.from(buildCourtesySvg(spec))).jpeg({ quality: 82 }).toBuffer().then((bytes) => {
433
- if (bytes.length === 0) throw new Error("courtesy frame produced no bytes");
434
- return bytes;
435
- });
436
- }
437
- /**
438
- * Paint the state treatment over a real cached frame.
439
- *
440
- * The source dimensions are authoritative: overlays preserve the original
441
- * frame rather than resizing it to the generated courtesy-frame default.
442
- */
443
- async function renderCourtesyOverlayJpeg(background, spec) {
444
- const metadata = await sharp(background).metadata();
445
- if (!metadata.width || !metadata.height) throw new Error("cached snapshot has no renderable dimensions");
446
- const overlay = Buffer.from(buildCourtesyOverlaySvg({
447
- ...spec,
448
- width: metadata.width,
449
- height: metadata.height
450
- }));
451
- const bytes = await sharp(background).composite([{ input: overlay }]).jpeg({ quality: 82 }).toBuffer();
452
- if (bytes.length === 0) throw new Error("courtesy overlay produced no bytes");
453
- return bytes;
454
- }
455
320
  var NativeSnapshotFatigue = class {
456
321
  baseMs;
457
322
  maxMs;
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DUSfUAgz.js");
6
+ const require_dist = require("../../dist-D3lJV9M7.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let node_fs_promises = require("node:fs/promises");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Ht as storageProviderCapability, Yt as BaseAddon, nt as filesystemBrowseCapability } from "../../dist-Zhe9cTnK.mjs";
1
+ import { Ht as storageProviderCapability, Yt as BaseAddon, nt as filesystemBrowseCapability } from "../../dist-BIvXRexm.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { mkdir, readdir, realpath, statfs } from "node:fs/promises";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DUSfUAgz.js");
6
+ const require_dist = require("../../dist-D3lJV9M7.js");
7
7
  const require_hub_cap_forward = require("../../hub-cap-forward-DmHNjbB0.js");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
@@ -1,4 +1,4 @@
1
- import { Bt as storageMigrationCapability, D as StorageMigrationJobSchema, E as StorageLocationTypeSchema, Lt as settingsStoreCapability, R as collectSecretConfigKeys, St as modeMayWrite, T as StorageLocationModeSchema, Yt as BaseAddon, bt as mayWriteToLocation, et as evictionPolicyOfLocation, g as REDACTED_SECRET, hn as parseJsonObject, it as gbToBytes, jt as resolveLocationMode, m as LegacyStorageLocationDefaultSchema, pt as legacyModeOf, qt as withLocationMode, st as isLocationEnabled, w as StorageCleanupJobSchema, xn as EventCategory, yt as mayReadLocation, zt as storageCapability } from "../../dist-Zhe9cTnK.mjs";
1
+ import { Bt as storageMigrationCapability, D as StorageMigrationJobSchema, E as StorageLocationTypeSchema, Lt as settingsStoreCapability, R as collectSecretConfigKeys, St as modeMayWrite, T as StorageLocationModeSchema, Yt as BaseAddon, bt as mayWriteToLocation, et as evictionPolicyOfLocation, g as REDACTED_SECRET, hn as parseJsonObject, it as gbToBytes, jt as resolveLocationMode, m as LegacyStorageLocationDefaultSchema, pt as legacyModeOf, qt as withLocationMode, st as isLocationEnabled, w as StorageCleanupJobSchema, xn as EventCategory, yt as mayReadLocation, zt as storageCapability } from "../../dist-BIvXRexm.mjs";
2
2
  import { t as HUB_CAP_FWD_ACTION } from "../../hub-cap-forward-BdT320dq.mjs";
3
3
  import { z } from "zod";
4
4
  import { randomUUID } from "node:crypto";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DUSfUAgz.js");
6
+ const require_dist = require("../../dist-D3lJV9M7.js");
7
7
  //#region src/builtins/system-config/system-config.addon.ts
8
8
  /**
9
9
  * Built-in `system-config` addon — Phase 4 of the settings redesign.
@@ -1,4 +1,4 @@
1
- import { Jt as errMsg, Yt as BaseAddon, fn as hydrateSchema } from "../../dist-Zhe9cTnK.mjs";
1
+ import { Jt as errMsg, Yt as BaseAddon, fn as hydrateSchema } from "../../dist-BIvXRexm.mjs";
2
2
  //#region src/builtins/system-config/system-config.addon.ts
3
3
  /**
4
4
  * Built-in `system-config` addon — Phase 4 of the settings redesign.
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DUSfUAgz.js");
6
+ const require_dist = require("../../dist-D3lJV9M7.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  let node_path = require("node:path");
9
9
  node_path = require_chunk.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { Yt as BaseAddon, gt as logDestinationCapability } from "../../dist-Zhe9cTnK.mjs";
1
+ import { Yt as BaseAddon, gt as logDestinationCapability } from "../../dist-BIvXRexm.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  import * as path$1 from "node:path";
4
4
  import path from "node:path";
@@ -1,4 +1,4 @@
1
- import { G as describeCustomActions } from "./dist-Zhe9cTnK.mjs";
1
+ import { G as describeCustomActions } from "./dist-BIvXRexm.mjs";
2
2
  //#region src/kernel/custom-action-registry.ts
3
3
  /**
4
4
  * CustomActionRegistry — per-process registry of addon custom actions.
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-DUSfUAgz.js");
1
+ const require_dist = require("./dist-D3lJV9M7.js");
2
2
  //#region src/kernel/custom-action-registry.ts
3
3
  /**
4
4
  * CustomActionRegistry — per-process registry of addon custom actions.