@camstack/system 1.1.76 → 1.2.1

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 (52) hide show
  1. package/dist/addon-runner.js +2 -2
  2. package/dist/addon-runner.mjs +2 -2
  3. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  6. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  7. package/dist/builtins/alerts/alerts.addon.js +1 -1
  8. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  9. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  10. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  11. package/dist/builtins/console-logging/index.js +1 -1
  12. package/dist/builtins/console-logging/index.mjs +1 -1
  13. package/dist/builtins/device-manager/device-linked-devices.d.ts +13 -0
  14. package/dist/builtins/device-manager/device-manager.addon.js +86 -26
  15. package/dist/builtins/device-manager/device-manager.addon.mjs +86 -26
  16. package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
  17. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
  18. package/dist/builtins/hub-forwarder/index.js +1 -1
  19. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  20. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  21. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  22. package/dist/builtins/local-network/local-network.addon.js +1 -1
  23. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  24. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  25. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  26. package/dist/builtins/platform-probe/index.js +1 -1
  27. package/dist/builtins/platform-probe/index.mjs +1 -1
  28. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  29. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  30. package/dist/builtins/snapshot/index.js +1 -1
  31. package/dist/builtins/snapshot/index.mjs +1 -1
  32. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  33. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  34. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +1 -1
  35. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +1 -1
  36. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  37. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  38. package/dist/builtins/system-config/system-config.addon.js +1 -1
  39. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  40. package/dist/builtins/winston-logging/index.js +1 -1
  41. package/dist/builtins/winston-logging/index.mjs +1 -1
  42. package/dist/{dist-Dycu89sF.mjs → dist-BLNvh8Qy.mjs} +39 -18
  43. package/dist/{dist-C0Pf5ShP.js → dist-DP2SKMvU.js} +39 -18
  44. package/dist/index.d.ts +1 -0
  45. package/dist/index.js +37 -8
  46. package/dist/index.mjs +35 -9
  47. package/dist/kernel/addon-installer.d.ts +17 -3
  48. package/dist/kernel/index.d.ts +1 -1
  49. package/dist/kernel/moleculer/node-registry.d.ts +2 -2
  50. package/dist/{manifest-python-deps-BiM1uDhe.mjs → manifest-python-deps-Co8MTPdy.mjs} +2 -2
  51. package/dist/{manifest-python-deps-BRFns0U-.js → manifest-python-deps-DE8HxnIx.js} +13 -1
  52. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { Tt as parseJsonUnknown, X as settingsStoreCapability, at as BaseAddon, ht as asJsonObject, it as errMsg, s as RUNTIME_DEFAULTS } from "../../dist-Dycu89sF.mjs";
1
+ import { Tt as parseJsonUnknown, X as settingsStoreCapability, at as BaseAddon, ht as asJsonObject, it as errMsg, s as RUNTIME_DEFAULTS } from "../../dist-BLNvh8Qy.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import Database from "better-sqlite3";
4
4
  //#region src/builtins/sqlite-storage/sqlite-settings-backend.ts
@@ -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-C0Pf5ShP.js");
6
+ const require_dist = require("../../dist-DP2SKMvU.js");
7
7
  let node_path = require("node:path");
8
8
  node_path = require_chunk.__toESM(node_path);
9
9
  let node_fs_promises = require("node:fs/promises");
@@ -1,4 +1,4 @@
1
- import { Q as storageCapability, at as BaseAddon, u as StorageLocationTypeSchema, wt as parseJsonObject } from "../../dist-Dycu89sF.mjs";
1
+ import { Q as storageCapability, at as BaseAddon, u as StorageLocationTypeSchema, wt as parseJsonObject } from "../../dist-BLNvh8Qy.mjs";
2
2
  import * as path$1 from "node:path";
3
3
  import * as fs from "node:fs/promises";
4
4
  import { buildStorageLocationRegistry } from "@camstack/system";
