@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.
- package/dist/addon-runner.js +1 -1
- package/dist/addon-runner.mjs +1 -1
- package/dist/auth/user-manager.d.ts +43 -2
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
- package/dist/builtins/alerts/alerts.addon.js +1 -1
- package/dist/builtins/alerts/alerts.addon.mjs +1 -1
- package/dist/builtins/autotrack/index.js +2 -2
- package/dist/builtins/autotrack/index.mjs +2 -2
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
- package/dist/builtins/calendars/calendars.addon.js +1 -1
- package/dist/builtins/calendars/calendars.addon.mjs +1 -1
- package/dist/builtins/camera-grid/index.js +1 -1
- package/dist/builtins/camera-grid/index.mjs +1 -1
- package/dist/builtins/composer/composer.addon.js +8 -8
- package/dist/builtins/composer/composer.addon.mjs +8 -8
- package/dist/builtins/console-logging/index.js +1 -1
- package/dist/builtins/console-logging/index.mjs +1 -1
- package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
- package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
- package/dist/builtins/device-manager/device-manager.addon.js +9 -9
- package/dist/builtins/device-manager/device-manager.addon.mjs +9 -9
- package/dist/builtins/hub-forwarder/index.js +1 -1
- package/dist/builtins/hub-forwarder/index.mjs +1 -1
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
- package/dist/builtins/local-auth/admin-account-boot.d.ts +27 -0
- package/dist/builtins/local-auth/auth-schema.d.ts +3 -2
- package/dist/builtins/local-auth/local-auth.addon.js +281 -8
- package/dist/builtins/local-auth/local-auth.addon.mjs +291 -22
- package/dist/builtins/local-network/address-book.d.ts +69 -0
- package/dist/builtins/local-network/local-network.addon.d.ts +44 -32
- package/dist/builtins/local-network/local-network.addon.js +368 -55
- package/dist/builtins/local-network/local-network.addon.mjs +369 -54
- package/dist/builtins/loki-logging/index.js +1 -1
- package/dist/builtins/loki-logging/index.mjs +1 -1
- package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
- package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
- package/dist/builtins/platform-probe/index.js +1 -1
- package/dist/builtins/platform-probe/index.mjs +1 -1
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
- package/dist/builtins/snapshot/index.js +1 -1
- package/dist/builtins/snapshot/index.mjs +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
- package/dist/builtins/system-config/system-config.addon.js +1 -1
- package/dist/builtins/system-config/system-config.addon.mjs +1 -1
- package/dist/builtins/winston-logging/index.js +1 -1
- package/dist/builtins/winston-logging/index.mjs +1 -1
- package/dist/{child-cap-dispatch-BcRHQBKW.mjs → child-cap-dispatch-Dm1TRDCr.mjs} +2 -2
- package/dist/{child-cap-dispatch-wbIQJctP.js → child-cap-dispatch-t61ohDpb.js} +2 -2
- package/dist/{composition-sources-CeO0K2cl.js → composition-sources-CCU_KizO.js} +1 -1
- package/dist/{composition-sources-BBfqepyT.mjs → composition-sources-CHlfWHl6.mjs} +1 -1
- package/dist/{dist-CFVOy8VT.js → dist-W_X44h-s.js} +669 -121
- package/dist/{dist-B7WRgEZY.mjs → dist-pTfD_M-U.mjs} +628 -122
- package/dist/index.js +6 -141
- package/dist/index.mjs +4 -139
- package/dist/kernel/config-manager.d.ts +1 -1
- package/dist/kernel/config-schema.d.ts +6 -1
- package/dist/{retired-settings-keys-DKRjfz0U.mjs → retired-settings-keys-CK_ifret.mjs} +1 -1
- package/dist/{retired-settings-keys-CRlTzxaS.js → retired-settings-keys-jglEzgWR.js} +1 -1
- 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-
|
|
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-
|
|
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
|
-
|
|
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 {
|
|
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
|
|
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-
|
|
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
|
-
|
|
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>>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/system",
|
|
3
|
-
"version": "1.2.
|
|
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
|
|
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
|
|
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": {
|