@camstack/system 1.2.357 → 1.2.359

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 (70) hide show
  1. package/dist/addon-runner.js +1 -1
  2. package/dist/addon-runner.mjs +1 -1
  3. package/dist/auth/user-manager.d.ts +43 -2
  4. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  5. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  6. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  7. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  8. package/dist/builtins/alerts/alerts.addon.js +1 -1
  9. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  10. package/dist/builtins/autotrack/index.js +2 -2
  11. package/dist/builtins/autotrack/index.mjs +2 -2
  12. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  13. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  14. package/dist/builtins/calendars/calendars.addon.js +1 -1
  15. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  16. package/dist/builtins/camera-grid/index.js +1 -1
  17. package/dist/builtins/camera-grid/index.mjs +1 -1
  18. package/dist/builtins/composer/composer.addon.js +8 -8
  19. package/dist/builtins/composer/composer.addon.mjs +8 -8
  20. package/dist/builtins/console-logging/index.js +1 -1
  21. package/dist/builtins/console-logging/index.mjs +1 -1
  22. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  23. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  24. package/dist/builtins/device-manager/device-manager.addon.js +9 -9
  25. package/dist/builtins/device-manager/device-manager.addon.mjs +9 -9
  26. package/dist/builtins/hub-forwarder/index.js +1 -1
  27. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  28. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  29. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  30. package/dist/builtins/local-auth/admin-account-boot.d.ts +27 -0
  31. package/dist/builtins/local-auth/auth-schema.d.ts +3 -2
  32. package/dist/builtins/local-auth/local-auth.addon.js +281 -8
  33. package/dist/builtins/local-auth/local-auth.addon.mjs +291 -22
  34. package/dist/builtins/local-network/address-book.d.ts +69 -0
  35. package/dist/builtins/local-network/local-network.addon.d.ts +44 -32
  36. package/dist/builtins/local-network/local-network.addon.js +368 -55
  37. package/dist/builtins/local-network/local-network.addon.mjs +369 -54
  38. package/dist/builtins/loki-logging/index.js +1 -1
  39. package/dist/builtins/loki-logging/index.mjs +1 -1
  40. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  41. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  42. package/dist/builtins/platform-probe/index.js +1 -1
  43. package/dist/builtins/platform-probe/index.mjs +1 -1
  44. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  45. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  46. package/dist/builtins/snapshot/index.js +1 -1
  47. package/dist/builtins/snapshot/index.mjs +1 -1
  48. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  49. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  50. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  51. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  52. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  53. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  54. package/dist/builtins/system-config/system-config.addon.js +1 -1
  55. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  56. package/dist/builtins/winston-logging/index.js +1 -1
  57. package/dist/builtins/winston-logging/index.mjs +1 -1
  58. package/dist/{child-cap-dispatch-BcRHQBKW.mjs → child-cap-dispatch-Dm1TRDCr.mjs} +2 -2
  59. package/dist/{child-cap-dispatch-wbIQJctP.js → child-cap-dispatch-t61ohDpb.js} +2 -2
  60. package/dist/{composition-sources-CeO0K2cl.js → composition-sources-CCU_KizO.js} +1 -1
  61. package/dist/{composition-sources-BBfqepyT.mjs → composition-sources-CHlfWHl6.mjs} +1 -1
  62. package/dist/{dist-CFVOy8VT.js → dist-W_X44h-s.js} +669 -121
  63. package/dist/{dist-B7WRgEZY.mjs → dist-pTfD_M-U.mjs} +628 -122
  64. package/dist/index.js +6 -141
  65. package/dist/index.mjs +4 -139
  66. package/dist/kernel/config-manager.d.ts +1 -1
  67. package/dist/kernel/config-schema.d.ts +6 -1
  68. package/dist/{retired-settings-keys-DKRjfz0U.mjs → retired-settings-keys-CK_ifret.mjs} +1 -1
  69. package/dist/{retired-settings-keys-CRlTzxaS.js → retired-settings-keys-jglEzgWR.js} +1 -1
  70. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("./chunk-Cek0wNdY.js");
3
- const require_dist = require("./dist-CFVOy8VT.js");
3
+ const require_dist = require("./dist-W_X44h-s.js");
4
4
  const require_builtins_alerts_alerts_addon = require("./builtins/alerts/alerts.addon.js");
5
5
  require("./builtins/alerts/index.js");
6
6
  const require_builtins_calendars_calendars_addon = require("./builtins/calendars/calendars.addon.js");
@@ -31,7 +31,7 @@ require("./builtins/system-config/index.js");
31
31
  const require_builtins_winston_logging_index = require("./builtins/winston-logging/index.js");
32
32
  const require_event_loop_stall_monitor = require("./event-loop-stall-monitor-ey4mbofz.js");
33
33
  const require_tls$1 = require("./tls-CCMX7MjX.js");
34
- const require_child_cap_dispatch = require("./child-cap-dispatch-wbIQJctP.js");
34
+ const require_child_cap_dispatch = require("./child-cap-dispatch-t61ohDpb.js");
35
35
  const require_resource_monitor = require("./resource-monitor-BgWGRxN5.js");
36
36
  const require_custom_action_registry = require("./custom-action-registry-acBY3mHA.js");
37
37
  let zod = require("zod");
@@ -7764,136 +7764,6 @@ function createDoorSettingsView(addonId, door, sections) {
7764
7764
  };
7765
7765
  }
7766
7766
  //#endregion
