@camstack/addon-pipeline 1.2.359 → 1.2.361

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 (36) hide show
  1. package/dist/audio-analyzer/index.js +3 -3
  2. package/dist/audio-analyzer/index.mjs +3 -3
  3. package/dist/{custom-model-catalog-BZFt7qC7.js → custom-model-catalog-BsuqZLaN.js} +2 -2
  4. package/dist/{custom-model-catalog-Bdp__rWS.mjs → custom-model-catalog-DWFL7iBE.mjs} +2 -2
  5. package/dist/detection-pipeline/index.js +4 -4
  6. package/dist/detection-pipeline/index.mjs +4 -4
  7. package/dist/{dist-TseSUtZJ.mjs → dist-73R05PFN.mjs} +99 -92
  8. package/dist/{dist-8okS4wxl.js → dist-DFGiI5lr.js} +98 -91
  9. package/dist/{model-catalogs-C0aOsH6-.js → model-catalogs-BefhGOAc.js} +1 -1
  10. package/dist/{model-catalogs-BSCj4g0O.mjs → model-catalogs-OLyh3TdB.mjs} +1 -1
  11. package/dist/motion-wasm/index.js +1 -1
  12. package/dist/motion-wasm/index.mjs +1 -1
  13. package/dist/{node-I5Y2Dzmr.mjs → node-C0-Ik_JH.mjs} +3 -2
  14. package/dist/{node-BStoDcFQ.js → node-CdOP9ELN.js} +4 -2
  15. package/dist/pipeline-runner/index.js +3 -3
  16. package/dist/pipeline-runner/index.mjs +3 -3
  17. package/dist/{process-memory-D4H6J3CG.mjs → process-memory-DKKVQV5j.mjs} +1 -1
  18. package/dist/{process-memory-7YJfeXUK.js → process-memory-DO-ZBWdK.js} +1 -1
  19. package/dist/recorder/index.js +1675 -2
  20. package/dist/recorder/index.mjs +1675 -2
  21. package/dist/{segment-demux-js-RgT0biID.mjs → segment-demux-js-C_27CmCq.mjs} +1 -1
  22. package/dist/{segment-demux-js-BwQRJ24B.js → segment-demux-js-Dr3e9r4m.js} +1 -1
  23. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-DqdW2pDb.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-DJeFG_hB.mjs} +1 -1
  24. package/dist/stream-broker/demux-worker-child.js +1 -1
  25. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  26. package/dist/stream-broker/{hostInit-xe-7xOfx.mjs → hostInit-Buho1uzb.mjs} +1 -1
  27. package/dist/stream-broker/index.js +3 -3
  28. package/dist/stream-broker/index.mjs +3 -3
  29. package/dist/stream-broker/remoteEntry.js +1 -1
  30. package/package.json +1 -1
  31. package/python/inference_pool.py +12 -13
  32. package/python/pool_platform.py +214 -0
  33. package/python/test_inference_pool_windows.py +86 -0
  34. package/python/test_pool_platform.py +141 -0
  35. package/python/test_webgpu_isolated.py +132 -0
  36. package/python/webgpu_isolated.py +115 -17
@@ -3,9 +3,9 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-8okS4wxl.js");
7
- const require_model_catalogs = require("../model-catalogs-C0aOsH6-.js");
8
- const require_process_memory = require("../process-memory-7YJfeXUK.js");
6
+ const require_dist = require("../dist-DFGiI5lr.js");
7
+ const require_model_catalogs = require("../model-catalogs-BefhGOAc.js");
8
+ const require_process_memory = require("../process-memory-DO-ZBWdK.js");
9
9
  let node_fs = require("node:fs");
10
10
  node_fs = require_chunk.__toESM(node_fs);
11
11
  let node_path = require("node:path");
@@ -1,7 +1,7 @@
1
1
  import { n as __require } from "../chunk-DnnnRqeS.mjs";
2
- import { $ as audioAnalysisCapability, Hn as hydrateSchema, Kn as nodePin, L as PoolMemoryWatchdog, Ln as audioChunkBytesPerSample, Mn as errMsg, Pn as BaseAddon, Rt as mapAudioLabelToMacro, Vn as expandAudioChunkToF32le, cr as EventCategory, et as audioAnalyzerCapability, h as DEFAULT_AUDIO_ANALYZER_CONFIG, r as AUDIO_BACKEND_CHOICES, un as resolvePoolMemoryPolicy } from "../dist-TseSUtZJ.mjs";
3
- import { n as AUDIO_CLASSIFIER_MODELS } from "../model-catalogs-BSCj4g0O.mjs";
4
- import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-D4H6J3CG.mjs";
2
+ import { An as BaseAddon, F as PoolMemoryWatchdog, Fn as audioChunkBytesPerSample, Ft as mapAudioLabelToMacro, Kn as nodePin, On as errMsg, Q as audioAnalyzerCapability, Vn as hydrateSchema, Z as audioAnalysisCapability, cr as EventCategory, h as DEFAULT_AUDIO_ANALYZER_CONFIG, on as resolvePoolMemoryPolicy, r as AUDIO_BACKEND_CHOICES, zn as expandAudioChunkToF32le } from "../dist-73R05PFN.mjs";
3
+ import { n as AUDIO_CLASSIFIER_MODELS } from "../model-catalogs-OLyh3TdB.mjs";
4
+ import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-DKKVQV5j.mjs";
5
5
  import * as fs from "node:fs";
6
6
  import * as path$1 from "node:path";
7
7
  import { ensureModel } from "@camstack/system/addon-utils";
@@ -1,5 +1,5 @@
1
- const require_dist = require("./dist-8okS4wxl.js");
2
- const require_model_catalogs = require("./model-catalogs-C0aOsH6-.js");
1
+ const require_dist = require("./dist-DFGiI5lr.js");
2
+ const require_model_catalogs = require("./model-catalogs-BefhGOAc.js");
3
3
  const require_worker_protocol = require("./worker-protocol-C-G8qmye.js");
4
4
  let node_crypto = require("node:crypto");
5
5
  //#region src/detection-pipeline/registry/effective-confidence.ts
