@camstack/system 1.1.62 → 1.1.63

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 (53) 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-manager.addon.js +1 -1
  14. package/dist/builtins/device-manager/device-manager.addon.mjs +1 -1
  15. package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
  16. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
  17. package/dist/builtins/hub-forwarder/index.js +1 -1
  18. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  19. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  20. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  21. package/dist/builtins/local-network/local-network.addon.js +1 -1
  22. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  23. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  24. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  25. package/dist/builtins/platform-probe/index.js +26 -7
  26. package/dist/builtins/platform-probe/index.mjs +26 -7
  27. package/dist/builtins/platform-probe/intel-accelerators.d.ts +6 -3
  28. package/dist/builtins/platform-probe/intel-npu.d.ts +38 -0
  29. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  30. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  31. package/dist/builtins/snapshot/index.js +1 -1
  32. package/dist/builtins/snapshot/index.mjs +1 -1
  33. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  34. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  35. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +1 -1
  36. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +1 -1
  37. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  38. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  39. package/dist/builtins/system-config/system-config.addon.js +1 -1
  40. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  41. package/dist/builtins/winston-logging/index.js +1 -1
  42. package/dist/builtins/winston-logging/index.mjs +1 -1
  43. package/dist/{dist-BqC8e44T.mjs → dist-BilBS8T_.mjs} +27 -0
  44. package/dist/{dist-Z2gkbfp8.js → dist-lZmvymPa.js} +27 -0
  45. package/dist/index.js +2 -2
  46. package/dist/index.mjs +2 -2
  47. package/dist/{intel-accelerators-Gg0P5mnl.js → intel-accelerators-BvBjZn4j.js} +1 -5
  48. package/dist/{intel-accelerators-hGgpZ0pX.mjs → intel-accelerators-idEumqk1.mjs} +1 -5
  49. package/dist/intel-npu-C8HKvRQF.mjs +27 -0
  50. package/dist/intel-npu-DYF5hO5K.js +28 -0
  51. package/dist/{manifest-python-deps-Houw5lw4.js → manifest-python-deps-0seVlhMM.js} +1 -1
  52. package/dist/{manifest-python-deps-DQVZZVNo.mjs → manifest-python-deps-Dydd-bKS.mjs} +1 -1
  53. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_dist = require("./dist-Z2gkbfp8.js");
3
- const require_manifest_python_deps = require("./manifest-python-deps-Houw5lw4.js");
2
+ const require_dist = require("./dist-lZmvymPa.js");
3
+ const require_manifest_python_deps = require("./manifest-python-deps-0seVlhMM.js");
4
4
  const require_custom_action_registry = require("./custom-action-registry-vLYEFTtv.js");
5
5
  let node_fs = require("node:fs");
6
6
  node_fs = require_chunk.__toESM(node_fs);
@@ -1,5 +1,5 @@
1
- import { M as isCollectionArrayMethod, t as ALL_CAPABILITY_DEFINITIONS } from "./dist-BqC8e44T.mjs";
2
- import { F as createUdsLoggerWithControl, I as LocalChildClient, bt as resolveAddonClass, i as createUdsAddonContext, it as setWorkerNativeCapsChangeListener, nt as getWorkerNativeCapSnapshot, ot as validateProviderRegistrations, t as installManifestPythonDeps, tt as getWorkerNativeCapProvider, vt as installManifestNativeDeps } from "./manifest-python-deps-DQVZZVNo.mjs";
1
+ import { M as isCollectionArrayMethod, t as ALL_CAPABILITY_DEFINITIONS } from "./dist-BilBS8T_.mjs";
2
+ import { F as createUdsLoggerWithControl, I as LocalChildClient, bt as resolveAddonClass, i as createUdsAddonContext, it as setWorkerNativeCapsChangeListener, nt as getWorkerNativeCapSnapshot, ot as validateProviderRegistrations, t as installManifestPythonDeps, tt as getWorkerNativeCapProvider, vt as installManifestNativeDeps } from "./manifest-python-deps-Dydd-bKS.mjs";
3
3
  import { t as CustomActionRegistry } from "./custom-action-registry-BEXwC-oo.mjs";
4
4
  import { register } from "node:module";
5
5
  import * as fs from "node:fs";