7767
- //#region src/kernel/config-schema.ts
7768
- /** Default data directory — used when CAMSTACK_DATA env var is not set */
7769
- var DEFAULT_DATA_PATH = "camstack-data";
7770
- /**
7771
- * A list of browser origins from config.yaml (a YAML list) or from the
7772
- * `CAMSTACK_CORS_ORIGINS` env var (one comma-separated string — env carries
7773
- * only strings). Validation of each entry is the CORS policy's job
7774
- * (`server/backend/src/api/cors/cors-policy.ts`), which logs what it rejects;
7775
- * the schema only fixes the SHAPE so a typo cannot stop the hub from booting.
7776
- */
7777
- var originListSchema = zod.z.preprocess((value) => typeof value === "string" ? value.split(",").map((entry) => entry.trim()).filter((entry) => entry.length > 0) : value, zod.z.array(zod.z.string()));
7778
- var serverSchema = zod.z.object({
7779
- port: zod.z.number().default(4443),
7780
- host: zod.z.string().default("0.0.0.0"),
7781
- dataPath: zod.z.string().default(DEFAULT_DATA_PATH),
7782
- /**
7783
- * EXTRA browser origins allowed to call this hub cross-origin (D707), on
7784
- * top of the built-ins: the hub's own origin, the hosted viewer PWA and the
7785
- * native app's opaque `null` origin. Bootstrap-owned on purpose — widening
7786
- * who may read hub responses in a browser is a security decision, and the
7787
- * policy is live from the first request, before the settings store exists.
7788
- */
7789
- corsOrigins: originListSchema.default([])
7790
- });
7791
- var authSchema = zod.z.object({
7792
- jwtSecret: zod.z.string().nullable().default(null),
7793
- adminUsername: zod.z.string().default("admin"),
7794
- adminPassword: zod.z.string().default("changeme")
7795
- });
7796
- var hubSchema = zod.z.object({
7797
- url: zod.z.string().default("ws://localhost:4443/agent"),
7798
- token: zod.z.string().default("")
7799
- });
7800
- var agentSchema = zod.z.object({
7801
- name: zod.z.string().default(""),
7802
- /** Port for the agent status page (minimal HTML) */
7803
- statusPort: zod.z.number().default(4444)
7804
- });
7805
- var tlsSchema = zod.z.object({
7806
- /**
7807
- * Enable HTTPS (default: true). The certificate itself is never configured
7808
- * here: the admin UI (Network → Local access) generates or uploads it
7809
- * (D726), and boot serves whatever `tls/mode` says.
7810
- */
7811
- enabled: zod.z.boolean().default(true) });
7812
- /**
7813
- * Bootstrap-time addon configuration — read PURELY from YAML, before the
7814
- * kernel can talk to the settings-store. This breaks the chicken-and-egg
7815
- * where the settings store itself is implemented by an addon: the kernel
7816
- * needs to know WHICH addon to load first to provide the store, and that
7817
- * decision can't itself live in the store.
7818
- *
7819
- * Backward-compatible: every field is optional + defaults reproduce the
7820
- * current hard-coded behavior. Existing config.yaml files keep working.
7821
- */
7822
- var bootstrapAddonsSchema = zod.z.object({
7823
- /**
7824
- * Addon implementing the `settings-store` capability. Loaded FIRST,
7825
- * before any other addon is enabled — every other addon's enable
7826
- * state, settings, and ordering lives in the store it provides.
7827
- *
7828
- * Default: '@camstack/addon-sqlite-storage' (the workspace's
7829
- * default SQLite-backed store). Future alternatives could swap this
7830
- * for postgres/redis without touching kernel code.
7831
- */
7832
- settingsStoreAddon: zod.z.string().default("@camstack/addon-sqlite-storage"),
7833
- /**
7834
- * How the launcher provisions REQUIRED_PACKAGES into `data/addons/`
7835
- * on startup.
7836
- *
7837
- * - `'npm'` — pull from the npm registry (production default).
7838
- * - `'local'` — copy `packages/<X>/` from the workspace into
7839
- * `data/addons/<X>/`. Use for the Electron-
7840
- * packaged bundle and the e2e harness.
7841
- * - `'symlink'` — point `data/addons/<X>` at the workspace source
7842
- * dir via a directory symlink. Dev-only: a
7843
- * workspace rebuild (`npm run build -w <X>`) is
7844
- * immediately reflected at the next addon load,
7845
- * no copy step. Falls back to `'local'` on
7846
- * platforms that reject symlink creation (Windows
7847
- * without developer-mode).
7848
- *
7849
- * The `CAMSTACK_INSTALL_SOURCE` env var, when set, wins over this
7850
- * field. Leave undefined to keep the launcher's default behaviour
7851
- * (npm when no workspace, local when a bundled addons dir is
7852
- * present, …).
7853
- */
7854
- installSource: zod.z.enum([
7855
- "npm",
7856
- "local",
7857
- "symlink"
7858
- ]).optional(),
7859
- /**
7860
- * Override the kernel's hard-coded `AddonInstaller.REQUIRED_PACKAGES`.
7861
- * Passing an array here REPLACES the default list entirely — useful
7862
- * for stripped-down deployments (only the bundle of addons the
7863
- * operator actually wants) and for forcing a different storage
7864
- * backend at first boot.
7865
- *
7866
- * Leave undefined to use the kernel-shipped defaults.
7867
- */
7868
- requiredAddons: zod.z.array(zod.z.string()).optional(),
7869
- /**
7870
- * Disable list applied AFTER the settings-store reports the enabled
7871
- * set. Operator escape hatch — boot without a known-broken addon
7872
- * without having to mutate the store.
7873
- */
7874
- forceDisable: zod.z.array(zod.z.string()).default([])
7875
- });
7876
- /** Bootstrap config -- loaded from config.yaml ONLY at startup.
7877
- * All other settings live in SQL (system_settings table). */
7878
- var bootstrapSchema = zod.z.object({
7879
- /** Server mode: 'hub' (full server) or 'agent' (worker node) */
7880
- mode: zod.z.enum(["hub", "agent"]).default("hub"),
7881
- server: serverSchema.default(serverSchema.parse({})),
7882
- auth: authSchema.default(authSchema.parse({})),
7883
- /** Hub connection config — only used when mode='agent' */
7884
- hub: hubSchema.default(hubSchema.parse({})),
7885
- /** Agent-specific config — only used when mode='agent' */
7886
- agent: agentSchema.default(agentSchema.parse({})),
7887
- /** TLS configuration */
7888
- tls: tlsSchema.default(tlsSchema.parse({})),
7889
- /**
7890
- * Addon bootstrap directives — minimum addon set needed before the
7891
- * kernel can reach the settings-store. See bootstrapAddonsSchema.
7892
- * Spec: docs/superpowers/specs/2026-05-15-yaml-bootstrap-expansion.md
7893
- */
7894
- bootstrap: bootstrapAddonsSchema.default(bootstrapAddonsSchema.parse({}))
7895
- });
7896
- //#endregion
7897
7767
  //#region ../../node_modules/js-yaml/dist/js-yaml.mjs
7898
7768
  /*! js-yaml 4.2.0 https://github.com/nodeca/js-yaml @license MIT */