@@ -1,5 +1,5 @@
1
- import { A as LABEL_SUPPLY_VOCABULARIES, Mt as inferModelProvider, b as DEVICE_BACKEND_TO_FORMAT, f as COCO_80_LABELS, hn as stepModelRunsOnFormat, i as AUDIO_MACRO_LABELS, p as COCO_TO_MACRO, tt as audioKindId } from "./dist-TseSUtZJ.mjs";
2
- import { a as FACE_DETECTION_MODELS, c as OBJECT_DETECTION_MODELS, d as PLATE_OCR_MODELS, f as SEGMENTATION_REFINER_MODELS, i as CLIP_EMBEDDING_MODELS, l as PACKAGE_DETECTION_MODELS, n as AUDIO_CLASSIFIER_MODELS, o as FACE_EMBEDDING_MODELS, p as VEHICLE_CLASSIFIER_MODELS, r as BIRD_CLASSIFIER_MODELS, s as INSTANCE_SEGMENTATION_MODELS, t as ANIMAL_CLASSIFIER_MODELS, u as PLATE_DETECTION_MODELS } from "./model-catalogs-BSCj4g0O.mjs";
1
+ import { $ as audioKindId, b as DEVICE_BACKEND_TO_FORMAT, dn as stepModelRunsOnFormat, f as COCO_80_LABELS, i as AUDIO_MACRO_LABELS, k as LABEL_SUPPLY_VOCABULARIES, kt as inferModelProvider, p as COCO_TO_MACRO } from "./dist-73R05PFN.mjs";
2
+ import { a as FACE_DETECTION_MODELS, c as OBJECT_DETECTION_MODELS, d as PLATE_OCR_MODELS, f as SEGMENTATION_REFINER_MODELS, i as CLIP_EMBEDDING_MODELS, l as PACKAGE_DETECTION_MODELS, n as AUDIO_CLASSIFIER_MODELS, o as FACE_EMBEDDING_MODELS, p as VEHICLE_CLASSIFIER_MODELS, r as BIRD_CLASSIFIER_MODELS, s as INSTANCE_SEGMENTATION_MODELS, t as ANIMAL_CLASSIFIER_MODELS, u as PLATE_DETECTION_MODELS } from "./model-catalogs-OLyh3TdB.mjs";
3
3
  import { t as isWorkerReply } from "./worker-protocol-D_NzPcnh.mjs";
4
4
  import { randomUUID } from "node:crypto";
5
5
  //#region src/detection-pipeline/registry/effective-confidence.ts
@@ -3,11 +3,11 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-8okS4wxl.js");
7
- const require_node = require("../node-BStoDcFQ.js");
8
- const require_custom_model_catalog = require("../custom-model-catalog-BZFt7qC7.js");
6
+ const require_dist = require("../dist-DFGiI5lr.js");
7
+ const require_node = require("../node-CdOP9ELN.js");
8
+ const require_custom_model_catalog = require("../custom-model-catalog-BsuqZLaN.js");
9
9
  const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
10
- const require_process_memory = require("../process-memory-7YJfeXUK.js");
10
+ const require_process_memory = require("../process-memory-DO-ZBWdK.js");
11
11
  let node_os = require("node:os");
12
12
  node_os = require_chunk.__toESM(node_os);
13
13
  let node_fs = require("node:fs");
@@ -1,9 +1,9 @@
1
1
  import { n as __require } from "../chunk-DnnnRqeS.mjs";
2
- import { Gt as modelBindingKey, Hn as hydrateSchema, It as loadContributionCapability, Kn as nodePin, L as PoolMemoryWatchdog, Mn as errMsg$1, Pn as BaseAddon, Pt as linkedLabelStepId, Q as applyModelBoundSettings, Qt as pipelineExecutorCapability, Rn as createEvent, St as evaluateZoneRules, Y as YAMNET_TO_MACRO, Yn as sleep, Yt as pickClusterStepSettings, Zn as array, an as resolveClusterStepModelId, bn as supportedRuntimes$1, cr as EventCategory, ct as collectModelBoundKeys, d as CLUSTER_MODEL_SCOPED_STEPS, g as DEFAULT_CLUSTER_STEP_SETTINGS, hn as stepModelRunsOnFormat, jt as hfModelUrl, k as LABEL_SUPPLY_MACRO, lt as containingParentIndex, mn as runtimeDevices$1, n as APPLE_SA_TO_MACRO, or as string, pn as rootSuppliesOf, pt as defaultDeviceFor$1, qt as overlayClusterStepSettings, rr as object, sr as union, un as resolvePoolMemoryPolicy, vt as detectionPipelineCapability, xt as enumerateInferenceDevices } from "../dist-TseSUtZJ.mjs";
3
- import { s as readProcessCost } from "../node-I5Y2Dzmr.mjs";
4
- import { C as resolveModelDefaultConfidence, S as landmarkPrecisionVerdict, _ as ALL_STEPS, b as getStepDefinition, f as localFrameRegistry, g as ALL_PIPELINE_STEPS, l as resolveDefaultDetectionModel, n as mergeCustomModels, o as deviceKeyOf, r as buildSubtreeCanRun, s as resolveDeviceEngine, t as CustomModelCatalog, u as macroGateVerdict, v as getDefaultModelForFormat, x as resolveModelForFormat, y as getStep } from "../custom-model-catalog-Bdp__rWS.mjs";
2
+ import { An as BaseAddon, Bn as hfModelUrl, F as PoolMemoryWatchdog, Gt as pickClusterStepSettings, In as createEvent, Jt as pipelineExecutorCapability, Kn as nodePin, Nt as loadContributionCapability, O as LABEL_SUPPLY_MACRO, On as errMsg$1, Ut as overlayClusterStepSettings, Vn as hydrateSchema, Vt as modelBindingKey, X as applyModelBoundSettings, Yn as sleep, Zn as array, bt as evaluateZoneRules, cr as EventCategory, d as CLUSTER_MODEL_SCOPED_STEPS, dn as stepModelRunsOnFormat, dt as defaultDeviceFor$1, g as DEFAULT_CLUSTER_STEP_SETTINGS, gn as supportedRuntimes$1, gt as detectionPipelineCapability, jt as linkedLabelStepId, ln as rootSuppliesOf, n as APPLE_SA_TO_MACRO, on as resolvePoolMemoryPolicy, or as string, ot as collectModelBoundKeys, q as YAMNET_TO_MACRO, rr as object, sr as union, st as containingParentIndex, tn as resolveClusterStepModelId, un as runtimeDevices$1, yt as enumerateInferenceDevices } from "../dist-73R05PFN.mjs";
3
+ import { s as readProcessCost } from "../node-C0-Ik_JH.mjs";
4
+ import { C as resolveModelDefaultConfidence, S as landmarkPrecisionVerdict, _ as ALL_STEPS, b as getStepDefinition, f as localFrameRegistry, g as ALL_PIPELINE_STEPS, l as resolveDefaultDetectionModel, n as mergeCustomModels, o as deviceKeyOf, r as buildSubtreeCanRun, s as resolveDeviceEngine, t as CustomModelCatalog, u as macroGateVerdict, v as getDefaultModelForFormat, x as resolveModelForFormat, y as getStep } from "../custom-model-catalog-DWFL7iBE.mjs";
5
5
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
6
- import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-D4H6J3CG.mjs";
6
+ import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-DKKVQV5j.mjs";
7
7
  import * as os$1 from "node:os";