@@ -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-C0Pf5ShP.js");
6
+ const require_dist = require("../../dist-DP2SKMvU.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 { St as hydrateSchema, at as BaseAddon, it as errMsg } from "../../dist-Dycu89sF.mjs";
1
+ import { St as hydrateSchema, at as BaseAddon, it as errMsg } from "../../dist-BLNvh8Qy.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-C0Pf5ShP.js");
6
+ const require_dist = require("../../dist-DP2SKMvU.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 { R as logDestinationCapability, at as BaseAddon } from "../../dist-Dycu89sF.mjs";
1
+ import { R as logDestinationCapability, at as BaseAddon } from "../../dist-BLNvh8Qy.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";
@@ -8989,7 +8989,21 @@ var NativeCropResultSchema = z.object({
8989
8989
  /** Packed rgb (24-bit) pixels of the crop. */
8990
8990
  bytes: z.instanceof(Uint8Array),
8991
8991
  width: z.number().int().positive(),
8992
- height: z.number().int().positive()
8992
+ height: z.number().int().positive(),
8993
+ /**
8994
+ * Which source served this crop, so a quality-sensitive consumer (the native
8995
+ * `keyFrame`) can reject a degraded fallback:
8996
+ * - `native` — cut from the decode worker's retained NATIVE surface (the
8997
+ * quality path).
8998
+ * - `ram-fullframe` — the native surface MISSED but the request was full-frame,
8999
+ * so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
9000
+ * the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
9001
+ *
9002
+ * OPTIONAL: a pre-tier runner (version skew) omits it — an ABSENT `tier` MUST be
9003
+ * treated as `native` (accepted) by every consumer so mixed-version clusters
9004
+ * keep the pre-tier behaviour. An ROI miss returns `null` (no tier at all).
9005
+ */
9006
+ tier: z.enum(["native", "ram-fullframe"]).optional()
8993
9007
  });
8994
9008
  /** Parent detection context passed to `runDetailSubtree` — the crop's
8995
9009
  * originating detection, in FRAME-space coordinates. Reuses
@@ -9343,10 +9357,15 @@ var pipelineRunnerCapability = {
9343
9357
  * `FrameHandle` that rode an inference-result event and a normalized `bbox`,
9344
9358
  * the runner asks the decode worker still holding that frame's NATIVE
9345
9359
  * surface to GPU/CPU-crop ONLY the ROI at native res and download just the
9346
- * crop. Returns `null` on a miss (handle not registered, or the worker's
9347
- * tiny native-retention ring already evicted the frame) — the caller falls
9348
- * back to a detection-frame crop. Routed to the frame's owning node by
9349
- * `handle.nodeId`; NEVER ships a full native frame.
9360
+ * crop. Routed to the frame's owning node by `handle.nodeId`; NEVER ships a
9361
+ * full native frame.
9362
+ *
9363
+ * Miss behaviour differs by request shape (see `NativeCropResultSchema.tier`):
9364
+ * - an ROI (subject-crop) miss returns `null` — the caller reports the miss
9365
+ * and retries; it is NEVER handed a ≤640 crop masquerading as native.
9366
+ * - a FULL-FRAME miss falls back to the ≤640 RAM `RetainedFrameStore`, tagged
9367
+ * `tier: 'ram-fullframe'` (honest lower-res for the blank-frame guard /
9368
+ * 640-snapshot resolve). A native hit is tagged `tier: 'native'`.
9350
9369
  */
9351
9370
  getNativeCrop: method(z.object({
9352
9371
  handle: FrameHandleSchema,
@@ -14081,7 +14100,8 @@ var LinkedDeviceSchema = z.object({
14081
14100
  deviceId: z.number(),
14082
14101
  name: z.string(),
14083
14102
  location: z.string().nullable(),
14084
- features: z.array(z.string())
14103
+ features: z.array(z.string()),
14104
+ producesTrackedEvents: z.boolean().optional()
14085
14105
  });
14086
14106
  var SavedDeviceRowSchema = z.object({
14087
14107
  /** Numeric id reserved at allocateDeviceId time. */
@@ -16307,6 +16327,7 @@ var TrackSchema = z.object({
16307
16327
  deviceId: z.number(),
16308
16328
  className: z.string(),
16309
16329
  label: z.string().optional(),
16330
+ producingDeviceName: z.string().optional(),
16310
16331
  /** Track provenance. Absent ⇒ `pipeline` (legacy rows). */
16311
16332
  source: TrackSourceSchema.optional(),
16312
16333
  firstSeen: z.number(),
@@ -16444,7 +16465,8 @@ var MediaFileKindEnum = z.enum([
16444
16465
  "fullFrameBoxed",
16445
16466
  "faceCrop",
16446
16467
  "plateCrop",
16447
- "keyFrame"
16468
+ "keyFrame",
16469
+ "keyFrameSmall"
16448
16470
  ]);
16449
16471
  var MediaFileSchema = z.object({
16450
16472
  key: z.string(),
@@ -17653,14 +17675,13 @@ var pipelineOrchestratorCapability = {
17653
17675
  };
17654
17676
  /**
17655
17677
  * server-management — per-NODE singleton capability for a node's ROOT
17656
- * package lifecycle (runtime-updatable node packages, phase 2: hub + docker
17657
- * agents).
17678
+ * package lifecycle (runtime-updatable node packages).
17658
17679
  *
17659
- * Each node's root package (`@camstack/server` on the hub, `@camstack/agent`
17660
- * on agents) carries the whole software stack in its npm dep tree, so ONE
17661
- * version describes the node. Updates install into
17662
- * `<dataDir>/server-root/versions/<v>/` and apply on restart via the baked
17663
- * starter (probation boot + auto-rollback to N-1).
17680
+ * Every node role runs the SAME root package (`@camstack/server`), which
17681
+ * carries the whole software stack in its npm dep tree, so ONE version
17682
+ * describes the node. Updates stage into `<dataDir>/server-root/` and apply
17683
+ * on restart via the baked starter (single-copy in-place swap — no probation,
17684
+ * no auto-rollback).
17664
17685
  *
17665
17686
  * Providers:
17666
17687
  * - HUB: `ServerUpdateService` behind the `server-provided` mount
@@ -20701,10 +20722,10 @@ var TopologyCategorySchema = z.object({
20701
20722
  addons: z.array(TopologyCategoryAddonSchema).readonly()
20702
20723
  });
20703
20724
  /**
20704
- * The node's runtime-updatable ROOT package (`@camstack/server` on the hub,
20705
- * `@camstack/agent` on agents) as reported by its `registerNode` manifest —
20706
- * version visibility for the Server management surface. Nullable: offline
20707
- * rows and pre-phase-2 nodes report none.
20725
+ * The node's runtime-updatable ROOT package (`@camstack/server` the single
20726
+ * root package for every node role) as reported by its `registerNode`
20727
+ * manifest — version visibility for the Server management surface. Nullable:
20728
+ * offline rows and nodes that never reported one.
20708
20729
  */
20709
20730
  var TopologyRootPackageSchema = z.object({
20710
20731
  name: z.string(),
@@ -8989,7 +8989,21 @@ var NativeCropResultSchema = zod.z.object({
8989
8989
  /** Packed rgb (24-bit) pixels of the crop. */
8990
8990
  bytes: zod.z.instanceof(Uint8Array),
8991
8991
  width: zod.z.number().int().positive(),
8992
- height: zod.z.number().int().positive()
8992
+ height: zod.z.number().int().positive(),
8993
+ /**
8994
+ * Which source served this crop, so a quality-sensitive consumer (the native
8995
+ * `keyFrame`) can reject a degraded fallback:
8996
+ * - `native` — cut from the decode worker's retained NATIVE surface (the
8997
+ * quality path).
8998
+ * - `ram-fullframe` — the native surface MISSED but the request was full-frame,
8999
+ * so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
9000
+ * the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
9001
+ *
9002
+ * OPTIONAL: a pre-tier runner (version skew) omits it — an ABSENT `tier` MUST be
9003
+ * treated as `native` (accepted) by every consumer so mixed-version clusters
9004
+ * keep the pre-tier behaviour. An ROI miss returns `null` (no tier at all).
9005
+ */
9006
+ tier: zod.z.enum(["native", "ram-fullframe"]).optional()
8993
9007
  });
8994
9008
  /** Parent detection context passed to `runDetailSubtree` — the crop's
8995
9009
  * originating detection, in FRAME-space coordinates. Reuses
@@ -9343,10 +9357,15 @@ var pipelineRunnerCapability = {
9343
9357
  * `FrameHandle` that rode an inference-result event and a normalized `bbox`,
9344
9358
  * the runner asks the decode worker still holding that frame's NATIVE
9345
9359
  * surface to GPU/CPU-crop ONLY the ROI at native res and download just the
9346
- * crop. Returns `null` on a miss (handle not registered, or the worker's
9347
- * tiny native-retention ring already evicted the frame) — the caller falls
9348
- * back to a detection-frame crop. Routed to the frame's owning node by
9349
- * `handle.nodeId`; NEVER ships a full native frame.
9360
+ * crop. Routed to the frame's owning node by `handle.nodeId`; NEVER ships a
9361
+ * full native frame.
9362
+ *
9363
+ * Miss behaviour differs by request shape (see `NativeCropResultSchema.tier`):
9364
+ * - an ROI (subject-crop) miss returns `null` — the caller reports the miss
9365
+ * and retries; it is NEVER handed a ≤640 crop masquerading as native.
9366
+ * - a FULL-FRAME miss falls back to the ≤640 RAM `RetainedFrameStore`, tagged
9367
+ * `tier: 'ram-fullframe'` (honest lower-res for the blank-frame guard /
9368
+ * 640-snapshot resolve). A native hit is tagged `tier: 'native'`.
9350
9369
  */
9351
9370
  getNativeCrop: method(zod.z.object({
9352
9371
  handle: FrameHandleSchema,
@@ -14081,7 +14100,8 @@ var LinkedDeviceSchema = zod.z.object({
14081
14100
  deviceId: zod.z.number(),
14082
14101
  name: zod.z.string(),
14083
14102
  location: zod.z.string().nullable(),
14084
- features: zod.z.array(zod.z.string())
14103
+ features: zod.z.array(zod.z.string()),
14104
+ producesTrackedEvents: zod.z.boolean().optional()
14085
14105
  });
14086
14106
  var SavedDeviceRowSchema = zod.z.object({
14087
14107
  /** Numeric id reserved at allocateDeviceId time. */
@@ -16307,6 +16327,7 @@ var TrackSchema = zod.z.object({
16307
16327
  deviceId: zod.z.number(),
16308
16328
  className: zod.z.string(),
16309
16329
  label: zod.z.string().optional(),
16330
+ producingDeviceName: zod.z.string().optional(),
16310
16331
  /** Track provenance. Absent ⇒ `pipeline` (legacy rows). */
16311
16332
  source: TrackSourceSchema.optional(),
16312
16333
  firstSeen: zod.z.number(),
@@ -16444,7 +16465,8 @@ var MediaFileKindEnum = zod.z.enum([
16444
16465
  "fullFrameBoxed",
16445
16466
  "faceCrop",
16446
16467
  "plateCrop",
16447
- "keyFrame"
16468
+ "keyFrame",
16469
+ "keyFrameSmall"
16448
16470
  ]);
16449
16471
  var MediaFileSchema = zod.z.object({
16450
16472
  key: zod.z.string(),
@@ -17653,14 +17675,13 @@ var pipelineOrchestratorCapability = {
17653
17675
  };
17654
17676
  /**
17655
17677
  * server-management — per-NODE singleton capability for a node's ROOT
17656
- * package lifecycle (runtime-updatable node packages, phase 2: hub + docker
17657
- * agents).
17678
+ * package lifecycle (runtime-updatable node packages).
17658
17679
  *
17659
- * Each node's root package (`@camstack/server` on the hub, `@camstack/agent`
17660
- * on agents) carries the whole software stack in its npm dep tree, so ONE
17661
- * version describes the node. Updates install into
17662
- * `<dataDir>/server-root/versions/<v>/` and apply on restart via the baked
17663
- * starter (probation boot + auto-rollback to N-1).
17680
+ * Every node role runs the SAME root package (`@camstack/server`), which
17681
+ * carries the whole software stack in its npm dep tree, so ONE version
17682
+ * describes the node. Updates stage into `<dataDir>/server-root/` and apply
17683
+ * on restart via the baked starter (single-copy in-place swap — no probation,
17684
+ * no auto-rollback).
17664
17685
  *
17665
17686
  * Providers:
17666
17687
  * - HUB: `ServerUpdateService` behind the `server-provided` mount
@@ -20701,10 +20722,10 @@ var TopologyCategorySchema = zod.z.object({
20701
20722
  addons: zod.z.array(TopologyCategoryAddonSchema).readonly()
20702
20723
  });
20703
20724
  /**
20704
- * The node's runtime-updatable ROOT package (`@camstack/server` on the hub,
20705
- * `@camstack/agent` on agents) as reported by its `registerNode` manifest —
20706
- * version visibility for the Server management surface. Nullable: offline
20707
- * rows and pre-phase-2 nodes report none.
20725
+ * The node's runtime-updatable ROOT package (`@camstack/server` the single
20726
+ * root package for every node role) as reported by its `registerNode`
20727
+ * manifest — version visibility for the Server management surface. Nullable:
20728
+ * offline rows and nodes that never reported one.
20708
20729
  */
20709
20730
  var TopologyRootPackageSchema = zod.z.object({
20710
20731
  name: zod.z.string(),
package/dist/index.d.ts CHANGED
@@ -84,3 +84,4 @@ export { AddonApiFactory } from './addon/addon-api-factory.js';
84
84
  export type { DirectCallerOptions } from './addon/addon-api-factory.js';
85
85
  export { IntegrationRegistry } from './builtins/sqlite-storage/integration-registry.js';
86
86
  export * from './kernel/index.js';
87
+ export { runNpm, resolveNpmInvocation, type RunNpmOptions, type NpmInvocation, } from './kernel/deps/npm-command.js';
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("./chunk-Cek0wNdY.js");
3
- const require_dist = require("./dist-C0Pf5ShP.js");
3
+ const require_dist = require("./dist-DP2SKMvU.js");
4
4
  const require_model_download_service = require("./model-download-service-hf0ookyy.js");
5
- const require_manifest_python_deps = require("./manifest-python-deps-BRFns0U-.js");
5
+ const require_manifest_python_deps = require("./manifest-python-deps-DE8HxnIx.js");
6
6
  const require_resource_monitor = require("./resource-monitor-DNNomR-i.js");
7
7
  const require_builtins_sqlite_storage_filesystem_storage_addon = require("./builtins/sqlite-storage/filesystem-storage.addon.js");
8
8
  const require_builtins_sqlite_storage_sqlite_settings_addon = require("./builtins/sqlite-storage/sqlite-settings.addon.js");
@@ -3134,7 +3134,8 @@ var AddonInstaller = class AddonInstaller {
3134
3134
  const raw = node_fs.readFileSync(pkgPath, "utf-8");
3135
3135
  const parsed = JSON.parse(raw);
3136
3136
  const deps = Object.keys(parsed.dependencies ?? {});
3137
- return Object.freeze(deps.filter((name) => name.startsWith("@camstack/addon-") || name === "@camstack/system"));
3137
+ const agentOnly = new Set(parsed.camstack?.agentOnlyBootstrapAddons ?? []);
3138
+ return Object.freeze(deps.filter((name) => !agentOnly.has(name) && (name.startsWith("@camstack/addon-") || name === "@camstack/system")));
3138
3139
  }
3139
3140
  /**
3140
3141
  * Bootstrap packages installed on first boot — derived from the
@@ -3149,11 +3150,36 @@ var AddonInstaller = class AddonInstaller {
3149
3150
  */
3150
3151
  static REQUIRED_PACKAGES = AddonInstaller.deriveBootstrapList("@camstack/server");
3151
3152
  /**
3152
- * Agent-only bootstrap packages — derived from the `@camstack/agent`
3153
- * meta-package's runtime dependencies. Adding an agent bootstrap addon
3154
- * = adding it to `packages/agent/package.json`.
3155
- */
3156
- static AGENT_PACKAGES = AddonInstaller.deriveBootstrapList("@camstack/agent");
3153
+ * Agent-only bootstrap packages — derived from the `@camstack/server`
3154
+ * meta-package's `camstack.agentBootstrapAddons` manifest field (single
3155
+ * source of truth; the separate agent meta-package is gone).
3156
+ * The agent runtime boots from the SAME `@camstack/server` closure, so its
3157
+ * bootstrap addon set is declared alongside the hub's. Adding an agent
3158
+ * bootstrap addon = adding it to `server/backend/package.json`'s
3159
+ * `camstack.agentBootstrapAddons`.
3160
+ */
3161
+ static AGENT_PACKAGES = AddonInstaller.deriveAgentBootstrapList("@camstack/server");
3162
+ /**
3163
+ * Derive the agent bootstrap addon list from a meta-package's
3164
+ * `camstack.agentBootstrapAddons` manifest field, prepending
3165
+ * `@camstack/system` (the required infrastructure builtins carrier — same
3166
+ * rationale as `deriveBootstrapList`). Mirrors `deriveBootstrapList`'s
3167
+ * `require.resolve` nuance: the meta-package may be absent in a deployment
3168
+ * (this field is eagerly evaluated at class-load), so a failed resolve
3169
+ * yields an empty list rather than throwing.
3170
+ */
3171
+ static deriveAgentBootstrapList(metaPackageName) {
3172
+ const pkgJsonId = `${metaPackageName}/package.json`;
3173
+ let pkgPath;
3174
+ try {
3175
+ pkgPath = require.resolve(pkgJsonId);
3176
+ } catch {
3177
+ return Object.freeze([]);
3178
+ }
3179
+ const raw = node_fs.readFileSync(pkgPath, "utf-8");
3180
+ const addons = JSON.parse(raw).camstack?.agentBootstrapAddons ?? [];
3181
+ return Object.freeze(["@camstack/system", ...addons]);
3182
+ }
3157
3183
  /**
3158
3184
  * Ensure all required packages are installed in the addons directory.
3159
3185
  *
@@ -93502,6 +93528,7 @@ exports.capBareAction = require_manifest_python_deps.capBareAction;
93502
93528
  exports.capServiceName = require_manifest_python_deps.capServiceName;
93503
93529
  exports.classifyCapRoute = require_manifest_python_deps.classifyCapRoute;
93504
93530
  exports.clearPendingRestart = clearPendingRestart;
93531
+ exports.clusterEventTopic = require_manifest_python_deps.clusterEventTopic;
93505
93532
  exports.clusterSecretMatches = clusterSecretMatches;
93506
93533
  exports.collectModelFiles = require_model_download_service.collectModelFiles;
93507
93534
  exports.contentTypeFor = require_model_download_service.contentTypeFor;
@@ -93641,6 +93668,8 @@ exports.readinessKey = require_dist.readinessKey;
93641
93668
  exports.registerEventBusService = require_manifest_python_deps.registerEventBusService;
93642
93669
  exports.resolveFilePath = require_model_download_service.resolveFilePath;
93643
93670
  exports.resolveHwAccel = require_manifest_python_deps.resolveHwAccel;
93671
+ exports.resolveNpmInvocation = require_manifest_python_deps.resolveNpmInvocation;
93672
+ exports.runNpm = require_manifest_python_deps.runNpm;
93644
93673
  exports.scheduleSelfRestart = scheduleSelfRestart;
93645
93674
  exports.scopeKey = require_dist.scopeKey;
93646
93675
  exports.scopesAllowDeviceCap = scopesAllowDeviceCap;
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import { At as EventCategory$1, Dt as resolveCapMount, Et as readinessKey, F as kebabToCamel, I as lifecycleJobSchema, K as procedureAuthKey, M as isCollectionArrayMethod, N as isObjectInput, O as extractNestedAddonId, Ot as scopeKey, P as isVoidInput, Tt as parseJsonUnknown$1, U as objectInputDeclaresAddonId, _t as asString$1, ct as DEVICE_STATUS_METHOD, ft as ReadinessRegistry, gt as asNumber, ht as asJsonObject$1, it as errMsg$1, j as isArrayOutputSchema, o as METHOD_ACCESS_MAP, ot as DATAPLANE_SECRET_HEADER$1, p as addonSettingsCapability, pt as ReadinessTimeoutError, s as RUNTIME_DEFAULTS, st as DEVICE_SETTINGS_CONTRIBUTION_METHODS, t as ALL_CAPABILITY_DEFINITIONS, vt as createEvent, wt as parseJsonObject, xt as expandCapMethods, yt as emitDownForOwnedCaps, z as looseSchema } from "./dist-Dycu89sF.mjs";
1
+ import { At as EventCategory$1, Dt as resolveCapMount, Et as readinessKey, F as kebabToCamel, I as lifecycleJobSchema, K as procedureAuthKey, M as isCollectionArrayMethod, N as isObjectInput, O as extractNestedAddonId, Ot as scopeKey, P as isVoidInput, Tt as parseJsonUnknown$1, U as objectInputDeclaresAddonId, _t as asString$1, ct as DEVICE_STATUS_METHOD, ft as ReadinessRegistry, gt as asNumber, ht as asJsonObject$1, it as errMsg$1, j as isArrayOutputSchema, o as METHOD_ACCESS_MAP, ot as DATAPLANE_SECRET_HEADER$1, p as addonSettingsCapability, pt as ReadinessTimeoutError, s as RUNTIME_DEFAULTS, st as DEVICE_SETTINGS_CONTRIBUTION_METHODS, t as ALL_CAPABILITY_DEFINITIONS, vt as createEvent, wt as parseJsonObject, xt as expandCapMethods, yt as emitDownForOwnedCaps, z as looseSchema } from "./dist-BLNvh8Qy.mjs";
2
2
  import { a as downloadModel, c as getModelFilePath, d as contentTypeFor, f as createAuthenticatedFileServer, h as resolveFilePath, i as downloadFile, l as isModelDownloaded, m as parseTokenizedUrl, n as collectModelFiles, o as ensureModel, p as parseRangeHeader, r as deleteModelFromDisk, s as fetchJson, t as ModelDownloadService, u as createFileDataPlaneHandler } from "./model-download-service-Cp9f4dk6.mjs";
3
- import { $ as buildUdsNativeCapProxy, A as createParentUnownedCallHandler, B as AGENT_CAP_FWD_SERVICE, C as buildLinkChain, D as HUB_CAP_FWD_ACTION, E as localProviderLink, F as createUdsLoggerWithControl, G as createLocalTransport, H as CapRouteError, I as LocalChildClient, J as SocketChannel, K as UdsLocalTransportClient, L as LocalChildRegistry, M as createUdsEventBus, N as udsChildLogToWorkerEntry, O as HUB_CAP_FWD_SERVICE, P as createUdsLogger, Q as buildNativeCapProxy, R as UDS_NO_ROUTE_PREFIX, S as brokerTransportLink, T as ipcParentLink, U as classifyCapRoute, V as CapRouteResolver, W as callWithServiceDiscovery, X as FrameDecoder, Y as localEndpointPath, Z as encodeFrame, _ as resolveHwAccel, _t as CapabilityUnavailableError, a as getWorkerDeviceRegistry, at as createAddonService, b as getCapUsageRegistry, bt as resolveAddonClass, c as setHubConnected, ct as capActionName, d as getMoleculerEventStats, dt as capServiceName, et as createBrokerDeviceManagerApi, f as registerEventBusService, ft as parseCapAction, g as createKernelHwAccel, gt as CapabilityHandle, h as AddonDepsManager, ht as DeviceRegistry, i as createUdsAddonContext, j as createUdsEventBridge, k as createHubCapForwardService, l as EVENT_TOPIC_PREFIX, lt as capActionSuffix, m as subscribePassthrough, mt as serializeTypedArrays, n as adaptBrokerToCluster, o as getOrInitReadinessRegistry, ot as validateProviderRegistrations, p as setNodeEventInterest, pt as deserializeTypedArrays, q as UdsLocalTransportServer, r as createAddonContext, rt as mountNativeCapService, s as getOrInitReadinessRegistryForClient, st as NATIVE_PROVIDER_SERVICE_INFIX, t as installManifestPythonDeps, u as getBrokerEventBus, ut as capBareAction, v as CapUsageRegistry, vt as installManifestNativeDeps, w as ipcChildLink, x as brokerCallForCap, xt as createAddonDataPlaneFacility, y as __resetCapUsageRegistryForTests, yt as runNpm, z as AGENT_CAP_FWD_ACTION } from "./manifest-python-deps-BiM1uDhe.mjs";
3
+ import { $ as buildNativeCapProxy, A as createHubCapForwardService, B as AGENT_CAP_FWD_ACTION, C as brokerTransportLink, Ct as createAddonDataPlaneFacility, D as localProviderLink, E as ipcParentLink, F as createUdsLogger, G as callWithServiceDiscovery, H as CapRouteResolver, I as createUdsLoggerWithControl, J as UdsLocalTransportServer, K as createLocalTransport, L as LocalChildClient, M as createUdsEventBridge, N as createUdsEventBus, O as HUB_CAP_FWD_ACTION, P as udsChildLogToWorkerEntry, Q as encodeFrame, R as LocalChildRegistry, S as brokerCallForCap, St as resolveAddonClass, T as ipcChildLink, U as CapRouteError, V as AGENT_CAP_FWD_SERVICE, W as classifyCapRoute, X as localEndpointPath, Y as SocketChannel, Z as FrameDecoder, _ as createKernelHwAccel, _t as CapabilityHandle, a as getWorkerDeviceRegistry, b as __resetCapUsageRegistryForTests, bt as resolveNpmInvocation, c as setHubConnected, ct as NATIVE_PROVIDER_SERVICE_INFIX, d as getBrokerEventBus, dt as capBareAction, et as buildUdsNativeCapProxy, f as getMoleculerEventStats, ft as capServiceName, g as AddonDepsManager, gt as DeviceRegistry, h as subscribePassthrough, ht as serializeTypedArrays, i as createUdsAddonContext, it as mountNativeCapService, j as createParentUnownedCallHandler, k as HUB_CAP_FWD_SERVICE, l as EVENT_TOPIC_PREFIX, lt as capActionName, m as setNodeEventInterest, mt as deserializeTypedArrays, n as adaptBrokerToCluster, o as getOrInitReadinessRegistry, ot as createAddonService, p as registerEventBusService, pt as parseCapAction, q as UdsLocalTransportClient, r as createAddonContext, s as getOrInitReadinessRegistryForClient, st as validateProviderRegistrations, t as installManifestPythonDeps, tt as createBrokerDeviceManagerApi, u as clusterEventTopic, ut as capActionSuffix, v as resolveHwAccel, vt as CapabilityUnavailableError, w as buildLinkChain, x as getCapUsageRegistry, xt as runNpm, y as CapUsageRegistry, yt as installManifestNativeDeps, z as UDS_NO_ROUTE_PREFIX } from "./manifest-python-deps-Co8MTPdy.mjs";
4
4
  import { n as getSinglePidStats, t as getPidStats } from "./resource-monitor-Le3l0qS2.mjs";
5
5
  import { FilesystemStorageAddon, t as FilesystemStorageProvider } from "./builtins/sqlite-storage/filesystem-storage.addon.mjs";
6
6
  import { SqliteSettingsAddon, t as SqliteSettingsBackend } from "./builtins/sqlite-storage/sqlite-settings.addon.mjs";
@@ -3126,7 +3126,8 @@ var AddonInstaller = class AddonInstaller {
3126
3126
  const raw = fs$17.readFileSync(pkgPath, "utf-8");
3127
3127
  const parsed = JSON.parse(raw);
3128
3128
  const deps = Object.keys(parsed.dependencies ?? {});
3129
- return Object.freeze(deps.filter((name) => name.startsWith("@camstack/addon-") || name === "@camstack/system"));
3129
+ const agentOnly = new Set(parsed.camstack?.agentOnlyBootstrapAddons ?? []);
3130
+ return Object.freeze(deps.filter((name) => !agentOnly.has(name) && (name.startsWith("@camstack/addon-") || name === "@camstack/system")));
3130
3131
  }
3131
3132
  /**
3132
3133
  * Bootstrap packages installed on first boot — derived from the
@@ -3141,11 +3142,36 @@ var AddonInstaller = class AddonInstaller {
3141
3142
  */
3142
3143
  static REQUIRED_PACKAGES = AddonInstaller.deriveBootstrapList("@camstack/server");
3143
3144
  /**
3144
- * Agent-only bootstrap packages — derived from the `@camstack/agent`
3145
- * meta-package's runtime dependencies. Adding an agent bootstrap addon
3146
- * = adding it to `packages/agent/package.json`.
3147
- */
3148
- static AGENT_PACKAGES = AddonInstaller.deriveBootstrapList("@camstack/agent");
3145
+ * Agent-only bootstrap packages — derived from the `@camstack/server`
3146
+ * meta-package's `camstack.agentBootstrapAddons` manifest field (single
3147
+ * source of truth; the separate agent meta-package is gone).
3148
+ * The agent runtime boots from the SAME `@camstack/server` closure, so its
3149
+ * bootstrap addon set is declared alongside the hub's. Adding an agent
3150
+ * bootstrap addon = adding it to `server/backend/package.json`'s
3151
+ * `camstack.agentBootstrapAddons`.
3152
+ */
3153
+ static AGENT_PACKAGES = AddonInstaller.deriveAgentBootstrapList("@camstack/server");
3154
+ /**
3155
+ * Derive the agent bootstrap addon list from a meta-package's
3156
+ * `camstack.agentBootstrapAddons` manifest field, prepending
3157
+ * `@camstack/system` (the required infrastructure builtins carrier — same
3158
+ * rationale as `deriveBootstrapList`). Mirrors `deriveBootstrapList`'s
3159
+ * `require.resolve` nuance: the meta-package may be absent in a deployment
3160
+ * (this field is eagerly evaluated at class-load), so a failed resolve
3161
+ * yields an empty list rather than throwing.
3162
+ */
3163
+ static deriveAgentBootstrapList(metaPackageName) {
3164
+ const pkgJsonId = `${metaPackageName}/package.json`;
3165
+ let pkgPath;
3166
+ try {
3167
+ pkgPath = __require.resolve(pkgJsonId);
3168
+ } catch {
3169
+ return Object.freeze([]);
3170
+ }
3171
+ const raw = fs$17.readFileSync(pkgPath, "utf-8");
3172
+ const addons = JSON.parse(raw).camstack?.agentBootstrapAddons ?? [];
3173
+ return Object.freeze(["@camstack/system", ...addons]);
3174
+ }
3149
3175
  /**
3150
3176
  * Ensure all required packages are installed in the addons directory.
3151
3177
  *
@@ -93363,4 +93389,4 @@ var LifecycleJobEngine = class {
93363
93389
  }
93364
93390
  };
93365
93391
  //#endregion
93366
- export { AGENT_CAP_FWD_ACTION, AGENT_CAP_FWD_SERVICE, AGENT_READINESS_SERVICE_NAME, ALL_CAPABILITY_DEFINITIONS, AddonApiFactory, AddonDepsManager, AddonEngineManager, AddonHealthMonitor, AddonInstaller, AddonLoader, AddonManifest, AddonRouteRegistry, AlertCenterAddon, ApiKeyManager, AuthManager, CLUSTER_SECRET_MISMATCH_TYPE, CLUSTER_SECRET_REJECTED_EXIT_CODE, CORE_CAP_SERVICE_NAME, CapRouteError, CapRouteResolver, CapUsageRegistry, CapabilityHandle, CapabilityRegistry, CapabilityUnavailableError, ConfigManager, ConfigStore, ConsoleDestination, ConsoleLoggingAddon, CustomActionRegistry, DEFAULT_DATA_PATH, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, DataPlaneRegistry, DeviceManagerAddon, DeviceRegistry, DeviceStore, EVENT_TOPIC_PREFIX, EngineManagerResolver, EventBus, FeatureManager, FilesystemStorageAddon, FilesystemStorageProvider, FrameDecoder, FsStorageBackend, HEALTH_MONITOR_GRACE_PERIOD_MS, HEALTH_MONITOR_RETRY_INTERVALS_MS, HEALTH_MONITOR_TICK_MS, HUB_CAP_FWD_ACTION, HUB_CAP_FWD_SERVICE, HubForwarderAddon, HubForwarderDestination, HubLogForwarder, HubNodeRegistry, INFRA_CAPABILITIES, IntegrationRegistry, JobJournal, LifecycleJobEngine, LifecycleStateMachine, LocalAuthAddon, LocalChildClient, LocalChildRegistry, LogManager, LogRingBuffer, METHOD_ACCESS_MAP, ModelDownloadService, NATIVE_PROVIDER_SERVICE_INFIX, NativeMetricsAddon, NativeMetricsProvider, NetworkQualityTracker, NotificationService, PYTHON_VERSION, PipelineRunner, PipelineValidator, PythonEnvManager, RESTART_MARKER_FILE, RUNTIME_DEFAULTS, ReadinessRegistry, ReadinessTimeoutError, ReplEngine, RingBuffer, ScopedLogger, ScopedTokenManager, SocketChannel, SqliteSettingsAddon, SqliteSettingsBackend, StagingArea, StorageLocationManager, StorageManager, StorageOrchestratorAddon, StorageOrchestratorService, SystemConfigAddon, SystemEventBus, ToastService, UDS_NO_ROUTE_PREFIX, UdsLocalTransportClient, UdsLocalTransportServer, UserManager, WinstonDestination, WinstonLoggingAddon, __resetCapUsageRegistryForTests, adaptBrokerToCluster, addonSettingsCapability, bootstrapSchema, brokerCallForCap, brokerTransportLink, buildBinaryPath, buildCapRouters, buildLinkChain, buildNativeCapProxy, buildNodeManifest, buildStorageLocationRegistry, buildUdsNativeCapProxy, builderMountedCapNames, callRegisterNodeWithRetry, callWithServiceDiscovery, capActionName, capActionSuffix, capBareAction, capServiceName, classifyCapRoute, clearPendingRestart, clusterSecretMatches, collectModelFiles, contentTypeFor, copyDirRecursive, copyExtraFileDirs, createAddonContext, createAddonDataPlaneFacility, createAddonService, createAuthenticatedFileServer, createBroker, createBrokerDeviceManagerApi, createCoreCapService, createFileDataPlaneHandler, createHubCapForwardService, createHubService, createKernelHwAccel, createLocalTransport, createParentUnownedCallHandler, createProcessService, createReadinessService, createReadinessServiceForRegistry, createScopedProcessManager, createStreamProbeBrokerService, createUdsAddonContext, createUdsEventBridge, createUdsEventBus, createUdsLogger, createUdsLoggerWithControl, deleteModelFromDisk, deriveAgentListenPort, describeProviderKindDrift, detectWorkspacePackagesDir, downloadBinary, downloadFile, downloadModel, emitDownForOwnedCaps, encodeFrame, ensureBinary, ensureDir, ensureFfmpeg, ensureLibraryBuilt, ensureModel, ensurePython, ensureTlsCert, expandCapMethods, fetchJson, findInPath, formatLogLine, getBrokerEventBus, getCapUsageRegistry, getFfmpegDownloadUrl, getModelFilePath, getMoleculerEventStats, getOrInitReadinessRegistry, getOrInitReadinessRegistryForClient, getPidStats, getPlatformInfo, getPythonDownloadUrl, getRestartMarkerPath, getSinglePidStats, getWorkerDeviceRegistry, hashClusterSecret, installManifestNativeDeps, installManifestPythonDeps, installPackageFromNpm, installPythonPackages, installPythonRequirements, ipcChildLink, ipcParentLink, isAddonDeploySource, isArrayOutputSchema, isClusterSecretMismatchError, isCollectionArrayMethod, isInfraCapability, isModelDownloaded, isSourceNewer, loadTlsCert, localEndpointPath, localProviderLink, mountNativeCapService, parseCapAction, parseRangeHeader, parseTokenizedUrl, proxyToUpstream, readPendingRestart, readinessKey, registerEventBusService, resolveFilePath, resolveHwAccel, scheduleSelfRestart, scopeKey, scopesAllowDeviceCap, serializeTypedArrays, setHubConnected, setNodeEventInterest, stripCamstackDeps, subscribePassthrough, udsChildLogToWorkerEntry, validateProviderRegistrations, writePendingRestart };
93392
+ export { AGENT_CAP_FWD_ACTION, AGENT_CAP_FWD_SERVICE, AGENT_READINESS_SERVICE_NAME, ALL_CAPABILITY_DEFINITIONS, AddonApiFactory, AddonDepsManager, AddonEngineManager, AddonHealthMonitor, AddonInstaller, AddonLoader, AddonManifest, AddonRouteRegistry, AlertCenterAddon, ApiKeyManager, AuthManager, CLUSTER_SECRET_MISMATCH_TYPE, CLUSTER_SECRET_REJECTED_EXIT_CODE, CORE_CAP_SERVICE_NAME, CapRouteError, CapRouteResolver, CapUsageRegistry, CapabilityHandle, CapabilityRegistry, CapabilityUnavailableError, ConfigManager, ConfigStore, ConsoleDestination, ConsoleLoggingAddon, CustomActionRegistry, DEFAULT_DATA_PATH, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, DataPlaneRegistry, DeviceManagerAddon, DeviceRegistry, DeviceStore, EVENT_TOPIC_PREFIX, EngineManagerResolver, EventBus, FeatureManager, FilesystemStorageAddon, FilesystemStorageProvider, FrameDecoder, FsStorageBackend, HEALTH_MONITOR_GRACE_PERIOD_MS, HEALTH_MONITOR_RETRY_INTERVALS_MS, HEALTH_MONITOR_TICK_MS, HUB_CAP_FWD_ACTION, HUB_CAP_FWD_SERVICE, HubForwarderAddon, HubForwarderDestination, HubLogForwarder, HubNodeRegistry, INFRA_CAPABILITIES, IntegrationRegistry, JobJournal, LifecycleJobEngine, LifecycleStateMachine, LocalAuthAddon, LocalChildClient, LocalChildRegistry, LogManager, LogRingBuffer, METHOD_ACCESS_MAP, ModelDownloadService, NATIVE_PROVIDER_SERVICE_INFIX, NativeMetricsAddon, NativeMetricsProvider, NetworkQualityTracker, NotificationService, PYTHON_VERSION, PipelineRunner, PipelineValidator, PythonEnvManager, RESTART_MARKER_FILE, RUNTIME_DEFAULTS, ReadinessRegistry, ReadinessTimeoutError, ReplEngine, RingBuffer, ScopedLogger, ScopedTokenManager, SocketChannel, SqliteSettingsAddon, SqliteSettingsBackend, StagingArea, StorageLocationManager, StorageManager, StorageOrchestratorAddon, StorageOrchestratorService, SystemConfigAddon, SystemEventBus, ToastService, UDS_NO_ROUTE_PREFIX, UdsLocalTransportClient, UdsLocalTransportServer, UserManager, WinstonDestination, WinstonLoggingAddon, __resetCapUsageRegistryForTests, adaptBrokerToCluster, addonSettingsCapability, bootstrapSchema, brokerCallForCap, brokerTransportLink, buildBinaryPath, buildCapRouters, buildLinkChain, buildNativeCapProxy, buildNodeManifest, buildStorageLocationRegistry, buildUdsNativeCapProxy, builderMountedCapNames, callRegisterNodeWithRetry, callWithServiceDiscovery, capActionName, capActionSuffix, capBareAction, capServiceName, classifyCapRoute, clearPendingRestart, clusterEventTopic, clusterSecretMatches, collectModelFiles, contentTypeFor, copyDirRecursive, copyExtraFileDirs, createAddonContext, createAddonDataPlaneFacility, createAddonService, createAuthenticatedFileServer, createBroker, createBrokerDeviceManagerApi, createCoreCapService, createFileDataPlaneHandler, createHubCapForwardService, createHubService, createKernelHwAccel, createLocalTransport, createParentUnownedCallHandler, createProcessService, createReadinessService, createReadinessServiceForRegistry, createScopedProcessManager, createStreamProbeBrokerService, createUdsAddonContext, createUdsEventBridge, createUdsEventBus, createUdsLogger, createUdsLoggerWithControl, deleteModelFromDisk, deriveAgentListenPort, describeProviderKindDrift, detectWorkspacePackagesDir, downloadBinary, downloadFile, downloadModel, emitDownForOwnedCaps, encodeFrame, ensureBinary, ensureDir, ensureFfmpeg, ensureLibraryBuilt, ensureModel, ensurePython, ensureTlsCert, expandCapMethods, fetchJson, findInPath, formatLogLine, getBrokerEventBus, getCapUsageRegistry, getFfmpegDownloadUrl, getModelFilePath, getMoleculerEventStats, getOrInitReadinessRegistry, getOrInitReadinessRegistryForClient, getPidStats, getPlatformInfo, getPythonDownloadUrl, getRestartMarkerPath, getSinglePidStats, getWorkerDeviceRegistry, hashClusterSecret, installManifestNativeDeps, installManifestPythonDeps, installPackageFromNpm, installPythonPackages, installPythonRequirements, ipcChildLink, ipcParentLink, isAddonDeploySource, isArrayOutputSchema, isClusterSecretMismatchError, isCollectionArrayMethod, isInfraCapability, isModelDownloaded, isSourceNewer, loadTlsCert, localEndpointPath, localProviderLink, mountNativeCapService, parseCapAction, parseRangeHeader, parseTokenizedUrl, proxyToUpstream, readPendingRestart, readinessKey, registerEventBusService, resolveFilePath, resolveHwAccel, resolveNpmInvocation, runNpm, scheduleSelfRestart, scopeKey, scopesAllowDeviceCap, serializeTypedArrays, setHubConnected, setNodeEventInterest, stripCamstackDeps, subscribePassthrough, udsChildLogToWorkerEntry, validateProviderRegistrations, writePendingRestart };
@@ -78,11 +78,25 @@ export declare class AddonInstaller {
78
78
  */
79
79
  static readonly REQUIRED_PACKAGES: readonly string[];
80
80
  /**
81
- * Agent-only bootstrap packages — derived from the `@camstack/agent`
82
- * meta-package's runtime dependencies. Adding an agent bootstrap addon
83
- * = adding it to `packages/agent/package.json`.
81
+ * Agent-only bootstrap packages — derived from the `@camstack/server`
82
+ * meta-package's `camstack.agentBootstrapAddons` manifest field (single
83
+ * source of truth; the separate agent meta-package is gone).
84
+ * The agent runtime boots from the SAME `@camstack/server` closure, so its
85
+ * bootstrap addon set is declared alongside the hub's. Adding an agent
86
+ * bootstrap addon = adding it to `server/backend/package.json`'s
87
+ * `camstack.agentBootstrapAddons`.
84
88
  */
85
89
  static readonly AGENT_PACKAGES: readonly string[];
90
+ /**
91
+ * Derive the agent bootstrap addon list from a meta-package's
92
+ * `camstack.agentBootstrapAddons` manifest field, prepending
93
+ * `@camstack/system` (the required infrastructure builtins carrier — same
94
+ * rationale as `deriveBootstrapList`). Mirrors `deriveBootstrapList`'s
95
+ * `require.resolve` nuance: the meta-package may be absent in a deployment
96
+ * (this field is eagerly evaluated at class-load), so a failed resolve
97
+ * yields an empty list rather than throwing.
98
+ */
99
+ private static deriveAgentBootstrapList;
86
100
  /**
87
101
  * Ensure all required packages are installed in the addons directory.
88
102
  *
@@ -33,7 +33,7 @@ export { type AddonDeploySource, isAddonDeploySource } from './moleculer/addon-d
33
33
  export { createAddonService, validateProviderRegistrations, } from './moleculer/addon-service-factory.js';
34
34
  export { createCoreCapService, CORE_CAP_SERVICE_NAME } from './moleculer/core-cap-service.js';
35
35
  export type { CoreCapAction, CoreCapServiceOptions } from './moleculer/core-cap-service.js';
36
- export { createAddonContext, createUdsAddonContext, setHubConnected, adaptBrokerToCluster, registerEventBusService, setNodeEventInterest, getMoleculerEventStats, subscribePassthrough, getBrokerEventBus, EVENT_TOPIC_PREFIX, } from './moleculer/addon-context-factory.js';
36
+ export { createAddonContext, createUdsAddonContext, setHubConnected, adaptBrokerToCluster, registerEventBusService, setNodeEventInterest, getMoleculerEventStats, subscribePassthrough, getBrokerEventBus, clusterEventTopic, EVENT_TOPIC_PREFIX, } from './moleculer/addon-context-factory.js';
37
37
  export type { MoleculerEventStats } from './moleculer/addon-context-factory.js';
38
38
  export { HubLogForwarder } from './moleculer/hub-log-forwarder.js';
39
39
  export type { AddonContextOptions } from './moleculer/addon-context-factory.js';
@@ -33,8 +33,8 @@ interface RegisteredNativeCap {
33
33
  readonly deviceIds: readonly number[];
34
34
  }
35
35
  /**
36
- * A node's runtime-updatable ROOT package identity (`@camstack/server` on
37
- * the hub, `@camstack/agent` on agents) — carried in the `registerNode`
36
+ * A node's runtime-updatable ROOT package identity (`@camstack/server` — the
37
+ * single root package for every node role) — carried in the `registerNode`
38
38
  * manifest so the hub knows every node's exact software version (design:
39
39
  * runtime-updatable node packages, "visibility"). Version skew is SEEN in
40
40
  * the UI instead of discovered via a black-hole.
@@ -1,4 +1,4 @@
1
- import { q as readNodePin } from "./dist-Dycu89sF.mjs";
1
+ import { q as readNodePin } from "./dist-BLNvh8Qy.mjs";
2
2
  import { ensureBinary, ensureFfmpeg, ensurePython, installPythonPackages, installPythonRequirements } from "@camstack/types/node";
3
3
  import { createServer } from "node:http";
4
4
  import * as fs from "node:fs";
@@ -7320,4 +7320,4 @@ async function installManifestPythonDeps(declaration, addonDir, deps, logger) {
7320
7320
  await deps.installPythonRequirements(reqAbs);
7321
7321
  }
7322
7322
  //#endregion
7323
- export { buildUdsNativeCapProxy as $, createParentUnownedCallHandler as A, AGENT_CAP_FWD_SERVICE as B, buildLinkChain as C, HUB_CAP_FWD_ACTION as D, localProviderLink as E, createUdsLoggerWithControl as F, createLocalTransport as G, CapRouteError as H, LocalChildClient as I, SocketChannel as J, UdsLocalTransportClient as K, LocalChildRegistry as L, createUdsEventBus as M, udsChildLogToWorkerEntry as N, HUB_CAP_FWD_SERVICE as O, createUdsLogger as P, buildNativeCapProxy as Q, UDS_NO_ROUTE_PREFIX as R, brokerTransportLink as S, ipcParentLink as T, classifyCapRoute as U, CapRouteResolver as V, callWithServiceDiscovery as W, FrameDecoder as X, localEndpointPath as Y, encodeFrame as Z, resolveHwAccel as _, CapabilityUnavailableError as _t, getWorkerDeviceRegistry as a, createAddonService as at, getCapUsageRegistry as b, resolveAddonClass as bt, setHubConnected as c, capActionName as ct, getMoleculerEventStats as d, capServiceName as dt, createBrokerDeviceManagerApi as et, registerEventBusService as f, parseCapAction as ft, createKernelHwAccel as g, CapabilityHandle as gt, AddonDepsManager as h, DeviceRegistry as ht, createUdsAddonContext as i, setWorkerNativeCapsChangeListener as it, createUdsEventBridge as j, createHubCapForwardService as k, EVENT_TOPIC_PREFIX as l, capActionSuffix as lt, subscribePassthrough as m, serializeTypedArrays as mt, adaptBrokerToCluster as n, getWorkerNativeCapSnapshot as nt, getOrInitReadinessRegistry as o, validateProviderRegistrations as ot, setNodeEventInterest as p, deserializeTypedArrays as pt, UdsLocalTransportServer as q, createAddonContext as r, mountNativeCapService as rt, getOrInitReadinessRegistryForClient as s, NATIVE_PROVIDER_SERVICE_INFIX as st, installManifestPythonDeps as t, getWorkerNativeCapProvider as tt, getBrokerEventBus as u, capBareAction as ut, CapUsageRegistry as v, installManifestNativeDeps as vt, ipcChildLink as w, brokerCallForCap as x, createAddonDataPlaneFacility as xt, __resetCapUsageRegistryForTests as y, runNpm as yt, AGENT_CAP_FWD_ACTION as z };
7323
+ export { buildNativeCapProxy as $, createHubCapForwardService as A, AGENT_CAP_FWD_ACTION as B, brokerTransportLink as C, createAddonDataPlaneFacility as Ct, localProviderLink as D, ipcParentLink as E, createUdsLogger as F, callWithServiceDiscovery as G, CapRouteResolver as H, createUdsLoggerWithControl as I, UdsLocalTransportServer as J, createLocalTransport as K, LocalChildClient as L, createUdsEventBridge as M, createUdsEventBus as N, HUB_CAP_FWD_ACTION as O, udsChildLogToWorkerEntry as P, encodeFrame as Q, LocalChildRegistry as R, brokerCallForCap as S, resolveAddonClass as St, ipcChildLink as T, CapRouteError as U, AGENT_CAP_FWD_SERVICE as V, classifyCapRoute as W, localEndpointPath as X, SocketChannel as Y, FrameDecoder as Z, createKernelHwAccel as _, CapabilityHandle as _t, getWorkerDeviceRegistry as a, setWorkerNativeCapsChangeListener as at, __resetCapUsageRegistryForTests as b, resolveNpmInvocation as bt, setHubConnected as c, NATIVE_PROVIDER_SERVICE_INFIX as ct, getBrokerEventBus as d, capBareAction as dt, buildUdsNativeCapProxy as et, getMoleculerEventStats as f, capServiceName as ft, AddonDepsManager as g, DeviceRegistry as gt, subscribePassthrough as h, serializeTypedArrays as ht, createUdsAddonContext as i, mountNativeCapService as it, createParentUnownedCallHandler as j, HUB_CAP_FWD_SERVICE as k, EVENT_TOPIC_PREFIX as l, capActionName as lt, setNodeEventInterest as m, deserializeTypedArrays as mt, adaptBrokerToCluster as n, getWorkerNativeCapProvider as nt, getOrInitReadinessRegistry as o, createAddonService as ot, registerEventBusService as p, parseCapAction as pt, UdsLocalTransportClient as q, createAddonContext as r, getWorkerNativeCapSnapshot as rt, getOrInitReadinessRegistryForClient as s, validateProviderRegistrations as st, installManifestPythonDeps as t, createBrokerDeviceManagerApi as tt, clusterEventTopic as u, capActionSuffix as ut, resolveHwAccel as v, CapabilityUnavailableError as vt, buildLinkChain as w, getCapUsageRegistry as x, runNpm as xt, CapUsageRegistry as y, installManifestNativeDeps as yt, UDS_NO_ROUTE_PREFIX as z };
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_dist = require("./dist-C0Pf5ShP.js");
2
+ const require_dist = require("./dist-DP2SKMvU.js");
3
3
  let _camstack_types_node = require("@camstack/types/node");
4
4
  let node_http = require("node:http");
5
5
  let node_fs = require("node:fs");
@@ -7520,6 +7520,12 @@ Object.defineProperty(exports, "classifyCapRoute", {
7520
7520
  return classifyCapRoute;
7521
7521
  }
7522
7522
  });
7523
+ Object.defineProperty(exports, "clusterEventTopic", {
7524
+ enumerable: true,
7525
+ get: function() {
7526
+ return clusterEventTopic;
7527
+ }
7528
+ });
7523
7529
  Object.defineProperty(exports, "createAddonContext", {
7524
7530
  enumerable: true,
7525
7531
  get: function() {
@@ -7724,6 +7730,12 @@ Object.defineProperty(exports, "resolveHwAccel", {
7724
7730
  return resolveHwAccel;
7725
7731
  }
7726
7732
  });
7733
+ Object.defineProperty(exports, "resolveNpmInvocation", {
7734
+ enumerable: true,
7735
+ get: function() {
7736
+ return resolveNpmInvocation;
7737
+ }
7738
+ });
7727
7739
  Object.defineProperty(exports, "runNpm", {
7728
7740
  enumerable: true,
7729
7741
  get: function() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/system",
3
- "version": "1.1.76",
3
+ "version": "1.2.1",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",