7899
7769
  var __create = Object.create;
@@ -10256,9 +10126,7 @@ var ENV_VAR_MAP = {
10256
10126
  /** config.yaml, env overrides applied, parsed. */
10257
10127
  function loadBootstrapConfig(configPath) {
10258
10128
  const merged = applyEnvOverrides((0, _camstack_types_addon.asJsonObject)(loadYaml(configPath)) ?? {});
10259
- const config = bootstrapSchema.parse(merged);
10260
- warnDefaultCredentials(config);
10261
- return config;
10129
+ return require_builtins_local_auth_local_auth_addon.bootstrapSchema.parse(merged);
10262
10130
  }
10263
10131
  function writeBootstrapSection(configPath, section, data) {
10264
10132
  if (!BOOTSTRAP_SECTIONS.has(section)) throw new Error(`[ConfigManager] Section "${section}" is a runtime setting — use setSection() to persist via the settings-store, not update() which writes to config.yaml`);
@@ -10269,7 +10137,7 @@ function writeBootstrapSection(configPath, section, data) {
10269
10137
  ...existing,
10270
10138
  ...data
10271
10139
  };
10272
- const validation = bootstrapSchema.safeParse(raw);
10140
+ const validation = require_builtins_local_auth_local_auth_addon.bootstrapSchema.safeParse(raw);
10273
10141
  if (!validation.success) throw new Error(`[ConfigManager] Invalid config update for section "${section}": ${validation.error.message}`);
10274
10142
  const tmpPath = `${configPath}.tmp`;
10275
10143
  node_fs.writeFileSync(tmpPath, dump(raw, {
@@ -10356,9 +10224,6 @@ function loadYaml(configPath) {
10356
10224
  console.log(`[ConfigManager] Loaded config from: ${configPath}`);
10357
10225
  return parsed;
10358
10226
  }
10359
- function warnDefaultCredentials(config) {
10360
- if (config.auth.adminPassword === "changeme") console.warn("[ConfigManager] Warning: Using default admin password \"changeme\". Set auth.adminPassword in your config.yaml or the CAMSTACK_ADMIN_PASS env var.");
10361
- }
10362
10227
  //#endregion
10363
10228
  //#region src/kernel/store-settings-view.ts
10364
10229
  function createStoreSettingsView(addonId, cm) {
@@ -96494,7 +96359,7 @@ exports.ConsoleLoggingAddon = require_builtins_console_logging_index.ConsoleLogg
96494
96359
  exports.CoreBlocksAddon = require_builtins_core_blocks_core_blocks_addon.CoreBlocksAddon;
96495
96360
  exports.CustomActionRegistry = require_custom_action_registry.CustomActionRegistry;
96496
96361
  exports.DECISIVE_HEAP_SPACES = require_child_cap_dispatch.DECISIVE_HEAP_SPACES;
96497
- exports.DEFAULT_DATA_PATH = DEFAULT_DATA_PATH;
96362
+ exports.DEFAULT_DATA_PATH = require_builtins_local_auth_local_auth_addon.DEFAULT_DATA_PATH;
96498
96363
  exports.DEFAULT_LAN_HTTP_PORT = require_tls$1.DEFAULT_LAN_HTTP_PORT;
96499
96364
  exports.DEFAULT_LOG_LEVEL = DEFAULT_LOG_LEVEL;
96500
96365
  exports.DEVICE_SETTINGS_CONTRIBUTION_METHODS = require_dist.DEVICE_SETTINGS_CONTRIBUTION_METHODS;
@@ -96626,7 +96491,7 @@ exports.applyCertificateToListener = require_tls$1.applyCertificateToListener;
96626
96491
  exports.applyLanHttp = require_tls$1.applyLanHttp;
96627
96492
  exports.attributeStall = require_event_loop_stall_monitor.attributeStall;
96628
96493
  exports.bindPendingLanHttp = require_tls$1.bindPendingLanHttp;
96629
- exports.bootstrapSchema = bootstrapSchema;
96494
+ exports.bootstrapSchema = require_builtins_local_auth_local_auth_addon.bootstrapSchema;
96630
96495
  exports.brokerCallForCap = require_child_cap_dispatch.brokerCallForCap;
96631
96496
  exports.brokerTransportLink = require_child_cap_dispatch.brokerTransportLink;
96632
96497
  Object.defineProperty(exports, "buildBinaryPath", {
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM$1, r as __exportAll, t as __commonJSMin$1 } from "./chunk-CNf5ZN-e.mjs";
2
- import { $n as DATAPLANE_SECRET_HEADER$1, Cr as EventCategory$1, Ft as isCollectionArrayMethod, Ht as lifecycleJobSchema, Kt as logLevelAtMost, Lt as isObjectInput, N as RUNTIME_DEFAULTS, O as METHOD_ACCESS_MAP, Pt as isArrayOutputSchema, Rt as isVoidInput, T as LOG_LEVEL_RANK, W as addonSettingsCapability, Zn as errMsg$1, _r as parseJsonUnknown, ar as asJsonObject$1, br as scopeKey, cn as procedureAuthKey, cr as createEvent, dr as expandCapMethods, er as DEVICE_SETTINGS_CONTRIBUTION_METHODS, gn as resolveMethodAuth, gr as parseJsonObject, kt as extractNestedAddonId, lr as emitDownForOwnedCaps, nn as objectInputDeclaresAddonId, nr as ReadinessRegistry, or as asNumber, qt as looseSchema, rn as objectInputDeclaresRequiredDeviceId, rr as ReadinessTimeoutError, sr as asString$1, t as ALL_CAPABILITY_DEFINITIONS, tr as DEVICE_STATUS_METHOD, vn as scopesAllowAddon, vr as readinessKey, yn as scopesAllowDeviceCap, yr as resolveCapMount, zt as kebabToCamel } from "./dist-B7WRgEZY.mjs";
2
+ import { Ar as EventCategory$1, At as extractNestedAddonId, Bt as isObjectInput, Cr as parseJsonObject, Dr as scopeKey, Er as resolveCapMount, Gt as lifecycleJobSchema, Ht as kebabToCamel, It as isArrayOutputSchema, Lt as isCollectionArrayMethod, N as RUNTIME_DEFAULTS, O as METHOD_ACCESS_MAP, T as LOG_LEVEL_RANK, Tn as scopesAllowDeviceCap, Tr as readinessKey, Vt as isVoidInput, W as addonSettingsCapability, Xt as looseSchema, Yt as logLevelAtMost, an as objectInputDeclaresAddonId, bn as resolveMethodAuth, cr as DEVICE_STATUS_METHOD, dn as procedureAuthKey, fr as asJsonObject$1, gr as emitDownForOwnedCaps, hr as createEvent, ir as errMsg$1, lr as ReadinessRegistry, mr as asString$1, on as objectInputDeclaresRequiredDeviceId, or as DATAPLANE_SECRET_HEADER$1, pr as asNumber, sr as DEVICE_SETTINGS_CONTRIBUTION_METHODS, t as ALL_CAPABILITY_DEFINITIONS, ur as ReadinessTimeoutError, vr as expandCapMethods, wn as scopesAllowAddon, wr as parseJsonUnknown } from "./dist-pTfD_M-U.mjs";
3
3
  import { AlertCenterAddon } from "./builtins/alerts/alerts.addon.mjs";
4
4
  import "./builtins/alerts/index.mjs";
5
5
  import { CalendarsAddon } from "./builtins/calendars/calendars.addon.mjs";
@@ -15,7 +15,7 @@ import "./builtins/device-manager/index.mjs";
15
15
  import { HubForwarderAddon, HubForwarderDestination } from "./builtins/hub-forwarder/index.mjs";
16
16
  import { LivenessMonitorAddon } from "./builtins/liveness-monitor/liveness-monitor.addon.mjs";
17
17
  import "./builtins/liveness-monitor/index.mjs";
18
- import { LocalAuthAddon, a as isSettingsReadUnavailable, c as ApiKeyManager, i as SettingsReadUnavailableError, n as ScopedTokenManager, o as require_ms, r as AuthManager, s as require_safe_buffer, t as UserManager } from "./builtins/local-auth/local-auth.addon.mjs";
18
+ import { LocalAuthAddon, a as AuthManager, c as require_ms, i as ScopedTokenManager, l as require_safe_buffer, n as bootstrapSchema, o as SettingsReadUnavailableError, r as UserManager, s as isSettingsReadUnavailable, t as DEFAULT_DATA_PATH, u as ApiKeyManager } from "./builtins/local-auth/local-auth.addon.mjs";
19
19
  import "./builtins/local-auth/index.mjs";
20
20
  import { LokiDestination, LokiLoggingAddon } from "./builtins/loki-logging/index.mjs";
21
21
  import NativeMetricsAddon, { t as NativeMetricsProvider } from "./builtins/native-metrics/native-metrics.addon.mjs";
@@ -30,7 +30,7 @@ import "./builtins/system-config/index.mjs";
30
30
  import { WinstonDestination, WinstonLoggingAddon } from "./builtins/winston-logging/index.mjs";
31
31
  import { _ as ensureModel, a as createFileDataPlaneHandler, c as parseRangeHeader, d as ModelDownloadService, g as downloadModel, h as downloadFile, i as startEventLoopStallMonitor, l as parseTokenizedUrl, m as deleteModelFromDisk, n as STALL_TICK_MS, o as contentTypeFor, p as collectModelFiles, r as attributeStall, s as createAuthenticatedFileServer, t as STALL_REPORT_MS, u as resolveFilePath, v as fetchJson, x as isModelDownloaded, y as getModelFilePath } from "./event-loop-stall-monitor-EXjzIxDz.mjs";
32
32
  import { A as allFamiliesListenHost, C as collectCertIdentity, D as SERVER_AUTH_OID, E as MAX_LEAF_VALIDITY_DAYS, F as registerLanHttpHandler, M as bindPendingLanHttp, N as closeLanHttp, O as evaluateExistingCert, P as readLanHttpState, S as CA_COMMON_NAME, T as LEAF_RENEWAL_WINDOW_DAYS, _ as writeExtraSans, a as validateUploadedTls, b as loadTlsCert, c as registerHttpsListener, d as prepareBootTls, f as UPLOADED_CA_FILE, g as splitPemCertificates, h as readTlsMode, i as storeUploadedCertificate, j as applyLanHttp, k as DEFAULT_LAN_HTTP_PORT, l as reloadHttpsListener, m as readTlsAccessStatus, n as regenerateCertificate, o as clearHttpsListener, p as readExtraSans, r as revertToGeneratedCertificate, s as leafFingerprintOf, t as applyCertificateToListener, u as servedHttpsLeafFingerprint, v as writeTlsMode, w as CA_VALIDITY_DAYS, x as reissueTlsLeaf, y as ensureTlsCert } from "./tls-CJHogwTl.mjs";
33
- import { $ as CapRouteError, $n as EMPTY_CAP_ACTION_READING, $t as RUNNER_RSS_BUDGET_ENV, A as resolveHwAccel, An as OUTBOUND_QUEUE_SUSTAIN_MS, At as DeviceRegistry, B as udsChildLogToWorkerEntry, Bn as createSocketPlaneMeter, Bt as hostNodeIdOf, C as getBrokerEventBus, Cn as HEAP_SPACE_REPORT_MIN_MB, Ct as capActionName, D as subscribePassthrough, Dn as readHeapSpaces, Dt as parseCapAction, E as setNodeEventInterest, En as heapSpaceField, Et as capServiceName, F as ipcParentLink, Fn as createMeshQueueReader, Ft as resolveAddonClass, G as UDS_NO_ROUTE_PREFIX, Gn as EMPTY_SOCKET_DIRECTION, Gt as HEAP_WATCH_INTERVAL_MS, H as createUdsLoggerWithControl, Hn as diffSocketPlane, Ht as HEAP_RECLAIM_MIN_INTERVAL_MS, I as localProviderLink, In as formatMeshQueue, It as buildNpmChildEnv, J as answerClaimedGetStatus, Jn as sampleSocketDirection, Jt as HUB_MAIN_RSS_BUDGET_MB, K as afterWorkerOnlineAnnounce, Kn as createSocketDirectionCounters, Kt as HEAP_WATCH_WARN_RATIO, L as createParentUnownedCallHandler, Ln as EMPTY_SOCKET_PLANE_BASELINE, Lt as resolveNpmInvocation, M as brokerTransportLink, Mn as createOutboundQueueGate, Mt as CapabilityUnavailableError, N as buildLinkChain, Nn as formatOutboundQueueVerdict, Nt as copyBundledNativeModules, O as AddonDepsManager, On as selectReportedSpaces, Ot as deserializeTypedArrays, P as deviceCapResolverLink, Pn as MESH_QUEUE_TOP_N, Pt as installManifestNativeDeps, Q as CapRouteResolver, Qn as CAP_ACTION_UNLABELLED, Qt as RUNNER_HEAP_WATCH_INTERVAL_MS, R as createUdsEventBridge, Rn as SOCKET_PLANE_TOP_N, Rt as runNpm, S as clusterEventTopic, Sn as DECISIVE_HEAP_SPACES, St as NATIVE_PROVIDER_SERVICE_INFIX, T as registerEventBusService, Tn as formatHeapSpaces, Tt as capBareAction, U as LocalChildClient, Un as formatSocketPlane, Ut as HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, V as createUdsLogger, Vn as createSocketPlaneReader, Vt as createAddonDataPlaneFacility, W as LocalChildRegistry, Wn as readSocketQueues, Wt as HEAP_RECLAIM_TRIGGER_MB, X as AGENT_CAP_FWD_ACTION, Xn as socketDirectionMessages, Xt as RSS_BUDGET_REANNOUNCE_MIN_MS, Y as deviceOfGetStatus, Yn as socketDirectionBytes, Yt as HUB_RSS_BUDGET_ENV, Z as AGENT_CAP_FWD_SERVICE, Zn as CAP_ACTION_OVERFLOW_LABEL, Zt as RSS_BUDGET_RELEASE_RATIO, _ as getWorkerDeviceRegistry, _n as ARRAY_BUFFER_RELEASE_MIN_DROP_RATIO, a as reapProcessGroup, an as describeRss, ar as createEventPlaneMeter, at as getCapUsageRegistry, b as setHubConnected, bn as formatArrayBufferCensus, bt as createAddonService, c as runnerOwnsProcessGroup, cn as parseRssBudgetMb, cr as formatEventPlane, ct as UdsLocalTransportServer, d as summarizeMembers, dn as startHeapWatch, dt as localEndpointPath, en as ZERO_LOOP_DELAY, er as MAX_CAP_ACTIONS_PER_PEER, et as classifyCapRoute, f as installManifestSystemDeps, fn as startRunnerHeapWatch, ft as FrameDecoder, g as createUdsAddonContext, gn as ARRAY_BUFFER_CENSUS_THRESHOLD_MB, h as createAddonContext, hn as ARRAY_BUFFER_CENSUS_SUSTAIN_MS, ht as createBrokerDeviceManagerApi, in as createV8Reclaimer, ir as EVENT_PLANE_TOP_N, it as __resetCapUsageRegistryForTests, j as brokerCallForCap, jn as OUTBOUND_QUEUE_THRESHOLD_BYTES, jt as CapabilityHandle, k as createKernelHwAccel, kn as OUTBOUND_QUEUE_COOLDOWN_MS, kt as serializeTypedArrays, l as signalAllRunnerGroups, ln as reclaimIntervalMs, lt as SocketChannel, m as adaptBrokerToCluster, mn as ARRAY_BUFFER_CENSUS_COOLDOWN_MS, mt as buildNativeCapProxy, nn as createDeferredHeapWatchSink, nr as createCapActionCensus, nt as CapUsageRegistry, o as registerRunnerGroup, on as hubMainRssBudget, or as createEventPlaneReader, ot as createLocalTransport, p as installManifestPythonDeps, pn as strandedMb, pt as encodeFrame, q as GET_STATUS_METHOD, qn as recordSocketFrame, qt as HUB_MAIN_HEAP_WATCH_LABEL, r as defaultProcessGroupOps, rn as createLoopDelayMeter, rr as diffCapActionCensus, rt as PARENT_ROUTED_PROVIDER_ADDON_ID, s as releaseRunnerGroup, sn as nextRssBudgetState, sr as diffEventPlane, st as UdsLocalTransportClient, t as CAP_METHOD_NOT_IMPLEMENTED, tn as buildHeapSample, tr as capActionLabel, tt as callWithServiceDiscovery, un as shouldReclaim, ut as PeerAnsweredError, v as getOrInitReadinessRegistry, vn as createArrayBufferCensusGate, vt as mountNativeCapService, w as getMoleculerEventStats, wn as emitHeapDiagnosticReport, wt as capActionSuffix, x as EVENT_TOPIC_PREFIX, xn as isArrayBufferCensusReport, xt as validateProviderRegistrations, y as getOrInitReadinessRegistryForClient, yn as createInspectorArrayBufferCensus, z as createUdsEventBus, zn as SOCKET_QUEUE_TOP_N, zt as createAddonPeerBytesFacility } from "./child-cap-dispatch-BcRHQBKW.mjs";
33
+ import { $ as CapRouteError, $n as EMPTY_CAP_ACTION_READING, $t as RUNNER_RSS_BUDGET_ENV, A as resolveHwAccel, An as OUTBOUND_QUEUE_SUSTAIN_MS, At as DeviceRegistry, B as udsChildLogToWorkerEntry, Bn as createSocketPlaneMeter, Bt as hostNodeIdOf, C as getBrokerEventBus, Cn as HEAP_SPACE_REPORT_MIN_MB, Ct as capActionName, D as subscribePassthrough, Dn as readHeapSpaces, Dt as parseCapAction, E as setNodeEventInterest, En as heapSpaceField, Et as capServiceName, F as ipcParentLink, Fn as createMeshQueueReader, Ft as resolveAddonClass, G as UDS_NO_ROUTE_PREFIX, Gn as EMPTY_SOCKET_DIRECTION, Gt as HEAP_WATCH_INTERVAL_MS, H as createUdsLoggerWithControl, Hn as diffSocketPlane, Ht as HEAP_RECLAIM_MIN_INTERVAL_MS, I as localProviderLink, In as formatMeshQueue, It as buildNpmChildEnv, J as answerClaimedGetStatus, Jn as sampleSocketDirection, Jt as HUB_MAIN_RSS_BUDGET_MB, K as afterWorkerOnlineAnnounce, Kn as createSocketDirectionCounters, Kt as HEAP_WATCH_WARN_RATIO, L as createParentUnownedCallHandler, Ln as EMPTY_SOCKET_PLANE_BASELINE, Lt as resolveNpmInvocation, M as brokerTransportLink, Mn as createOutboundQueueGate, Mt as CapabilityUnavailableError, N as buildLinkChain, Nn as formatOutboundQueueVerdict, Nt as copyBundledNativeModules, O as AddonDepsManager, On as selectReportedSpaces, Ot as deserializeTypedArrays, P as deviceCapResolverLink, Pn as MESH_QUEUE_TOP_N, Pt as installManifestNativeDeps, Q as CapRouteResolver, Qn as CAP_ACTION_UNLABELLED, Qt as RUNNER_HEAP_WATCH_INTERVAL_MS, R as createUdsEventBridge, Rn as SOCKET_PLANE_TOP_N, Rt as runNpm, S as clusterEventTopic, Sn as DECISIVE_HEAP_SPACES, St as NATIVE_PROVIDER_SERVICE_INFIX, T as registerEventBusService, Tn as formatHeapSpaces, Tt as capBareAction, U as LocalChildClient, Un as formatSocketPlane, Ut as HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, V as createUdsLogger, Vn as createSocketPlaneReader, Vt as createAddonDataPlaneFacility, W as LocalChildRegistry, Wn as readSocketQueues, Wt as HEAP_RECLAIM_TRIGGER_MB, X as AGENT_CAP_FWD_ACTION, Xn as socketDirectionMessages, Xt as RSS_BUDGET_REANNOUNCE_MIN_MS, Y as deviceOfGetStatus, Yn as socketDirectionBytes, Yt as HUB_RSS_BUDGET_ENV, Z as AGENT_CAP_FWD_SERVICE, Zn as CAP_ACTION_OVERFLOW_LABEL, Zt as RSS_BUDGET_RELEASE_RATIO, _ as getWorkerDeviceRegistry, _n as ARRAY_BUFFER_RELEASE_MIN_DROP_RATIO, a as reapProcessGroup, an as describeRss, ar as createEventPlaneMeter, at as getCapUsageRegistry, b as setHubConnected, bn as formatArrayBufferCensus, bt as createAddonService, c as runnerOwnsProcessGroup, cn as parseRssBudgetMb, cr as formatEventPlane, ct as UdsLocalTransportServer, d as summarizeMembers, dn as startHeapWatch, dt as localEndpointPath, en as ZERO_LOOP_DELAY, er as MAX_CAP_ACTIONS_PER_PEER, et as classifyCapRoute, f as installManifestSystemDeps, fn as startRunnerHeapWatch, ft as FrameDecoder, g as createUdsAddonContext, gn as ARRAY_BUFFER_CENSUS_THRESHOLD_MB, h as createAddonContext, hn as ARRAY_BUFFER_CENSUS_SUSTAIN_MS, ht as createBrokerDeviceManagerApi, in as createV8Reclaimer, ir as EVENT_PLANE_TOP_N, it as __resetCapUsageRegistryForTests, j as brokerCallForCap, jn as OUTBOUND_QUEUE_THRESHOLD_BYTES, jt as CapabilityHandle, k as createKernelHwAccel, kn as OUTBOUND_QUEUE_COOLDOWN_MS, kt as serializeTypedArrays, l as signalAllRunnerGroups, ln as reclaimIntervalMs, lt as SocketChannel, m as adaptBrokerToCluster, mn as ARRAY_BUFFER_CENSUS_COOLDOWN_MS, mt as buildNativeCapProxy, nn as createDeferredHeapWatchSink, nr as createCapActionCensus, nt as CapUsageRegistry, o as registerRunnerGroup, on as hubMainRssBudget, or as createEventPlaneReader, ot as createLocalTransport, p as installManifestPythonDeps, pn as strandedMb, pt as encodeFrame, q as GET_STATUS_METHOD, qn as recordSocketFrame, qt as HUB_MAIN_HEAP_WATCH_LABEL, r as defaultProcessGroupOps, rn as createLoopDelayMeter, rr as diffCapActionCensus, rt as PARENT_ROUTED_PROVIDER_ADDON_ID, s as releaseRunnerGroup, sn as nextRssBudgetState, sr as diffEventPlane, st as UdsLocalTransportClient, t as CAP_METHOD_NOT_IMPLEMENTED, tn as buildHeapSample, tr as capActionLabel, tt as callWithServiceDiscovery, un as shouldReclaim, ut as PeerAnsweredError, v as getOrInitReadinessRegistry, vn as createArrayBufferCensusGate, vt as mountNativeCapService, w as getMoleculerEventStats, wn as emitHeapDiagnosticReport, wt as capActionSuffix, x as EVENT_TOPIC_PREFIX, xn as isArrayBufferCensusReport, xt as validateProviderRegistrations, y as getOrInitReadinessRegistryForClient, yn as createInspectorArrayBufferCensus, z as createUdsEventBus, zn as SOCKET_QUEUE_TOP_N, zt as createAddonPeerBytesFacility } from "./child-cap-dispatch-Dm1TRDCr.mjs";
34
34
  import { n as getSinglePidStats, t as getPidStats } from "./resource-monitor-B2WZ8_q9.mjs";
35
35
  import { t as CustomActionRegistry } from "./custom-action-registry-B4Cf4O_X.mjs";
36
36
  import { z } from "zod";
@@ -7757,136 +7757,6 @@ function createDoorSettingsView(addonId, door, sections) {
7757
7757
  };
7758
7758
  }
7759
7759
  //#endregion
7760
- //#region src/kernel/config-schema.ts
7761
- /** Default data directory — used when CAMSTACK_DATA env var is not set */
7762
- var DEFAULT_DATA_PATH = "camstack-data";
7763
- /**
7764
- * A list of browser origins from config.yaml (a YAML list) or from the
7765
- * `CAMSTACK_CORS_ORIGINS` env var (one comma-separated string — env carries
7766
- * only strings). Validation of each entry is the CORS policy's job
7767
- * (`server/backend/src/api/cors/cors-policy.ts`), which logs what it rejects;
7768
- * the schema only fixes the SHAPE so a typo cannot stop the hub from booting.
7769
- */
7770
- var originListSchema = z.preprocess((value) => typeof value === "string" ? value.split(",").map((entry) => entry.trim()).filter((entry) => entry.length > 0) : value, z.array(z.string()));
7771
- var serverSchema = z.object({
7772
- port: z.number().default(4443),
7773
- host: z.string().default("0.0.0.0"),
7774
- dataPath: z.string().default(DEFAULT_DATA_PATH),
7775
- /**
7776
- * EXTRA browser origins allowed to call this hub cross-origin (D707), on
7777
- * top of the built-ins: the hub's own origin, the hosted viewer PWA and the
7778
- * native app's opaque `null` origin. Bootstrap-owned on purpose — widening
7779
- * who may read hub responses in a browser is a security decision, and the
7780
- * policy is live from the first request, before the settings store exists.
7781
- */
7782
- corsOrigins: originListSchema.default([])
7783
- });
7784
- var authSchema = z.object({
7785
- jwtSecret: z.string().nullable().default(null),
7786
- adminUsername: z.string().default("admin"),
7787
- adminPassword: z.string().default("changeme")
7788
- });
7789
- var hubSchema = z.object({
7790
- url: z.string().default("ws://localhost:4443/agent"),
7791
- token: z.string().default("")
7792
- });
7793
- var agentSchema = z.object({
7794
- name: z.string().default(""),
7795
- /** Port for the agent status page (minimal HTML) */
7796
- statusPort: z.number().default(4444)
7797
- });
7798
- var tlsSchema = z.object({
7799
- /**
7800
- * Enable HTTPS (default: true). The certificate itself is never configured
7801
- * here: the admin UI (Network → Local access) generates or uploads it
7802
- * (D726), and boot serves whatever `tls/mode` says.
7803
- */
7804
- enabled: z.boolean().default(true) });
7805
- /**
7806
- * Bootstrap-time addon configuration — read PURELY from YAML, before the
7807
- * kernel can talk to the settings-store. This breaks the chicken-and-egg
7808
- * where the settings store itself is implemented by an addon: the kernel
7809
- * needs to know WHICH addon to load first to provide the store, and that
7810
- * decision can't itself live in the store.
7811
- *
7812
- * Backward-compatible: every field is optional + defaults reproduce the
7813
- * current hard-coded behavior. Existing config.yaml files keep working.
7814
- */
7815
- var bootstrapAddonsSchema = z.object({
7816
- /**
7817
- * Addon implementing the `settings-store` capability. Loaded FIRST,
7818
- * before any other addon is enabled — every other addon's enable
7819
- * state, settings, and ordering lives in the store it provides.
7820
- *
7821
- * Default: '@camstack/addon-sqlite-storage' (the workspace's
7822
- * default SQLite-backed store). Future alternatives could swap this
7823
- * for postgres/redis without touching kernel code.
7824
- */
7825
- settingsStoreAddon: z.string().default("@camstack/addon-sqlite-storage"),
7826
- /**
7827
- * How the launcher provisions REQUIRED_PACKAGES into `data/addons/`
7828
- * on startup.
7829
- *
7830
- * - `'npm'` — pull from the npm registry (production default).
7831
- * - `'local'` — copy `packages/<X>/` from the workspace into
7832
- * `data/addons/<X>/`. Use for the Electron-
7833
- * packaged bundle and the e2e harness.
7834
- * - `'symlink'` — point `data/addons/<X>` at the workspace source
7835
- * dir via a directory symlink. Dev-only: a
7836
- * workspace rebuild (`npm run build -w <X>`) is
7837
- * immediately reflected at the next addon load,
7838
- * no copy step. Falls back to `'local'` on
7839
- * platforms that reject symlink creation (Windows
7840
- * without developer-mode).
7841
- *
7842
- * The `CAMSTACK_INSTALL_SOURCE` env var, when set, wins over this
7843
- * field. Leave undefined to keep the launcher's default behaviour
7844
- * (npm when no workspace, local when a bundled addons dir is
7845
- * present, …).
7846
- */
7847
- installSource: z.enum([
7848
- "npm",
7849
- "local",
7850
- "symlink"
7851
- ]).optional(),
7852
- /**
7853
- * Override the kernel's hard-coded `AddonInstaller.REQUIRED_PACKAGES`.
7854
- * Passing an array here REPLACES the default list entirely — useful
7855
- * for stripped-down deployments (only the bundle of addons the
7856
- * operator actually wants) and for forcing a different storage
7857
- * backend at first boot.
7858
- *
7859
- * Leave undefined to use the kernel-shipped defaults.
7860
- */
7861
- requiredAddons: z.array(z.string()).optional(),
7862
- /**
7863
- * Disable list applied AFTER the settings-store reports the enabled
7864
- * set. Operator escape hatch — boot without a known-broken addon
7865
- * without having to mutate the store.
7866
- */
7867
- forceDisable: z.array(z.string()).default([])
7868
- });
7869
- /** Bootstrap config -- loaded from config.yaml ONLY at startup.
7870
- * All other settings live in SQL (system_settings table). */
7871
- var bootstrapSchema = z.object({
7872
- /** Server mode: 'hub' (full server) or 'agent' (worker node) */
7873
- mode: z.enum(["hub", "agent"]).default("hub"),
7874
- server: serverSchema.default(serverSchema.parse({})),
7875
- auth: authSchema.default(authSchema.parse({})),
7876
- /** Hub connection config — only used when mode='agent' */
7877
- hub: hubSchema.default(hubSchema.parse({})),
7878
- /** Agent-specific config — only used when mode='agent' */
7879
- agent: agentSchema.default(agentSchema.parse({})),
7880
- /** TLS configuration */
7881
- tls: tlsSchema.default(tlsSchema.parse({})),
7882
- /**
7883
- * Addon bootstrap directives — minimum addon set needed before the
7884
- * kernel can reach the settings-store. See bootstrapAddonsSchema.
7885
- * Spec: docs/superpowers/specs/2026-05-15-yaml-bootstrap-expansion.md
7886
- */
7887
- bootstrap: bootstrapAddonsSchema.default(bootstrapAddonsSchema.parse({}))
7888
- });
7889
- //#endregion
7890
7760
  //#region ../../node_modules/js-yaml/dist/js-yaml.mjs
7891
7761
  /*! js-yaml 4.2.0 https://github.com/nodeca/js-yaml @license MIT */
7892
7762
  var __create = Object.create;
@@ -10249,9 +10119,7 @@ var ENV_VAR_MAP = {
10249
10119
  /** config.yaml, env overrides applied, parsed. */
10250
10120
  function loadBootstrapConfig(configPath) {
10251
10121
  const merged = applyEnvOverrides(asJsonObject(loadYaml(configPath)) ?? {});
10252
- const config = bootstrapSchema.parse(merged);
10253
- warnDefaultCredentials(config);
10254
- return config;
10122
+ return bootstrapSchema.parse(merged);
10255
10123
  }
10256
10124
  function writeBootstrapSection(configPath, section, data) {
10257
10125
  if (!BOOTSTRAP_SECTIONS.has(section)) throw new Error(`[ConfigManager] Section "${section}" is a runtime setting — use setSection() to persist via the settings-store, not update() which writes to config.yaml`);
@@ -10349,9 +10217,6 @@ function loadYaml(configPath) {
10349
10217
  console.log(`[ConfigManager] Loaded config from: ${configPath}`);
10350
10218
  return parsed;
10351
10219
  }
10352
- function warnDefaultCredentials(config) {
10353
- if (config.auth.adminPassword === "changeme") console.warn("[ConfigManager] Warning: Using default admin password \"changeme\". Set auth.adminPassword in your config.yaml or the CAMSTACK_ADMIN_PASS env var.");
10354
- }
10355
10220
  //#endregion
10356
10221
  //#region src/kernel/store-settings-view.ts
10357
10222
  function createStoreSettingsView(addonId, cm) {
@@ -1,5 +1,5 @@
1
- import { AppConfig } from './config-schema.js';
2
1
  import { FeatureManifest, ISettingsStoreProvider } from '@camstack/types';
2
+ import { AppConfig } from './config-schema.js';
3
3
  import { ISettingsStore, KernelAddonSettingsView } from './settings-view-types.js';
4
4
  import { SystemSettingsPreload } from './system-settings-mirror.js';
5
5
  export type { AddonSettingsView, ISettingsStore, KernelAddonSettingsView, SettingsViewBackend, } from './settings-view-types.js';
@@ -1,6 +1,11 @@
1
1
  import { z } from 'zod';
2
2
  /** Default data directory — used when CAMSTACK_DATA env var is not set */
3
3
  export declare const DEFAULT_DATA_PATH = "camstack-data";
4
+ /**
5
+ * The admin password seeded on first boot when none is configured. A SEED
6
+ * only: it never overwrites an existing account's password (`ensureAdminExists`).
7
+ */
8
+ export declare const DEFAULT_ADMIN_PASSWORD = "changeme";
4
9
  /** Bootstrap config -- loaded from config.yaml ONLY at startup.
5
10
  * All other settings live in SQL (system_settings table). */
6
11
  export declare const bootstrapSchema: z.ZodObject<{
@@ -33,8 +38,8 @@ export declare const bootstrapSchema: z.ZodObject<{
33
38
  bootstrap: z.ZodDefault<z.ZodObject<{
34
39
  settingsStoreAddon: z.ZodDefault<z.ZodString>;
35
40
  installSource: z.ZodOptional<z.ZodEnum<{
36
- local: "local";
37
41
  npm: "npm";
42
+ local: "local";
38
43
  symlink: "symlink";
39
44
  }>>;
40
45
  requiredAddons: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -1,4 +1,4 @@
1
- import { ar as asJsonObject } from "./dist-B7WRgEZY.mjs";
1
+ import { fr as asJsonObject } from "./dist-pTfD_M-U.mjs";
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-CFVOy8VT.js");
1
+ const require_dist = require("./dist-W_X44h-s.js");
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/system",
3
- "version": "1.2.357",
3
+ "version": "1.2.359",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",
@@ -53,7 +53,7 @@
53
53
  "category": "system",
54
54
  "name": "SQLite Settings",
55
55
  "entry": "./dist/builtins/sqlite-storage/sqlite-settings.addon.js",
56
- "description": "The relational ENGINE behind the data door (SQLite WAL). Registers `data-store-provider`, an internal collection cap; the public `settings-store` door is owned by `storage-orchestrator`, which dispatches here. Callers never reach this addon directly — that is what makes the engine replaceable. It ALSO registers `vector-store` (sqlite-vec) from the same database file and the same open handle, and `database-snapshot`: the verified copy of its database that the nightly backup archives in place of the live files, written by this runner on a thread over its own connection ([D693]). Runs in its OWN process (`execution.isolate`) — `better-sqlite3` `Statement.run` does not belong on the event loop that serves the API ([D181]).",
56
+ "description": "The relational ENGINE behind the data door (SQLite WAL). Registers `data-store-provider`, an internal collection cap; the public `settings-store` door is owned by `storage-orchestrator`, which dispatches here. Callers never reach this addon directly — that is what makes the engine replaceable. It ALSO registers `vector-store` (sqlite-vec) from the same database file and the same open handle, and `database-snapshot`: the verified copy of its database that the nightly backup archives in place of the live files, written by this runner on a thread over its own connection. Runs in its OWN process (`execution.isolate`) — `better-sqlite3` `Statement.run` does not belong on the event loop that serves the API.",
57
57
  "execution": {
58
58
  "isolate": true,
59
59
  "heapProfile": "heavy",
@@ -363,7 +363,7 @@
363
363
  "id": "composer",
364
364
  "category": "system",
365
365
  "name": "Composer",
366
- "description": "Runs every DECLARATIVE composition (a core block whose source is `composition`): declares the composed device under the shared Blocks integration, registers its caps natively, and derives each field from other devices' state by `from` / expression — event-driven, no polling. Hub-only. Runs in its OWN runner (`execution.isolate` + `group: composer`): frame-free and low-crash, grouped with no device provider or data plane (D29, D659).",
366
+ "description": "Runs every DECLARATIVE composition (a core block whose source is `composition`): declares the composed device under the shared Blocks integration, registers its caps natively, and derives each field from other devices' state by `from` / expression — event-driven, no polling. Hub-only. Runs in its OWN runner (`execution.isolate` + `group: composer`): frame-free and low-crash, grouped with no device provider or data plane.",
367
367
  "entry": "./dist/builtins/composer/index.js",
368
368
  "protected": true,
369
369
  "execution": {