8
8
  import * as fs from "node:fs";
9
9
  import * as path$1 from "node:path";
@@ -5387,7 +5387,7 @@ var ZodIssueCode = {
5387
5387
  var ZodFirstPartyTypeKind;
5388
5388
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5389
5389
  //#endregion
5390
- //#region ../types/dist/sleep-Tkp9dHXv.mjs
5390
+ //#region ../types/dist/sleep-vWTnHq9G.mjs
5391
5391
  /**
5392
5392
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5393
5393
  * window to float samples (D455).
@@ -8101,6 +8101,21 @@ var ProfileRtspEntrySchema = object({
8101
8101
  resolution: CamStreamResolutionSchema.optional()
8102
8102
  });
8103
8103
  /**
8104
+ * The model weight formats a catalog entry can ship. Schema-free on purpose:
8105
+ * `types/models.ts` builds Zod schemas from it, but a runner-closure consumer
8106
+ * (the model downloader in `@camstack/system`) needs only the list and must
8107
+ * reach it through `@camstack/types/addon` without building the cap schema
8108
+ * graph (D28).
8109
+ */
8110
+ var MODEL_FORMATS = [
8111
+ "onnx",
8112
+ "coreml",
8113
+ "openvino",
8114
+ "tflite",
8115
+ "pt",
8116
+ "gguf"
8117
+ ];
8118
+ /**
8104
8119
  * Per-call node pinning for `ctx.api` capability calls.
8105
8120
  *
8106
8121
  * A capability call normally resolves to its DEFAULT provider — a `singleton`
@@ -8337,6 +8352,8 @@ method(object({ deviceId: number() }), array(StreamSourceEntrySchema)), method(o
8337
8352
  kind: "mutation",
8338
8353
  auth: "admin"
8339
8354
  }), method(object({ deviceId: number() }), unknown().nullable()), method(object({ deviceId: number() }), RawStateResultSchema.nullable(), { auth: "protected" });
8355
+ var HF_REPO = "camstack/camstack-models";
8356
+ `${HF_REPO}`;
8340
8357
  /**
8341
8358
  * The ONE retry schedule for work that can fail simply because the node was
8342
8359
  * still booting.
@@ -8371,6 +8388,82 @@ var BOOT_RECOVERY_BACKOFF_MS = [
8371
8388
  60 * 6e4,
8372
8389
  90 * 6e4
8373
8390
  ];
8391
+ function hfModelUrl(repo, path) {
8392
+ return `https://huggingface.co/${repo}/resolve/main/${path}`;
8393
+ }
8394
+ /**
8395
+ * Names that, when used as URL query parameters, almost certainly carry
8396
+ * a secret. Matching is case-insensitive and anchored to the full param
8397
+ * name to avoid false positives like `user_id` (an entity reference, not
8398
+ * a credential) or `topic=password-reset` (a value happens to contain
8399
+ * the substring "password" but the param name is unrelated).
8400
+ *
8401
+ * Add new patterns here as we encounter cameras/APIs that leak through
8402
+ * the existing list.
8403
+ */
8404
+ var CREDENTIAL_PARAM_PATTERNS = [
8405
+ /^user$/i,
8406
+ /^usr$/i,
8407
+ /^username$/i,
8408
+ /^password$/i,
8409
+ /^pwd$/i,
8410
+ /^pass$/i,
8411
+ /^passwd$/i,
8412
+ /^secret$/i,
8413
+ /^token$/i,
8414
+ /^auth$/i,
8415
+ /^auth[_-]?token$/i,
8416
+ /^bearer$/i,
8417
+ /^api[_-]?key$/i,
8418
+ /^access[_-]?token$/i,
8419
+ /^refresh[_-]?token$/i,
8420
+ /^bridge$/i,
8421
+ /^code$/i,
8422
+ /^state$/i,
8423
+ /^challenge$/i,
8424
+ /^link$/i
8425
+ ];
8426
+ function isCredentialParam(name) {
8427
+ return CREDENTIAL_PARAM_PATTERNS.some((re) => re.test(name));
8428
+ }
8429
+ /**
8430
+ * Redact secrets we may surface in logs or telemetry:
8431
+ * 1. `userinfo` (`user:password@host`) — the classic RTSP shape.
8432
+ * 2. Query-string credential params (`?user=...&password=...`) — the
8433
+ * Reolink RTMP shape and several HTTP-pushed-stream APIs.
8434
+ *
8435
+ * Returns the original string verbatim when the input is not a parseable
8436
+ * URL — a log helper must never throw. Param values are replaced with
8437
+ * `***` so an operator reading logs still sees WHICH credential was
8438
+ * present (useful for debugging "wrong password" issues) without
8439
+ * exposing the value.
8440
+ *
8441
+ * The credential-name match is case-insensitive but anchored to the
8442
+ * whole param name; values like `user_id=42` or `topic=password-reset`
8443
+ * are NOT masked (those are entity references, not credentials).
8444
+ */
8445
+ function maskUrlCredentials(rawUrl) {
8446
+ if (rawUrl.startsWith("/") && !rawUrl.startsWith("//")) {
8447
+ const masked = maskUrlCredentials(`http://relative.invalid${rawUrl}`);
8448
+ return masked.startsWith("http://relative.invalid") ? masked.slice(23) : rawUrl;
8449
+ }
8450
+ try {
8451
+ const u = new URL(rawUrl);
8452
+ let touched = false;
8453
+ if (u.username || u.password) {
8454
+ u.username = "";
8455
+ u.password = "";
8456
+ touched = true;
8457
+ }
8458
+ for (const key of Array.from(u.searchParams.keys())) if (isCredentialParam(key)) {
8459
+ u.searchParams.set(key, "***");
8460
+ touched = true;
8461
+ }
8462
+ return touched ? u.toString() : rawUrl;
8463
+ } catch {
8464
+ return rawUrl;
8465
+ }
8466
+ }
8374
8467
  /**
8375
8468
  * Promise-based timer helpers — used everywhere the codebase needs to
8376
8469
  * wait, back off, or schedule a retry. Before these helpers landed, each
@@ -8726,7 +8819,7 @@ function errMsg(err) {
8726
8819
  return String(err);
8727
8820
  }
8728
8821
  //#endregion
8729
- //#region ../types/dist/composition-Bzr7GwgP.mjs
8822
+ //#region ../types/dist/composition-C-WpVYTX.mjs
8730
8823
  var AUDIO_ENCODER_BY_CODEC = {
8731
8824
  opus: "libopus",
8732
8825
  aac: "aac",
@@ -9485,7 +9578,7 @@ var BASE = `https://github.com/jellyfin/jellyfin-ffmpeg/releases/download/v${FFM
9485
9578
  function portable(target) {
9486
9579
  return `${BASE}/jellyfin-ffmpeg_${FFMPEG_RELEASE}_portable_${target}-gpl.tar.xz`;
9487
9580
  }
9488
- portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64");
9581
+ portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64"), `${BASE}${FFMPEG_RELEASE}`;
9489
9582
  /**
9490
9583
  * THE table "which boolean of this device type counts as HIGH", and the
9491
9584
  * pure evaluator of its EDGE.
@@ -14114,14 +14207,6 @@ function containingParentIndex(child, parents) {
14114
14207
  });
14115
14208
  return best;
14116
14209
  }
14117
- var MODEL_FORMATS = [
14118
- "onnx",
14119
- "coreml",
14120
- "openvino",
14121
- "tflite",
14122
- "pt",
14123
- "gguf"
14124
- ];
14125
14210
  /**
14126
14211
  * Multi-file format payload.
14127
14212
  *
@@ -44706,8 +44791,6 @@ Object.freeze({
44706
44791
  vehicle: .65,
44707
44792
  animal: .65
44708
44793
  });
44709
- var HF_REPO = "camstack/camstack-models";
44710
- `${HF_REPO}`;
44711
44794
  /**
44712
44795
  * Accessory device helpers — shared across drivers.
44713
44796
  *
@@ -58108,82 +58191,6 @@ var BackgroundRunRegistry = class {
58108
58191
  }
58109
58192
  }
58110
58193
  };
58111
- function hfModelUrl(repo, path) {
58112
- return `https://huggingface.co/${repo}/resolve/main/${path}`;
58113
- }
58114
- /**
58115
- * Names that, when used as URL query parameters, almost certainly carry
58116
- * a secret. Matching is case-insensitive and anchored to the full param
58117
- * name to avoid false positives like `user_id` (an entity reference, not
58118
- * a credential) or `topic=password-reset` (a value happens to contain
58119
- * the substring "password" but the param name is unrelated).
58120
- *
58121
- * Add new patterns here as we encounter cameras/APIs that leak through
58122
- * the existing list.
58123
- */
58124
- var CREDENTIAL_PARAM_PATTERNS = [
58125
- /^user$/i,
58126
- /^usr$/i,
58127
- /^username$/i,
58128
- /^password$/i,
58129
- /^pwd$/i,
58130
- /^pass$/i,
58131
- /^passwd$/i,
58132
- /^secret$/i,
58133
- /^token$/i,
58134
- /^auth$/i,
58135
- /^auth[_-]?token$/i,
58136
- /^bearer$/i,
58137
- /^api[_-]?key$/i,
58138
- /^access[_-]?token$/i,
58139
- /^refresh[_-]?token$/i,
58140
- /^bridge$/i,
58141
- /^code$/i,
58142
- /^state$/i,
58143
- /^challenge$/i,
58144
- /^link$/i
58145
- ];
58146
- function isCredentialParam(name) {
58147
- return CREDENTIAL_PARAM_PATTERNS.some((re) => re.test(name));
58148
- }
58149
- /**
58150
- * Redact secrets we may surface in logs or telemetry:
58151
- * 1. `userinfo` (`user:password@host`) — the classic RTSP shape.
58152
- * 2. Query-string credential params (`?user=...&password=...`) — the
58153
- * Reolink RTMP shape and several HTTP-pushed-stream APIs.
58154
- *
58155
- * Returns the original string verbatim when the input is not a parseable
58156
- * URL — a log helper must never throw. Param values are replaced with
58157
- * `***` so an operator reading logs still sees WHICH credential was
58158
- * present (useful for debugging "wrong password" issues) without
58159
- * exposing the value.
58160
- *
58161
- * The credential-name match is case-insensitive but anchored to the
58162
- * whole param name; values like `user_id=42` or `topic=password-reset`
58163
- * are NOT masked (those are entity references, not credentials).
58164
- */
58165
- function maskUrlCredentials(rawUrl) {
58166
- if (rawUrl.startsWith("/") && !rawUrl.startsWith("//")) {
58167
- const masked = maskUrlCredentials(`http://relative.invalid${rawUrl}`);
58168
- return masked.startsWith("http://relative.invalid") ? masked.slice(23) : rawUrl;
58169
- }
58170
- try {
58171
- const u = new URL(rawUrl);
58172
- let touched = false;
58173
- if (u.username || u.password) {
58174
- u.username = "";
58175
- u.password = "";
58176
- touched = true;
58177
- }
58178
- for (const key of Array.from(u.searchParams.keys())) if (isCredentialParam(key)) {
58179
- u.searchParams.set(key, "***");
58180
- touched = true;
58181
- }
58182
- return touched ? u.toString() : rawUrl;
58183
- } catch {
58184
- return rawUrl;
58185
- }
58186
- }
58187
58194
  var MB = 1024 * 1024;
58188
58195
  var DEFAULT_POOL_MEMORY_POLICY = {
58189
58196
  sampleIntervalMs: 6e4,
@@ -58624,7 +58631,7 @@ var RUNTIMES = [
58624
58631
  value: "cuda",
58625
58632
  label: "CUDA"
58626
58633
  });
58627
- if (hw.gpu?.type === "amd") out.push({
58634
+ if (hw.gpu?.type === "amd" && hw.platform === "linux") out.push({
58628
58635
  value: "webgpu",
58629
58636
  label: "WebGPU (AMD iGPU)"
58630
58637
  });
@@ -58753,7 +58760,7 @@ function scoreRuntimes(hw) {
58753
58760
  });
58754
58761
  }
58755
58762
  if (hw.gpu?.type === "amd") {
58756
- scores.push({
58763
+ if (hw.platform === "linux") scores.push({
58757
58764
  runtime: "python",
58758
58765
  backend: "onnx",
58759
58766
  format: "onnx",
@@ -58846,4 +58853,4 @@ function enumerateInferenceDevices(hw) {
58846
58853
  return out;
58847
58854
  }
58848
58855
  //#endregion
58849
- export { audioAnalysisCapability as $, discriminatedUnion as $n, pipelineRunnerCapability as $t, LABEL_SUPPLY_VOCABULARIES as A, DeviceFeature as An, gifFromMp4Args as At, RECORDING_EXPORT_MAX_READ_BYTES as B, defineCustomActions as Bn, mayReadLocation as Bt, EVENT_PAD_MS as C, AUDIO_PRESETS as Cn, evictionPolicyForMode as Ct, G711_SCALE_CORRECTION_DB as D, evaluateSensorEdge as Dn, ffmpegRate as Dt, FailureCounters as E, buildFfmpegArgs as En, failureContributionCapability as Et, OpsLogEntrySchema as F, CAM_PROFILE_ORDER as Fn, linkedStepOf as Ft, RecordingSignalStatusSchema as G, makeSourceBrokerId as Gn, modelBindingKey as Gt, RECORDING_SOURCE_CAMSTACK_ADDON as H, hydrateSchema as Hn, memoizePinnedFfmpeg as Ht, PIPELINE_RAMP as I, CamProfileSchema as In, loadContributionCapability as It, VISIT_MERGE_GAP_MS as J, selectAssignedProfileSlots as Jn, parseProcStatus as Jt, RingBuffer as K, nodePin as Kn, motionDetectionCapability as Kt, PoolMemoryWatchdog as L, audioChunkBytesPerSample as Ln, logChannelsCapability as Lt, NativeLeaseAdmissionSchema as M, errMsg as Mn, inferModelProvider as Mt, NativeLeaseSettingsSchema as N, BOOT_RECOVERY_BACKOFF_MS as Nn, isFirstLevelMacroClass as Nt, HF_REPO as O, invocationFromEncodeProfile as On, gbToBytes as Ot, NodeBenchRunnerInputSchema as P, BaseAddon as Pn, linkedLabelStepId as Pt, applyModelBoundSettings as Q, boolean as Qn, pipelineExecutorCapability as Qt, RATE_CONTROL_RELAXED as R, createEvent as Rn, mapAudioLabelToMacro as Rt, EVENT_OWNER_TYPES as S, webrtcSessionCapability as Sn, evaluateZoneRules as St, ExportRecordSchema as T, Fmp4BoxSplitter as Tn, exportSubjectOf as Tt, ROOT_SUPPLIABLE_STEP_IDS as U, isEvent as Un, migrateLegacyDeviceSignalConfig as Ut, RECORDING_SOURCE_CAMSTACK as V, expandAudioChunkToF32le as Vn, mayWriteToLocation as Vt, RecordingConfigSchema as W, makeProfileBrokerId as Wn, modeMayWrite as Wt, addonWidgetsSourceCapability as X, _enum as Xn, pickDetailCropConvention as Xt, YAMNET_TO_MACRO as Y, sleep as Yn, pickClusterStepSettings as Yt, allowedSuppliedEffect as Z, array as Zn, pickNativeLeaseOverride as Zt, DEFAULT_DETAIL_CROP_CONVENTION as _, storageOccupancyCapability as _n, deriveRootFaceRefineRect as _t, BackgroundRunRegistry as a, resolveClusterStepModelId as an, record as ar, cameraStreamsCapability as at, DEVICE_BACKEND_TO_FORMAT as b, supportedRuntimes as bn, egressTransportFromRequest as bt, CLIP_STILL_REASON_CODE_HEADER as c, resolveLocationMode as cn, EventCategory as cr, collectModelBoundKeys as ct, CLUSTER_MODEL_SCOPED_STEPS as d, resolveRecordingProfiles as dn, createLogChannelsProvider as dt, rankStreams as en, lazy as er, audioAnalyzerCapability as et, COCO_80_LABELS as f, resolveRootSupply as fn, declareLogChannel as ft, DEFAULT_CLUSTER_STEP_SETTINGS as g, storageEvictableCapability as gn, deriveRecordingMode as gt, DEFAULT_AUDIO_ANALYZER_CONFIG as h, stepModelRunsOnFormat as hn, deriveDetailCropRect as ht, AUDIO_MACRO_LABELS as i, recordingSignalCapability as in, preprocess as ir, cameraOwnsMotionViaSensor as it, MODEL_FORMATS as j, DeviceType as jn, hfModelUrl as jt, LABEL_SUPPLY_MACRO as k, isSoftwareDecode as kn, gifDeriveSpeed as kt, CLIP_STILL_REASON_HEADER as l, resolveModelBoundSetting as ln, containingParentIndex as lt, CROP_SUPPLY_SOURCES as m, runtimeDevices as mn, deriveBatteryPresence as mt, APPLE_SA_TO_MACRO as n, recordingCapability as nn, number as nr, batteryCapability as nt, BatteryStatusSchema as o, resolveCreateExportSubject as on, string as or, clipExportFailure as ot, COCO_TO_MACRO as p, rootSuppliesOf as pn, defaultDeviceFor as pt, VIDEOCLIPS_MAX_OFFER_BYTES as q, parseProfileBrokerId as qn, overlayClusterStepSettings as qt, AUDIO_BACKEND_CHOICES as r, recordingExportCapability as rn, object as rr, buildBenchStepTree as rt, CLIP_BROKER_PACED_RATES as s, resolveEgressDecodeHwAccel as sn, union as sr, clipExportFailureOf as st, APPEARANCE_BLOCKS as t, recordingArchiveCapability as tn, literal as tr, audioKindId as tt, CLIP_STREAM_TRANSPORT_HEADER as u, resolvePoolMemoryPolicy as un, createHwAccelCache as ut, DEFAULT_EVENTS_BAND_BUFFER_SEC as v, streamBrokerCapability as vn, detectionPipelineCapability as vt, EncodeProfileSchema as w, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as wn, evictionPolicyOfLocation as wt, DEVICE_RAMP as x, videoclipsCapability as xn, enumerateInferenceDevices as xt, DEFAULT_NATIVE_LEASE_SETTINGS as y, stripRetiredBandPreBufferSec as yn, egressTranscodeSharingKey as yt, RATE_CONTROL_TIGHT as z, customAction as zn, maskUrlCredentials as zt };
58856
+ export { audioKindId as $, discriminatedUnion as $n, recordingExportCapability as $t, NativeLeaseAdmissionSchema as A, BaseAddon as An, isFirstLevelMacroClass as At, RECORDING_SOURCE_CAMSTACK_ADDON as B, hfModelUrl as Bn, modeMayWrite as Bt, EVENT_PAD_MS as C, evaluateSensorEdge as Cn, exportSubjectOf as Ct, G711_SCALE_CORRECTION_DB as D, DeviceType as Dn, gifDeriveSpeed as Dt, FailureCounters as E, DeviceFeature as En, gbToBytes as Et, PoolMemoryWatchdog as F, audioChunkBytesPerSample as Fn, mapAudioLabelToMacro as Ft, VIDEOCLIPS_MAX_OFFER_BYTES as G, maskUrlCredentials as Gn, pickClusterStepSettings as Gt, RecordingConfigSchema as H, isEvent as Hn, motionDetectionCapability as Ht, RATE_CONTROL_RELAXED as I, createEvent as In, mayReadLocation as It, addonWidgetsSourceCapability as J, selectAssignedProfileSlots as Jn, pipelineExecutorCapability as Jt, VISIT_MERGE_GAP_MS as K, nodePin as Kn, pickDetailCropConvention as Kt, RATE_CONTROL_TIGHT as L, customAction as Ln, mayWriteToLocation as Lt, NodeBenchRunnerInputSchema as M, CamProfileSchema as Mn, linkedStepOf as Mt, OpsLogEntrySchema as N, HF_REPO as Nn, loadContributionCapability as Nt, LABEL_SUPPLY_MACRO as O, errMsg as On, gifFromMp4Args as Ot, PIPELINE_RAMP as P, MODEL_FORMATS as Pn, logChannelsCapability as Pt, audioAnalyzerCapability as Q, boolean as Qn, recordingCapability as Qt, RECORDING_EXPORT_MAX_READ_BYTES as R, defineCustomActions as Rn, memoizePinnedFfmpeg as Rt, EVENT_OWNER_TYPES as S, buildFfmpegArgs as Sn, evictionPolicyOfLocation as St, ExportRecordSchema as T, isSoftwareDecode as Tn, ffmpegRate as Tt, RecordingSignalStatusSchema as U, makeProfileBrokerId as Un, overlayClusterStepSettings as Ut, ROOT_SUPPLIABLE_STEP_IDS as V, hydrateSchema as Vn, modelBindingKey as Vt, RingBuffer as W, makeSourceBrokerId as Wn, parseProcStatus as Wt, applyModelBoundSettings as X, _enum as Xn, rankStreams as Xt, allowedSuppliedEffect as Y, sleep as Yn, pipelineRunnerCapability as Yt, audioAnalysisCapability as Z, array as Zn, recordingArchiveCapability as Zt, DEFAULT_DETAIL_CROP_CONVENTION as _, videoclipsCapability as _n, egressTranscodeSharingKey as _t, BackgroundRunRegistry as a, resolveModelBoundSetting as an, record as ar, clipExportFailureOf as at, DEVICE_BACKEND_TO_FORMAT as b, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as bn, evaluateZoneRules as bt, CLIP_STILL_REASON_CODE_HEADER as c, resolveRootSupply as cn, EventCategory as cr, createHwAccelCache as ct, CLUSTER_MODEL_SCOPED_STEPS as d, stepModelRunsOnFormat as dn, defaultDeviceFor as dt, recordingSignalCapability as en, lazy as er, batteryCapability as et, COCO_80_LABELS as f, storageEvictableCapability as fn, deriveBatteryPresence as ft, DEFAULT_CLUSTER_STEP_SETTINGS as g, supportedRuntimes as gn, detectionPipelineCapability as gt, DEFAULT_AUDIO_ANALYZER_CONFIG as h, stripRetiredBandPreBufferSec as hn, deriveRootFaceRefineRect as ht, AUDIO_MACRO_LABELS as i, resolveLocationMode as in, preprocess as ir, clipExportFailure as it, NativeLeaseSettingsSchema as j, CAM_PROFILE_ORDER as jn, linkedLabelStepId as jt, LABEL_SUPPLY_VOCABULARIES as k, BOOT_RECOVERY_BACKOFF_MS as kn, inferModelProvider as kt, CLIP_STILL_REASON_HEADER as l, rootSuppliesOf as ln, createLogChannelsProvider as lt, CROP_SUPPLY_SOURCES as m, streamBrokerCapability as mn, deriveRecordingMode as mt, APPLE_SA_TO_MACRO as n, resolveCreateExportSubject as nn, number as nr, cameraOwnsMotionViaSensor as nt, BatteryStatusSchema as o, resolvePoolMemoryPolicy as on, string as or, collectModelBoundKeys as ot, COCO_TO_MACRO as p, storageOccupancyCapability as pn, deriveDetailCropRect as pt, YAMNET_TO_MACRO as q, parseProfileBrokerId as qn, pickNativeLeaseOverride as qt, AUDIO_BACKEND_CHOICES as r, resolveEgressDecodeHwAccel as rn, object as rr, cameraStreamsCapability as rt, CLIP_BROKER_PACED_RATES as s, resolveRecordingProfiles as sn, union as sr, containingParentIndex as st, APPEARANCE_BLOCKS as t, resolveClusterStepModelId as tn, literal as tr, buildBenchStepTree as tt, CLIP_STREAM_TRANSPORT_HEADER as u, runtimeDevices as un, declareLogChannel as ut, DEFAULT_EVENTS_BAND_BUFFER_SEC as v, webrtcSessionCapability as vn, egressTransportFromRequest as vt, EncodeProfileSchema as w, invocationFromEncodeProfile as wn, failureContributionCapability as wt, DEVICE_RAMP as x, Fmp4BoxSplitter as xn, evictionPolicyForMode as xt, DEFAULT_NATIVE_LEASE_SETTINGS as y, AUDIO_PRESETS as yn, enumerateInferenceDevices as yt, RECORDING_SOURCE_CAMSTACK as z, expandAudioChunkToF32le as zn, migrateLegacyDeviceSignalConfig as zt };
@@ -5387,7 +5387,7 @@ var ZodIssueCode = {
5387
5387
  var ZodFirstPartyTypeKind;
5388
5388
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5389
5389
  //#endregion
5390
- //#region ../types/dist/sleep-Tkp9dHXv.mjs
5390
+ //#region ../types/dist/sleep-vWTnHq9G.mjs
5391
5391
  /**
5392
5392
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5393
5393
  * window to float samples (D455).
@@ -8101,6 +8101,21 @@ var ProfileRtspEntrySchema = object({
8101
8101
  resolution: CamStreamResolutionSchema.optional()
8102
8102
  });
8103
8103
  /**
8104
+ * The model weight formats a catalog entry can ship. Schema-free on purpose:
8105
+ * `types/models.ts` builds Zod schemas from it, but a runner-closure consumer
8106
+ * (the model downloader in `@camstack/system`) needs only the list and must
8107
+ * reach it through `@camstack/types/addon` without building the cap schema
8108
+ * graph (D28).
8109
+ */
8110
+ var MODEL_FORMATS = [
8111
+ "onnx",
8112
+ "coreml",
8113
+ "openvino",
8114
+ "tflite",
8115
+ "pt",
8116
+ "gguf"
8117
+ ];
8118
+ /**
8104
8119
  * Per-call node pinning for `ctx.api` capability calls.
8105
8120
  *
8106
8121
  * A capability call normally resolves to its DEFAULT provider — a `singleton`
@@ -8337,6 +8352,8 @@ method(object({ deviceId: number() }), array(StreamSourceEntrySchema)), method(o
8337
8352
  kind: "mutation",
8338
8353
  auth: "admin"
8339
8354
  }), method(object({ deviceId: number() }), unknown().nullable()), method(object({ deviceId: number() }), RawStateResultSchema.nullable(), { auth: "protected" });
8355
+ var HF_REPO = "camstack/camstack-models";
8356
+ `${HF_REPO}`;
8340
8357
  /**
8341
8358
  * The ONE retry schedule for work that can fail simply because the node was
8342
8359
  * still booting.
@@ -8371,6 +8388,82 @@ var BOOT_RECOVERY_BACKOFF_MS = [
8371
8388
  60 * 6e4,
8372
8389
  90 * 6e4
8373
8390
  ];
8391
+ function hfModelUrl(repo, path) {
8392
+ return `https://huggingface.co/${repo}/resolve/main/${path}`;
8393
+ }
8394
+ /**
8395
+ * Names that, when used as URL query parameters, almost certainly carry
8396
+ * a secret. Matching is case-insensitive and anchored to the full param
8397
+ * name to avoid false positives like `user_id` (an entity reference, not
8398
+ * a credential) or `topic=password-reset` (a value happens to contain
8399
+ * the substring "password" but the param name is unrelated).
8400
+ *
8401
+ * Add new patterns here as we encounter cameras/APIs that leak through
8402
+ * the existing list.
8403
+ */
8404
+ var CREDENTIAL_PARAM_PATTERNS = [
8405
+ /^user$/i,
8406
+ /^usr$/i,
8407
+ /^username$/i,
8408
+ /^password$/i,
8409
+ /^pwd$/i,
8410
+ /^pass$/i,
8411
+ /^passwd$/i,
8412
+ /^secret$/i,
8413
+ /^token$/i,
8414
+ /^auth$/i,
8415
+ /^auth[_-]?token$/i,
8416
+ /^bearer$/i,
8417
+ /^api[_-]?key$/i,
8418
+ /^access[_-]?token$/i,
8419
+ /^refresh[_-]?token$/i,
8420
+ /^bridge$/i,
8421
+ /^code$/i,
8422
+ /^state$/i,
8423
+ /^challenge$/i,
8424
+ /^link$/i
8425
+ ];
8426
+ function isCredentialParam(name) {
8427
+ return CREDENTIAL_PARAM_PATTERNS.some((re) => re.test(name));
8428
+ }
8429
+ /**
8430
+ * Redact secrets we may surface in logs or telemetry:
8431
+ * 1. `userinfo` (`user:password@host`) — the classic RTSP shape.
8432
+ * 2. Query-string credential params (`?user=...&password=...`) — the
8433
+ * Reolink RTMP shape and several HTTP-pushed-stream APIs.
8434
+ *
8435
+ * Returns the original string verbatim when the input is not a parseable
8436
+ * URL — a log helper must never throw. Param values are replaced with
8437
+ * `***` so an operator reading logs still sees WHICH credential was
8438
+ * present (useful for debugging "wrong password" issues) without
8439
+ * exposing the value.
8440
+ *
8441
+ * The credential-name match is case-insensitive but anchored to the
8442
+ * whole param name; values like `user_id=42` or `topic=password-reset`
8443
+ * are NOT masked (those are entity references, not credentials).
8444
+ */
8445
+ function maskUrlCredentials(rawUrl) {
8446
+ if (rawUrl.startsWith("/") && !rawUrl.startsWith("//")) {
8447
+ const masked = maskUrlCredentials(`http://relative.invalid${rawUrl}`);
8448
+ return masked.startsWith("http://relative.invalid") ? masked.slice(23) : rawUrl;
8449
+ }
8450
+ try {
8451
+ const u = new URL(rawUrl);
8452
+ let touched = false;
8453
+ if (u.username || u.password) {
8454
+ u.username = "";
8455
+ u.password = "";
8456
+ touched = true;
8457
+ }
8458
+ for (const key of Array.from(u.searchParams.keys())) if (isCredentialParam(key)) {
8459
+ u.searchParams.set(key, "***");
8460
+ touched = true;
8461
+ }
8462
+ return touched ? u.toString() : rawUrl;
8463
+ } catch {
8464
+ return rawUrl;
8465
+ }
8466
+ }
8374
8467
  /**
8375
8468
  * Promise-based timer helpers — used everywhere the codebase needs to
8376
8469
  * wait, back off, or schedule a retry. Before these helpers landed, each
@@ -8726,7 +8819,7 @@ function errMsg(err) {
8726
8819
  return String(err);
8727
8820
  }
8728
8821
  //#endregion
8729
- //#region ../types/dist/composition-Bzr7GwgP.mjs
8822
+ //#region ../types/dist/composition-C-WpVYTX.mjs
8730
8823
  var AUDIO_ENCODER_BY_CODEC = {
8731
8824
  opus: "libopus",
8732
8825
  aac: "aac",
@@ -9485,7 +9578,7 @@ var BASE = `https://github.com/jellyfin/jellyfin-ffmpeg/releases/download/v${FFM
9485
9578
  function portable(target) {
9486
9579
  return `${BASE}/jellyfin-ffmpeg_${FFMPEG_RELEASE}_portable_${target}-gpl.tar.xz`;
9487
9580
  }
9488
- portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64");
9581
+ portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64"), `${BASE}${FFMPEG_RELEASE}`;
9489
9582
  /**
9490
9583
  * THE table "which boolean of this device type counts as HIGH", and the
9491
9584
  * pure evaluator of its EDGE.
@@ -14114,14 +14207,6 @@ function containingParentIndex(child, parents) {
14114
14207
  });
14115
14208
  return best;
14116
14209
  }
14117
- var MODEL_FORMATS = [
14118
- "onnx",
14119
- "coreml",
14120
- "openvino",
14121
- "tflite",
14122
- "pt",
14123
- "gguf"
14124
- ];
14125
14210
  /**
14126
14211
  * Multi-file format payload.
14127
14212
  *
@@ -44706,8 +44791,6 @@ Object.freeze({
44706
44791
  vehicle: .65,
44707
44792
  animal: .65
44708
44793
  });
44709
- var HF_REPO = "camstack/camstack-models";
44710
- `${HF_REPO}`;
44711
44794
  /**
44712
44795
  * Accessory device helpers — shared across drivers.
44713
44796
  *
@@ -58108,82 +58191,6 @@ var BackgroundRunRegistry = class {
58108
58191
  }
58109
58192
  }
58110
58193
  };
58111
- function hfModelUrl(repo, path) {
58112
- return `https://huggingface.co/${repo}/resolve/main/${path}`;
58113
- }
58114
- /**
58115
- * Names that, when used as URL query parameters, almost certainly carry
58116
- * a secret. Matching is case-insensitive and anchored to the full param
58117
- * name to avoid false positives like `user_id` (an entity reference, not
58118
- * a credential) or `topic=password-reset` (a value happens to contain
58119
- * the substring "password" but the param name is unrelated).
58120
- *
58121
- * Add new patterns here as we encounter cameras/APIs that leak through
58122
- * the existing list.
58123
- */
58124
- var CREDENTIAL_PARAM_PATTERNS = [
58125
- /^user$/i,
58126
- /^usr$/i,
58127
- /^username$/i,
58128
- /^password$/i,
58129
- /^pwd$/i,
58130
- /^pass$/i,
58131
- /^passwd$/i,
58132
- /^secret$/i,
58133
- /^token$/i,
58134
- /^auth$/i,
58135
- /^auth[_-]?token$/i,
58136
- /^bearer$/i,
58137
- /^api[_-]?key$/i,
58138
- /^access[_-]?token$/i,
58139
- /^refresh[_-]?token$/i,
58140
- /^bridge$/i,
58141
- /^code$/i,
58142
- /^state$/i,
58143
- /^challenge$/i,
58144
- /^link$/i
58145
- ];
58146
- function isCredentialParam(name) {
58147
- return CREDENTIAL_PARAM_PATTERNS.some((re) => re.test(name));
58148
- }
58149
- /**
58150
- * Redact secrets we may surface in logs or telemetry:
58151
- * 1. `userinfo` (`user:password@host`) — the classic RTSP shape.
58152
- * 2. Query-string credential params (`?user=...&password=...`) — the
58153
- * Reolink RTMP shape and several HTTP-pushed-stream APIs.
58154
- *
58155
- * Returns the original string verbatim when the input is not a parseable
58156
- * URL — a log helper must never throw. Param values are replaced with
58157
- * `***` so an operator reading logs still sees WHICH credential was
58158
- * present (useful for debugging "wrong password" issues) without
58159
- * exposing the value.
58160
- *
58161
- * The credential-name match is case-insensitive but anchored to the
58162
- * whole param name; values like `user_id=42` or `topic=password-reset`
58163
- * are NOT masked (those are entity references, not credentials).
58164
- */
58165
- function maskUrlCredentials(rawUrl) {
58166
- if (rawUrl.startsWith("/") && !rawUrl.startsWith("//")) {
58167
- const masked = maskUrlCredentials(`http://relative.invalid${rawUrl}`);
58168
- return masked.startsWith("http://relative.invalid") ? masked.slice(23) : rawUrl;
58169
- }
58170
- try {
58171
- const u = new URL(rawUrl);
58172
- let touched = false;
58173
- if (u.username || u.password) {
58174
- u.username = "";
58175
- u.password = "";
58176
- touched = true;
58177
- }
58178
- for (const key of Array.from(u.searchParams.keys())) if (isCredentialParam(key)) {
58179
- u.searchParams.set(key, "***");
58180
- touched = true;
58181
- }
58182
- return touched ? u.toString() : rawUrl;
58183
- } catch {
58184
- return rawUrl;
58185
- }
58186
- }
58187
58194
  var MB = 1024 * 1024;
58188
58195
  var DEFAULT_POOL_MEMORY_POLICY = {
58189
58196
  sampleIntervalMs: 6e4,
@@ -58624,7 +58631,7 @@ var RUNTIMES = [
58624
58631
  value: "cuda",
58625
58632
  label: "CUDA"
58626
58633
  });
58627
- if (hw.gpu?.type === "amd") out.push({
58634
+ if (hw.gpu?.type === "amd" && hw.platform === "linux") out.push({
58628
58635
  value: "webgpu",
58629
58636
  label: "WebGPU (AMD iGPU)"
58630
58637
  });
@@ -58753,7 +58760,7 @@ function scoreRuntimes(hw) {
58753
58760
  });
58754
58761
  }
58755
58762
  if (hw.gpu?.type === "amd") {
58756
- scores.push({
58763
+ if (hw.platform === "linux") scores.push({
58757
58764
  runtime: "python",
58758
58765
  backend: "onnx",
58759
58766
  format: "onnx",
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-8okS4wxl.js");
1
+ const require_dist = require("./dist-DFGiI5lr.js");
2
2
  //#region src/detection-pipeline/registry/model-licenses.ts
3
3
  var COCO_DATA = {
4
4
  name: "COCO 2017",
@@ -1,4 +1,4 @@
1
- import { jt as hfModelUrl } from "./dist-TseSUtZJ.mjs";
1
+ import { Bn as hfModelUrl } from "./dist-73R05PFN.mjs";
2
2
  //#region src/detection-pipeline/registry/model-licenses.ts
3
3
  var COCO_DATA = {
4
4
  name: "COCO 2017",
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-8okS4wxl.js");
5
+ const require_dist = require("../dist-DFGiI5lr.js");
6
6
  const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
7
7
  let node_fs = require("node:fs");
8
8
  let node_path = require("node:path");