@@ -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-Z2gkbfp8.js");
6
+ const require_dist = require("../../dist-lZmvymPa.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_fs = require("node:fs");
9
9
  node_fs = require_chunk.__toESM(node_fs);
@@ -1,4 +1,4 @@
1
- import { At as EventCategory, at as BaseAddon, f as addonPagesCapability, it as errMsg } from "../../dist-BqC8e44T.mjs";
1
+ import { At as EventCategory, at as BaseAddon, f as addonPagesCapability, it as errMsg } from "../../dist-BilBS8T_.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import * as fs from "node:fs";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Z2gkbfp8.js");
6
+ const require_dist = require("../../dist-lZmvymPa.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_fs = require("node:fs");
9
9
  node_fs = require_chunk.__toESM(node_fs);
@@ -1,4 +1,4 @@
1
- import { At as EventCategory, at as BaseAddon, it as errMsg, m as addonWidgetsCapability } from "../../dist-BqC8e44T.mjs";
1
+ import { At as EventCategory, at as BaseAddon, it as errMsg, m as addonWidgetsCapability } from "../../dist-BilBS8T_.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import * as fs from "node:fs";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Z2gkbfp8.js");
6
+ const require_dist = require("../../dist-lZmvymPa.js");
7
7
  //#region src/builtins/alerts/alerts.addon.ts
8
8
  var CATEGORY_MAPPINGS = {
9
9
  "addon.crashed": {
@@ -1,4 +1,4 @@
1
- import { At as EventCategory, at as BaseAddon, h as alertsCapability, it as errMsg, n as AlertSchema, vt as createEvent } from "../../dist-BqC8e44T.mjs";
1
+ import { At as EventCategory, at as BaseAddon, h as alertsCapability, it as errMsg, n as AlertSchema, vt as createEvent } from "../../dist-BilBS8T_.mjs";
2
2
  //#region src/builtins/alerts/alerts.addon.ts
3
3
  var CATEGORY_MAPPINGS = {
4
4
  "addon.crashed": {
@@ -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-Z2gkbfp8.js");
6
+ const require_dist = require("../../dist-lZmvymPa.js");
7
7
  let node_fs = require("node:fs");
8
8
  let node_fs$1 = require_chunk.__toESM(node_fs, 1);
9
9
  node_fs = require_chunk.__toESM(node_fs);
@@ -1,4 +1,4 @@
1
- import { At as EventCategory, at as BaseAddon, v as backupCapability } from "../../dist-BqC8e44T.mjs";
1
+ import { At as EventCategory, at as BaseAddon, v as backupCapability } from "../../dist-BilBS8T_.mjs";
2
2
  import * as fs from "node:fs";
3
3
  import Kt from "node:fs";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Z2gkbfp8.js");
6
+ const require_dist = require("../../dist-lZmvymPa.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  //#region src/builtins/console-logging/console-destination.ts
9
9
  var LEVEL_RANK = {
@@ -1,4 +1,4 @@
1
- import { R as logDestinationCapability, at as BaseAddon } from "../../dist-BqC8e44T.mjs";
1
+ import { R as logDestinationCapability, at as BaseAddon } from "../../dist-BilBS8T_.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  //#region src/builtins/console-logging/console-destination.ts
4
4
  var LEVEL_RANK = {
@@ -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-Z2gkbfp8.js");
6
+ const require_dist = require("../../dist-lZmvymPa.js");
7
7
  let _camstack_types_node = require("@camstack/types/node");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
@@ -1,4 +1,4 @@
1
- import { A as getByPath, At as EventCategory, Ct as isDeviceConfigCap, D as evaluateLinkExpression, E as enumerateSchemaFields, H as normalizeUnit, S as deviceStatusCapability, T as enumerateItemArrayFields, W as parseStreamParamsFormPatch, Y as setByPath, a as DeviceStatusSchema, at as BaseAddon, b as deviceManagerCapability, c as STREAM_PROFILE_META, dt as DeviceType, g as applyTransform, i as CAP_NAMES_WITH_STATUS, it as errMsg, kt as sleep, lt as DeviceFeature, mt as WELL_KNOWN_TAB_MAP, rt as validateExpressionSource, t as ALL_CAPABILITY_DEFINITIONS, tt as toExpressionValue, ut as DeviceRole, x as deviceStateCapability, y as buildStreamParamsConfigSchema } from "../../dist-BqC8e44T.mjs";
1
+ import { A as getByPath, At as EventCategory, Ct as isDeviceConfigCap, D as evaluateLinkExpression, E as enumerateSchemaFields, H as normalizeUnit, S as deviceStatusCapability, T as enumerateItemArrayFields, W as parseStreamParamsFormPatch, Y as setByPath, a as DeviceStatusSchema, at as BaseAddon, b as deviceManagerCapability, c as STREAM_PROFILE_META, dt as DeviceType, g as applyTransform, i as CAP_NAMES_WITH_STATUS, it as errMsg, kt as sleep, lt as DeviceFeature, mt as WELL_KNOWN_TAB_MAP, rt as validateExpressionSource, t as ALL_CAPABILITY_DEFINITIONS, tt as toExpressionValue, ut as DeviceRole, x as deviceStateCapability, y as buildStreamParamsConfigSchema } from "../../dist-BilBS8T_.mjs";
2
2
  import { canonicalDeviceFingerprint } from "@camstack/types/node";
3
3
  import { z } from "zod";
4
4
  import { randomUUID } from "node:crypto";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Z2gkbfp8.js");
6
+ const require_dist = require("../../dist-lZmvymPa.js");
7
7
  //#region src/builtins/doorbell/trigger-engine.ts
8
8
  /**
9
9
  * Pure trigger logic for the virtual-doorbell builtin — edge detection over
@@ -1,4 +1,4 @@
1
- import { At as EventCategory, C as doorbellCapability, at as BaseAddon, dt as DeviceType, it as errMsg, vt as createEvent } from "../../dist-BqC8e44T.mjs";
1
+ import { At as EventCategory, C as doorbellCapability, at as BaseAddon, dt as DeviceType, it as errMsg, vt as createEvent } from "../../dist-BilBS8T_.mjs";
2
2
  //#region src/builtins/doorbell/trigger-engine.ts
3
3
  /**
4
4
  * Pure trigger logic for the virtual-doorbell builtin — edge detection over
@@ -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-Z2gkbfp8.js");
6
+ const require_dist = require("../../dist-lZmvymPa.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  //#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
9
9
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
@@ -1,4 +1,4 @@
1
- import { R as logDestinationCapability, at as BaseAddon } from "../../dist-BqC8e44T.mjs";
1
+ import { R as logDestinationCapability, at as BaseAddon } from "../../dist-BilBS8T_.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  //#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
4
4
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
@@ -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-Z2gkbfp8.js");
6
+ const require_dist = require("../../dist-lZmvymPa.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  node_crypto = require_chunk.__toESM(node_crypto);
9
9
  let crypto$1 = require("crypto");
@@ -1,4 +1,4 @@
1
- import { _ as authProviderCapability, at as BaseAddon, d as UserRecordSchema, l as ScopedTokenSchema, nt as userManagementCapability, r as ApiKeyRecordSchema } from "../../dist-BqC8e44T.mjs";
1
+ import { _ as authProviderCapability, at as BaseAddon, d as UserRecordSchema, l as ScopedTokenSchema, nt as userManagementCapability, r as ApiKeyRecordSchema } from "../../dist-BilBS8T_.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import * as crypto$1 from "node:crypto";
4
4
  import { randomUUID } from "node:crypto";
@@ -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-Z2gkbfp8.js");
3
+ const require_dist = require("../../dist-lZmvymPa.js");
4
4
  let node_os = require("node:os");
5
5
  node_os = require_chunk.__toESM(node_os);
6
6
  //#region src/builtins/local-network/local-network.addon.ts
@@ -1,4 +1,4 @@
1
- import { At as EventCategory, L as localNetworkCapability, at as BaseAddon } from "../../dist-BqC8e44T.mjs";
1
+ import { At as EventCategory, L as localNetworkCapability, at as BaseAddon } from "../../dist-BilBS8T_.mjs";
2
2
  import * as os from "node:os";
3
3
  //#region src/builtins/local-network/local-network.addon.ts
4
4
  /**
@@ -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-Z2gkbfp8.js");
6
+ const require_dist = require("../../dist-lZmvymPa.js");
7
7
  let node_fs = require("node:fs");
8
8
  node_fs = require_chunk.__toESM(node_fs);
9
9
  let node_child_process = require("node:child_process");
@@ -1,4 +1,4 @@
1
- import { At as EventCategory, B as metricsProviderCapability, at as BaseAddon, vt as createEvent } from "../../dist-BqC8e44T.mjs";
1
+ import { At as EventCategory, B as metricsProviderCapability, at as BaseAddon, vt as createEvent } from "../../dist-BilBS8T_.mjs";
2
2
  import * as fs from "node:fs";
3
3
  import { execFile, execFileSync } from "node:child_process";
4
4
  import { promisify } from "node:util";
@@ -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-Z2gkbfp8.js");
6
+ const require_dist = require("../../dist-lZmvymPa.js");
7
7
  let node_fs = require("node:fs");
8
8
  node_fs = require_chunk.__toESM(node_fs);
9
9
  let node_child_process = require("node:child_process");
@@ -255,8 +255,8 @@ var PlatformScorer = class {
255
255
  } catch (err) {
256
256
  this.logger.debug("NVIDIA GPU detection failed", { meta: { error: require_dist.errMsg(err) } });
257
257
  }
258
- if (!gpu || !npu) {
259
- const { classifyIntelAccelerators } = await Promise.resolve().then(() => require("../../intel-accelerators-Gg0P5mnl.js"));
258
+ if (!gpu) {
259
+ const { classifyIntelAccelerators } = await Promise.resolve().then(() => require("../../intel-accelerators-BvBjZn4j.js"));
260
260
  const intel = classifyIntelAccelerators({
261
261
  listRenderNodes: () => {
262
262
  try {
@@ -271,14 +271,33 @@ var PlatformScorer = class {
271
271
  } catch {
272
272
  return "";
273
273
  }
274
- },
275
- exists: (p) => node_fs.existsSync(p)
274
+ }
276
275
  });
277
276
  gpu = gpu ?? intel.gpu;
278
- npu = npu ?? intel.npu;
279
- if (intel.npu) this.logger.info("Intel NPU detected", { meta: { device: "/dev/accel/accel0" } });
280
277
  if (intel.gpu) this.logger.info("Intel iGPU detected", { meta: { name: intel.gpu.name } });
281
278
  }
279
+ if (!npu) {
280
+ const { classifyIntelNpu } = await Promise.resolve().then(() => require("../../intel-npu-DYF5hO5K.js"));
281
+ npu = classifyIntelNpu({
282
+ platform,
283
+ arch,
284
+ intelPresent: gpu?.type === "intel" || /intel/i.test(cpuModel)
285
+ }, {
286
+ listDir: (p) => {
287
+ try {
288
+ return node_fs.readdirSync(p);
289
+ } catch {
290
+ return [];
291
+ }
292
+ },
293
+ exists: (p) => node_fs.existsSync(p)
294
+ });
295
+ if (npu) this.logger.info("Intel NPU detected", { meta: {
296
+ type: npu.type,
297
+ name: npu.name,
298
+ device: "/dev/accel/accel*"
299
+ } });
300
+ }
282
301
  }
283
302
  return {
284
303
  platform,
@@ -1,4 +1,4 @@
1
- import { At as EventCategory, G as platformProbeCapability, J as scoreRuntimes, at as BaseAddon, bt as emitReadiness, it as errMsg, w as enumerateInferenceDevices } from "../../dist-BqC8e44T.mjs";
1
+ import { At as EventCategory, G as platformProbeCapability, J as scoreRuntimes, at as BaseAddon, bt as emitReadiness, it as errMsg, w as enumerateInferenceDevices } from "../../dist-BilBS8T_.mjs";
2
2
  import * as fs from "node:fs";
3
3
  import { execFile } from "node:child_process";
4
4
  import { promisify } from "node:util";
@@ -248,8 +248,8 @@ var PlatformScorer = class {
248
248
  } catch (err) {
249
249
  this.logger.debug("NVIDIA GPU detection failed", { meta: { error: errMsg(err) } });
250
250
  }
251
- if (!gpu || !npu) {
252
- const { classifyIntelAccelerators } = await import("../../intel-accelerators-hGgpZ0pX.mjs");
251
+ if (!gpu) {
252
+ const { classifyIntelAccelerators } = await import("../../intel-accelerators-idEumqk1.mjs");
253
253
  const intel = classifyIntelAccelerators({
254
254
  listRenderNodes: () => {
255
255
  try {
@@ -264,14 +264,33 @@ var PlatformScorer = class {
264
264
  } catch {
265
265
  return "";
266
266
  }
267
- },
268
- exists: (p) => fs.existsSync(p)
267
+ }
269
268
  });
270
269
  gpu = gpu ?? intel.gpu;
271
- npu = npu ?? intel.npu;
272
- if (intel.npu) this.logger.info("Intel NPU detected", { meta: { device: "/dev/accel/accel0" } });
273
270
  if (intel.gpu) this.logger.info("Intel iGPU detected", { meta: { name: intel.gpu.name } });
274
271
  }
272
+ if (!npu) {
273
+ const { classifyIntelNpu } = await import("../../intel-npu-C8HKvRQF.mjs");
274
+ npu = classifyIntelNpu({
275
+ platform,
276
+ arch,
277
+ intelPresent: gpu?.type === "intel" || /intel/i.test(cpuModel)
278
+ }, {
279
+ listDir: (p) => {
280
+ try {
281
+ return fs.readdirSync(p);
282
+ } catch {
283
+ return [];
284
+ }
285
+ },
286
+ exists: (p) => fs.existsSync(p)
287
+ });
288
+ if (npu) this.logger.info("Intel NPU detected", { meta: {
289
+ type: npu.type,
290
+ name: npu.name,
291
+ device: "/dev/accel/accel*"
292
+ } });
293
+ }
275
294
  }
276
295
  return {
277
296
  platform,
@@ -1,11 +1,14 @@
1
- import { GpuInfo, NpuInfo } from '@camstack/types';
1
+ import { GpuInfo } from '@camstack/types';
2
+ /**
3
+ * Filesystem seam for Intel iGPU detection — the classifier stays a pure,
4
+ * unit-testable function over injected reads. The Intel NPU ("AI Boost") is a
5
+ * separate DRM accel device with its own classifier — see `intel-npu.ts`.
6
+ */
2
7
  export interface AcceleratorFs {
3
8
  listRenderNodes(): readonly string[];
4
9
  readVendor(renderNode: string): string;
5
- exists(path: string): boolean;
6
10
  }
7
11
  export interface IntelAccelerators {
8
12
  gpu: GpuInfo | null;
9
- npu: NpuInfo | null;
10
13
  }
11
14
  export declare function classifyIntelAccelerators(fsx: AcceleratorFs): IntelAccelerators;
@@ -0,0 +1,38 @@
1
+ import { NpuInfo } from '@camstack/types';
2
+ /**
3
+ * Filesystem seam for Intel NPU detection — mirrors the `AcceleratorFs` /
4
+ * `CoralFs` pattern so the classifier stays a pure, unit-testable function over
5
+ * injected reads.
6
+ */
7
+ export interface NpuFs {
8
+ /**
9
+ * Directory entries under a path (e.g. the accel char devices under
10
+ * `/dev/accel`). MUST return an empty list when the directory is absent.
11
+ */
12
+ listDir(path: string): readonly string[];
13
+ /** Whether a filesystem path exists. */
14
+ exists(path: string): boolean;
15
+ }
16
+ /** Everything the NPU classifier needs to know about the host, beside the FS. */
17
+ export interface IntelNpuContext {
18
+ readonly platform: 'darwin' | 'linux' | 'win32';
19
+ readonly arch: 'arm64' | 'x64';
20
+ /**
21
+ * True when an Intel CPU or Intel iGPU is present. The NPU ("AI Boost") is an
22
+ * Intel-only accelerator, so a stray `/dev/accel` node on a non-Intel host
23
+ * (e.g. some other DRM accel driver) must NOT be misread as an Intel NPU.
24
+ */
25
+ readonly intelPresent: boolean;
26
+ }
27
+ /**
28
+ * Detect the Intel NPU ("AI Boost", the `intel_vpu` kernel driver).
29
+ *
30
+ * On Linux the NPU surfaces as a DRM accel char device `/dev/accel/accel*`.
31
+ * Detection is gated on linux + x64 + an Intel CPU/iGPU being present — the NPU
32
+ * only ships on x86_64 Intel Core Ultra (Meteor/Arrow Lake+) parts, so those
33
+ * three conditions together make a matching accel node an Intel NPU.
34
+ *
35
+ * Returns `null` when any gate fails or no accel node is found. The caller must
36
+ * NOT clobber an already-resolved NPU (e.g. `apple-ane` on macOS).
37
+ */
38
+ export declare function classifyIntelNpu(ctx: IntelNpuContext, fsx: NpuFs): NpuInfo | null;
@@ -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-Z2gkbfp8.js");
6
+ const require_dist = require("../../dist-lZmvymPa.js");
7
7
  //#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
8
8
  /**
9
9
  * Reconcile the durable `enabledProviders` set against authoritative
@@ -1,4 +1,4 @@
1
- import { At as EventCategory, at as BaseAddon } from "../../dist-BqC8e44T.mjs";
1
+ import { At as EventCategory, at as BaseAddon } from "../../dist-BilBS8T_.mjs";
2
2
  //#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
3
3
  /**
4
4
  * Reconcile the durable `enabledProviders` set against authoritative
@@ -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-Z2gkbfp8.js");
6
+ const require_dist = require("../../dist-lZmvymPa.js");
7
7
  let node_child_process = require("node:child_process");
8
8
  //#region src/builtins/snapshot/snapshot-coalescing.ts
9
9
  /**
@@ -1,4 +1,4 @@
1
- import { V as nodePin, Z as snapshotCapability, at as BaseAddon, dt as DeviceType, et as streamQualityLabel, it as errMsg, lt as DeviceFeature } from "../../dist-BqC8e44T.mjs";
1
+ import { V as nodePin, Z as snapshotCapability, at as BaseAddon, dt as DeviceType, et as streamQualityLabel, it as errMsg, lt as DeviceFeature } from "../../dist-BilBS8T_.mjs";
2
2
  import { execFile } from "node:child_process";
3
3
  //#region src/builtins/snapshot/snapshot-coalescing.ts
4
4
  /**
@@ -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-Z2gkbfp8.js");
6
+ const require_dist = require("../../dist-lZmvymPa.js");
7
7
  let node_fs = require("node:fs");
8
8
  node_fs = require_chunk.__toESM(node_fs);
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { $ as storageProviderCapability, at as BaseAddon, k as filesystemBrowseCapability } from "../../dist-BqC8e44T.mjs";
1
+ import { $ as storageProviderCapability, at as BaseAddon, k as filesystemBrowseCapability } from "../../dist-BilBS8T_.mjs";
2
2
  import * as fs from "node:fs";
3
3
  import * as path$1 from "node:path";
4
4
  import { basename, dirname, join, resolve, sep } from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Z2gkbfp8.js");
6
+ const require_dist = require("../../dist-lZmvymPa.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let better_sqlite3 = require("better-sqlite3");
9
9
  better_sqlite3 = require_chunk.__toESM(better_sqlite3);
@@ -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-BqC8e44T.mjs";
1
+ import { Tt as parseJsonUnknown, X as settingsStoreCapability, at as BaseAddon, ht as asJsonObject, it as errMsg, s as RUNTIME_DEFAULTS } from "../../dist-BilBS8T_.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-Z2gkbfp8.js");
6
+ const require_dist = require("../../dist-lZmvymPa.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-BqC8e44T.mjs";
1
+ import { Q as storageCapability, at as BaseAddon, u as StorageLocationTypeSchema, wt as parseJsonObject } from "../../dist-BilBS8T_.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-Z2gkbfp8.js");
6
+ const require_dist = require("../../dist-lZmvymPa.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-BqC8e44T.mjs";
1
+ import { St as hydrateSchema, at as BaseAddon, it as errMsg } from "../../dist-BilBS8T_.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-Z2gkbfp8.js");
6
+ const require_dist = require("../../dist-lZmvymPa.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-BqC8e44T.mjs";
1
+ import { R as logDestinationCapability, at as BaseAddon } from "../../dist-BilBS8T_.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";
@@ -17431,6 +17431,27 @@ var pipelineOrchestratorCapability = {
17431
17431
  auth: "admin"
17432
17432
  }),
17433
17433
  /**
17434
+ * Set one node's multi-device inference opt-in (Phase 4 multi-device) — the
17435
+ * per-node `deviceKey → { enabled, weight }` map that decides which
17436
+ * accelerators the dispatcher may balance detection sessions across.
17437
+ * The map REPLACES the node's stored `inferenceDevices` wholesale (pass the
17438
+ * complete desired set; an empty map clears the opt-in → the node reverts to
17439
+ * its single DEFAULT accelerator). `weight` is optional and defaults to 1.
17440
+ * Creates the node's settings entry if absent. Changes take effect on the
17441
+ * next dispatch/rebalance cycle — the dispatcher reads the enabled set via
17442
+ * `PipelineSettingsStore.buildNodeInferenceDevices` when placing sessions.
17443
+ */
17444
+ setAgentInferenceDevices: method(z.object({
17445
+ agentNodeId: z.string(),
17446
+ inferenceDevices: z.record(z.string(), z.object({
17447
+ enabled: z.boolean(),
17448
+ weight: z.number().positive().optional()
17449
+ }))
17450
+ }), z.object({ success: z.literal(true) }), {
17451
+ kind: "mutation",
17452
+ auth: "admin"
17453
+ }),
17454
+ /**
17434
17455
  * Reset one node's pipeline to its hardware-aware defaults — the HONEST
17435
17456
  * reset (replaces the executor's legacy `resetToDefault`, which cleared a
17436
17457
  * dead persisted step-tree seed nothing in the live path read):
@@ -25715,6 +25736,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
25715
25736
  addonId: null,
25716
25737
  access: "create"
25717
25738
  },
25739
+ "pipelineOrchestrator.setAgentInferenceDevices": {
25740
+ capName: "pipeline-orchestrator",
25741
+ capScope: "system",
25742
+ addonId: null,
25743
+ access: "create"
25744
+ },
25718
25745
  "pipelineOrchestrator.setAgentMaxCameras": {
25719
25746
  capName: "pipeline-orchestrator",
25720
25747
  capScope: "system",
@@ -17431,6 +17431,27 @@ var pipelineOrchestratorCapability = {
17431
17431
  auth: "admin"
17432
17432
  }),
17433
17433
  /**
17434
+ * Set one node's multi-device inference opt-in (Phase 4 multi-device) — the
17435
+ * per-node `deviceKey → { enabled, weight }` map that decides which
17436
+ * accelerators the dispatcher may balance detection sessions across.
17437
+ * The map REPLACES the node's stored `inferenceDevices` wholesale (pass the
17438
+ * complete desired set; an empty map clears the opt-in → the node reverts to
17439
+ * its single DEFAULT accelerator). `weight` is optional and defaults to 1.
17440
+ * Creates the node's settings entry if absent. Changes take effect on the
17441
+ * next dispatch/rebalance cycle — the dispatcher reads the enabled set via
17442
+ * `PipelineSettingsStore.buildNodeInferenceDevices` when placing sessions.
17443
+ */
17444
+ setAgentInferenceDevices: method(zod.z.object({
17445
+ agentNodeId: zod.z.string(),
17446
+ inferenceDevices: zod.z.record(zod.z.string(), zod.z.object({
17447
+ enabled: zod.z.boolean(),
17448
+ weight: zod.z.number().positive().optional()
17449
+ }))
17450
+ }), zod.z.object({ success: zod.z.literal(true) }), {
17451
+ kind: "mutation",
17452
+ auth: "admin"
17453
+ }),
17454
+ /**
17434
17455
  * Reset one node's pipeline to its hardware-aware defaults — the HONEST
17435
17456
  * reset (replaces the executor's legacy `resetToDefault`, which cleared a
17436
17457
  * dead persisted step-tree seed nothing in the live path read):
@@ -25715,6 +25736,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
25715
25736
  addonId: null,
25716
25737
  access: "create"
25717
25738
  },
25739
+ "pipelineOrchestrator.setAgentInferenceDevices": {
25740
+ capName: "pipeline-orchestrator",
25741
+ capScope: "system",
25742
+ addonId: null,
25743
+ access: "create"
25744
+ },
25718
25745
  "pipelineOrchestrator.setAgentMaxCameras": {
25719
25746
  capName: "pipeline-orchestrator",
25720
25747
  capScope: "system",
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-Z2gkbfp8.js");
3
+ const require_dist = require("./dist-lZmvymPa.js");
4
4
  const require_model_download_service = require("./model-download-service-hf0ookyy.js");
5
- const require_manifest_python_deps = require("./manifest-python-deps-Houw5lw4.js");
5
+ const require_manifest_python_deps = require("./manifest-python-deps-0seVlhMM.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");
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-BqC8e44T.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-BilBS8T_.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-DQVZZVNo.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-Dydd-bKS.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";
@@ -10,11 +10,7 @@ function classifyIntelAccelerators(fsx) {
10
10
  };
11
11
  break;
12
12
  }
13
- const npu = fsx.exists("/dev/accel/accel0") ? { type: "intel-npu" } : null;
14
- return {
15
- gpu,
16
- npu
17
- };
13
+ return { gpu };
18
14
  }
19
15
  //#endregion
20
16
  exports.classifyIntelAccelerators = classifyIntelAccelerators;
@@ -9,11 +9,7 @@ function classifyIntelAccelerators(fsx) {
9
9
  };
10
10
  break;
11
11
  }
12
- const npu = fsx.exists("/dev/accel/accel0") ? { type: "intel-npu" } : null;
13
- return {
14
- gpu,
15
- npu
16
- };
12
+ return { gpu };
17
13
  }
18
14
  //#endregion
19
15
  export { classifyIntelAccelerators };
@@ -0,0 +1,27 @@
1
+ //#region src/builtins/platform-probe/intel-npu.ts
2
+ var ACCEL_DIR = "/dev/accel";
3
+ /** DRM accel char devices are named `accel0`, `accel1`, … */
4
+ function hasAccelNode(fsx) {
5
+ if (fsx.listDir(ACCEL_DIR).some((n) => n.startsWith("accel"))) return true;
6
+ return fsx.exists(`${ACCEL_DIR}/accel0`);
7
+ }
8
+ /**
9
+ * Detect the Intel NPU ("AI Boost", the `intel_vpu` kernel driver).
10
+ *
11
+ * On Linux the NPU surfaces as a DRM accel char device `/dev/accel/accel*`.
12
+ * Detection is gated on linux + x64 + an Intel CPU/iGPU being present — the NPU
13
+ * only ships on x86_64 Intel Core Ultra (Meteor/Arrow Lake+) parts, so those
14
+ * three conditions together make a matching accel node an Intel NPU.
15
+ *
16
+ * Returns `null` when any gate fails or no accel node is found. The caller must
17
+ * NOT clobber an already-resolved NPU (e.g. `apple-ane` on macOS).
18
+ */
19
+ function classifyIntelNpu(ctx, fsx) {
20
+ if (ctx.platform !== "linux" || ctx.arch !== "x64" || !ctx.intelPresent) return null;
21
+ return hasAccelNode(fsx) ? {
22
+ type: "intel-npu",
23
+ name: "Intel AI Boost NPU"
24
+ } : null;
25
+ }
26
+ //#endregion
27
+ export { classifyIntelNpu };
@@ -0,0 +1,28 @@
1
+ require("./chunk-Cek0wNdY.js");
2
+ //#region src/builtins/platform-probe/intel-npu.ts
3
+ var ACCEL_DIR = "/dev/accel";
4
+ /** DRM accel char devices are named `accel0`, `accel1`, … */
5
+ function hasAccelNode(fsx) {
6
+ if (fsx.listDir(ACCEL_DIR).some((n) => n.startsWith("accel"))) return true;
7
+ return fsx.exists(`${ACCEL_DIR}/accel0`);
8
+ }
9
+ /**
10
+ * Detect the Intel NPU ("AI Boost", the `intel_vpu` kernel driver).
11
+ *
12
+ * On Linux the NPU surfaces as a DRM accel char device `/dev/accel/accel*`.
13
+ * Detection is gated on linux + x64 + an Intel CPU/iGPU being present — the NPU
14
+ * only ships on x86_64 Intel Core Ultra (Meteor/Arrow Lake+) parts, so those
15
+ * three conditions together make a matching accel node an Intel NPU.
16
+ *
17
+ * Returns `null` when any gate fails or no accel node is found. The caller must
18
+ * NOT clobber an already-resolved NPU (e.g. `apple-ane` on macOS).
19
+ */
20
+ function classifyIntelNpu(ctx, fsx) {
21
+ if (ctx.platform !== "linux" || ctx.arch !== "x64" || !ctx.intelPresent) return null;
22
+ return hasAccelNode(fsx) ? {
23
+ type: "intel-npu",
24
+ name: "Intel AI Boost NPU"
25
+ } : null;
26
+ }
27
+ //#endregion
28
+ exports.classifyIntelNpu = classifyIntelNpu;
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_dist = require("./dist-Z2gkbfp8.js");
2
+ const require_dist = require("./dist-lZmvymPa.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");
@@ -1,4 +1,4 @@
1
- import { q as readNodePin } from "./dist-BqC8e44T.mjs";
1
+ import { q as readNodePin } from "./dist-BilBS8T_.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";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/system",
3
- "version": "1.1.62",
3
+ "version": "1.1.63",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",