@camstack/addon-post-analysis 1.2.336 → 1.2.338

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 (15) hide show
  1. package/dist/{clip-model-registry-D7e1kEqc.mjs → clip-model-registry-BLUVLdlY.mjs} +492 -195
  2. package/dist/{clip-model-registry-BxUHFGUg.js → clip-model-registry-BcSLJ8aL.js} +502 -193
  3. package/dist/embedding-encoder/index.js +2 -2
  4. package/dist/embedding-encoder/index.mjs +2 -2
  5. package/dist/pipeline-analytics/_stub.js +2 -2
  6. package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-y9isEkU9.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-DDfv_NZB.mjs} +2 -2
  7. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D3jDbheU.mjs +26 -0
  8. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BRmdbHeK.mjs +26 -0
  9. package/dist/pipeline-analytics/{hostInit-DH7hZ_gJ.mjs → hostInit-BTA95n_5.mjs} +2 -2
  10. package/dist/pipeline-analytics/index.js +149 -62
  11. package/dist/pipeline-analytics/index.mjs +149 -62
  12. package/dist/pipeline-analytics/remoteEntry.js +1 -1
  13. package/package.json +2 -2
  14. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BZ-aada5.mjs +0 -26
  15. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DxUsRAkr.mjs +0 -26
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_clip_model_registry = require("../clip-model-registry-BxUHFGUg.js");
5
+ const require_clip_model_registry = require("../clip-model-registry-BcSLJ8aL.js");
6
6
  let node_fs = require("node:fs");
7
7
  node_fs = require_clip_model_registry.__toESM(node_fs, 1);
8
8
  let node_path = require("node:path");
@@ -4657,8 +4657,8 @@ function verifyArtifactSignature(input) {
4657
4657
  //#region src/notification-center/artifact-plane.ts
4658
4658
  /**
4659
4659
  * The hub's default HTTPS API port — the same constant `derive-hub-url.ts`
4660
- * documents. Only used for the LAN candidates; an operator who runs the hub on
4661
- * another port sets `CAMSTACK_HUB_PUBLIC_URL`, which wins outright.
4660
+ * documents. Only a legacy hint for the LAN candidates: `local-network`
4661
+ * builds them with the port the hub really listens on.
4662
4662
  */
4663
4663
  var HUB_API_PORT = 4443;
4664
4664
  /**
@@ -4667,12 +4667,11 @@ var HUB_API_PORT = 4443;
4667
4667
  * zero to outrank it.
4668
4668
  */
4669
4669
  var PRIORITY_MARKED = -400;
4670
- var PRIORITY_CONFIGURED = -300;
4671
4670
  var PRIORITY_CONNECTED = -200;
4672
4671
  var PRIORITY_EXTERNAL_LIST = -100;
4673
4672
  /**
4674
- * Build the ranked candidate list, in the operator's own order: an explicitly
4675
- * configured public origin, then the connected external ingress (tunnels),
4673
+ * Build the ranked candidate list, in the operator's own order: the address
4674
+ * marked on the Network page, then the connected external ingress (tunnels),
4676
4675
  * then the LAN addresses. Every source is best-effort — one that throws
4677
4676
  * contributes nothing rather than costing the whole list.
4678
4677
  */
@@ -4684,12 +4683,6 @@ async function collectArtifactEndpoints(sources) {
4684
4683
  kind: "public",
4685
4684
  priority: PRIORITY_MARKED
4686
4685
  });
4687
- const configured = sources.configuredPublicUrl;
4688
- if (configured !== void 0 && configured !== "" && !/127\.0\.0\.1|localhost/.test(configured)) out.push({
4689
- baseUrl: configured,
4690
- kind: "public",
4691
- priority: PRIORITY_CONFIGURED
4692
- });
4693
4686
  try {
4694
4687
  const connected = await sources.getConnected();
4695
4688
  if (connected !== null && connected.protocol === "https") out.push({
@@ -45360,10 +45353,10 @@ var MediaStore = class MediaStore {
45360
45353
  ownerKind: params.ownerKind,
45361
45354
  ownerId: params.ownerId,
45362
45355
  kind: params.kind,
45363
- hint: "pipeline-analytics:media must be rebuilt with an INTEGER PRIMARY KEY (D482)"
45356
+ hint: "pipeline-analytics:media must be rebuilt with an INTEGER PRIMARY KEY"
45364
45357
  }
45365
45358
  });
45366
- throw new Error(`MediaStore.put: "${MEDIA_COLLECTION}" returned a TEXT id (${id}) — the table has not been rebuilt with an INTEGER PRIMARY KEY (D482)`);
45359
+ throw new Error(`MediaStore.put: "${MEDIA_COLLECTION}" returned a TEXT id (${id}) — the table has not been rebuilt with an INTEGER PRIMARY KEY`);
45367
45360
  }
45368
45361
  this.pressure.noteSuccess();
45369
45362
  return id;
@@ -48815,7 +48808,7 @@ function planTrackMediaNames(media) {
48815
48808
  }
48816
48809
  return out;
48817
48810
  }
48818
- var DEBUG_RETENTION_NOTE = "A `debug` mark does not pin retention (D81). A track with no media here may have been evicted rather than never captured.";
48811
+ var DEBUG_RETENTION_NOTE = "A `debug` mark does not pin retention. A track with no media here may have been evicted rather than never captured.";
48819
48812
  /** The archive filename, stamped so two downloads never collide in ~/Downloads. */
48820
48813
  function debugArchiveFilename(nowMs) {
48821
48814
  return `camstack-debug-${new Date(nowMs).toISOString().replace(/[:.]/g, "-")}.zip`.replace(/[\r\n"]/g, "");
@@ -53428,7 +53421,7 @@ var FaceAlignmentJobs = class {
53428
53421
  const stores = this.deps.stores();
53429
53422
  if (stores === null) throw new Error("embedding.reenrolPhotos: the gallery stores are not ready");
53430
53423
  if (this.photoPassRunning) throw new Error("embedding.reenrolPhotos: a photo re-enrol pass is already running");
53431
- if (this.resetRunning) throw new Error("embedding.reenrolPhotos: a face gallery reset is running (D644)");
53424
+ if (this.resetRunning) throw new Error("embedding.reenrolPhotos: a face gallery reset is running");
53432
53425
  if (this.deps.isReembedRunning()) throw new Error("embedding.reenrolPhotos: a face re-embed pass is running — the photo pass waits for it");
53433
53426
  this.photoPassRunning = true;
53434
53427
  try {
@@ -53484,7 +53477,7 @@ var FaceAlignmentJobs = class {
53484
53477
  const stores = this.deps.stores();
53485
53478
  if (stores === null) throw new Error("embedding.backfillPhotoSources: the gallery stores are not ready");
53486
53479
  if (this.photoPassRunning) throw new Error("embedding.backfillPhotoSources: a photo re-enrol pass is running");
53487
- if (this.resetRunning) throw new Error("embedding.backfillPhotoSources: a face gallery reset is running (D644)");
53480
+ if (this.resetRunning) throw new Error("embedding.backfillPhotoSources: a face gallery reset is running");
53488
53481
  this.backfillRunning = true;
53489
53482
  try {
53490
53483
  return await this.runBackfill(stores, input);
@@ -61005,15 +60998,6 @@ function isIdleTrackerStats(stats) {
61005
60998
  }
61006
60999
  /** Shared empty — a fold is rare and every other frame would allocate. */
61007
61000
  var EMPTY_RIDER_FOLDS = [];
61008
- /** The steps a detection's linked labels stand in for (D715), or `undefined` for none. */
61009
- function linkedStepsOf(labels) {
61010
- if (labels === void 0) return void 0;
61011
- const steps = labels.flatMap((l) => {
61012
- const step = require_clip_model_registry.linkedStepOf(l.stepId);
61013
- return step === void 0 ? [] : [step];
61014
- });
61015
- return steps.length > 0 ? steps : void 0;
61016
- }
61017
61001
  /** The tape observation of a dropped frame: no gate verdict, nothing bound. */
61018
61002
  var DROPPED_FRAME_OBSERVATION = {
61019
61003
  gate: {
@@ -61564,6 +61548,7 @@ var FrameProcessor = class {
61564
61548
  const nativeRecoveryByBbox = /* @__PURE__ */ new Map();
61565
61549
  const birthEvidenceByBbox = /* @__PURE__ */ new Map();
61566
61550
  const faceBearingBoxes = /* @__PURE__ */ new Set();
61551
+ const rootChildBoxesByBbox = /* @__PURE__ */ new Map();
61567
61552
  const flatDetections = frame.detections.filter((d) => d.kind === "first-level").map((det) => {
61568
61553
  const bbox = {
61569
61554
  x: det.bbox.x,
@@ -61644,6 +61629,23 @@ var FrameProcessor = class {
61644
61629
  }
61645
61630
  });
61646
61631
  }
61632
+ for (const det of frame.detections) {
61633
+ if (det.kind !== "detail" || det.rootSupplied === void 0 || !det.parentId) continue;
61634
+ const parentBbox = firstLevelBboxById.get(det.parentId);
61635
+ if (parentBbox === void 0) continue;
61636
+ const boxes = rootChildBoxesByBbox.get(parentBbox) ?? [];
61637
+ rootChildBoxesByBbox.set(parentBbox, [...boxes, {
61638
+ stepId: det.rootSupplied.stepId,
61639
+ modelId: det.rootSupplied.modelId,
61640
+ score: det.score,
61641
+ bbox: {
61642
+ x: det.bbox.x,
61643
+ y: det.bbox.y,
61644
+ w: det.bbox.width,
61645
+ h: det.bbox.height
61646
+ }
61647
+ }]);
61648
+ }
61647
61649
  const { passed, excluded } = this.zoneEngine.filterDetections(flatDetections, this.zones, this.detectionRules, frameWidth, frameHeight, (fd) => fd.detection.class);
61648
61650
  this.reportZoneFiltered(excluded);
61649
61651
  let filteredDetections = passed.map((fd) => fd.detection);
@@ -61690,6 +61692,8 @@ var FrameProcessor = class {
61690
61692
  if (mask !== void 0) maskByBbox.set(to, mask);
61691
61693
  const plate = plateByBbox.get(from);
61692
61694
  if (plate !== void 0) plateByBbox.set(to, plate);
61695
+ const rootChildren = rootChildBoxesByBbox.get(from);
61696
+ if (rootChildren !== void 0) rootChildBoxesByBbox.set(to, rootChildren);
61693
61697
  const faceBbox = faceBboxByBbox.get(from);
61694
61698
  if (faceBbox !== void 0) faceBboxByBbox.set(to, faceBbox);
61695
61699
  const faceSize = nativeFaceSizeByBbox.get(from);
@@ -61921,7 +61925,7 @@ var FrameProcessor = class {
61921
61925
  const sourceDetectionId = sourceIdByBbox.get(td.bbox);
61922
61926
  const nativeRecovery = td.matchedThisFrame !== false ? nativeRecoveryByBbox.get(td.bbox) : void 0;
61923
61927
  const birthEvidence = td.matchedThisFrame !== false ? birthEvidenceByBbox.get(td.bbox) : void 0;
61924
- const linkedSteps = td.matchedThisFrame !== false ? linkedStepsOf(labelsByBbox.get(td.bbox)) : void 0;
61928
+ const rootChildBoxes = td.matchedThisFrame !== false ? rootChildBoxesByBbox.get(td.bbox) : void 0;
61925
61929
  return {
61926
61930
  trackId: td.trackId,
61927
61931
  ...sourceDetectionId !== void 0 ? { sourceDetectionId } : {},
@@ -61948,7 +61952,7 @@ var FrameProcessor = class {
61948
61952
  } : {},
61949
61953
  ...nativeRecovery !== void 0 ? { nativeRecovery } : {},
61950
61954
  ...birthEvidence !== void 0 ? { birthEvidence } : {},
61951
- ...linkedSteps !== void 0 ? { linkedSteps } : {}
61955
+ ...rootChildBoxes !== void 0 ? { rootChildBoxes } : {}
61952
61956
  };
61953
61957
  });
61954
61958
  this.lastLabelWriteRefusals = refusals;
@@ -78277,14 +78281,20 @@ var DetailScheduler = class {
78277
78281
  if (this.underMaxPerTrack(state)) state.retryPending = true;
78278
78282
  }
78279
78283
  /**
78280
- * The root model the announce says fills this (track, step), if any (D715).
78281
- * Read from the announce the track was scheduled with.
78284
+ * The root model the announce says SUPPLIES this (track, step), and how
78285
+ * (D730). Read from the announce the track was scheduled with. An announce
78286
+ * from a runner that predates `filledAs` named only label supplies.
78282
78287
  */
78283
- filledBy(trackId, stepId) {
78284
- return this.tracks.get(trackId)?.get(stepId)?.announce.filledBy;
78288
+ rootSupply(trackId, stepId) {
78289
+ const announce = this.tracks.get(trackId)?.get(stepId)?.announce;
78290
+ if (announce?.filledBy === void 0) return void 0;
78291
+ return {
78292
+ modelId: announce.filledBy,
78293
+ kind: announce.filledAs ?? "label"
78294
+ };
78285
78295
  }
78286
78296
  /**
78287
- * The detector already produced this step's effect for the track (D715):
78297
+ * The root model already produced this step's effect for the track (D730):
78288
78298
  * the step is settled for the track's life — no retry, improve or periodic
78289
78299
  * re-fire. Same terminal state as a confident result.
78290
78300
  */
@@ -78346,6 +78356,35 @@ function composeDetailSteps(req, hasTrackLabel) {
78346
78356
  if (req.stepId === "plate-detection") return ["plate-detection", "plate-ocr"];
78347
78357
  return [req.stepId];
78348
78358
  }
78359
+ /** The children a root-supplied crop step still feeds (`rootSupplyServes`). */
78360
+ function servedChildren(stepId) {
78361
+ if (!require_clip_model_registry.isRootSuppliableStepId(stepId)) return [];
78362
+ if (stepId !== "plate-detection" && stepId !== "face-detection") return [];
78363
+ return require_clip_model_registry.rootSupplyServes(stepId);
78364
+ }
78365
+ /**
78366
+ * Carry the root's frame-space boxes into a parcel's pixel space, by the same
78367
+ * mapping that took the subject's box there (`parked.bbox` is `frame.bbox`
78368
+ * rescaled). Pure.
78369
+ */
78370
+ function suppliedInParcel(supplied, frameBox, parcelBox) {
78371
+ const sx = frameBox.w > 0 ? parcelBox.w / frameBox.w : 1;
78372
+ const sy = frameBox.h > 0 ? parcelBox.h / frameBox.h : 1;
78373
+ const [first, ...rest] = supplied.boxes.map((b) => ({
78374
+ score: b.score,
78375
+ bbox: {
78376
+ x: parcelBox.x + (b.bbox.x - frameBox.x) * sx,
78377
+ y: parcelBox.y + (b.bbox.y - frameBox.y) * sy,
78378
+ w: b.bbox.w * sx,
78379
+ h: b.bbox.h * sy
78380
+ }
78381
+ }));
78382
+ if (first === void 0) return supplied;
78383
+ return {
78384
+ ...supplied,
78385
+ boxes: [first, ...rest]
78386
+ };
78387
+ }
78349
78388
  /**
78350
78389
  * Does `steps` name a nested-enrichment chain (root detector + a child that
78351
78390
  * produces a `label`/`embedding`), i.e. more than the bare root step? Used to
@@ -78430,6 +78469,7 @@ var TrackDetailDispatcher = class {
78430
78469
  dev.scheduler.onTrackEnded(trackId);
78431
78470
  dev.tracks.delete(trackId);
78432
78471
  dev.parcelEnriched.delete(trackId);
78472
+ for (const key of dev.rootBoxMissLogged) if (key.startsWith(`${trackId}:`)) dev.rootBoxMissLogged.delete(key);
78433
78473
  dev.candidateBest.delete(trackId);
78434
78474
  if (dev.tracks.size === 0) this.clearTimer(dev);
78435
78475
  }
@@ -78461,7 +78501,8 @@ var TrackDetailDispatcher = class {
78461
78501
  inFlight: 0,
78462
78502
  timer: null,
78463
78503
  lastFailWarnAt: 0,
78464
- lastEnrichWarnAt: 0
78504
+ lastEnrichWarnAt: 0,
78505
+ rootBoxMissLogged: /* @__PURE__ */ new Set()
78465
78506
  };
78466
78507
  this.devices.set(deviceId, dev);
78467
78508
  }
@@ -78526,30 +78567,56 @@ var TrackDetailDispatcher = class {
78526
78567
  this.pump(deviceId, dev);
78527
78568
  }
78528
78569
  /**
78529
- * D715: the root model fills this step (the announce's `filledBy`) and the
78530
- * detector named THIS subject for it (a linked label on the track's frame) —
78531
- * the step's effect already exists, so it is not dispatched. The step is
78532
- * settled for the track, which is what makes the line below fire once per
78533
- * (track, step): a settled step is never requested again. A track the
78534
- * detector did not name (a class outside its vocabulary) is dispatched as
78535
- * before.
78570
+ * D730: the root model supplies this step (the announce's `filledBy`), so it
78571
+ * is never inferred as-is. A LABEL supply — or a crop supply none of whose
78572
+ * children the root's box can feed — has nothing left to dispatch: the step
78573
+ * is settled for the track, which is what makes the line below fire once per
78574
+ * (track, step). A crop supply WITH served children (a plate → its reader, a
78575
+ * face → refinement + embedder) is dispatched, with the root's box.
78536
78576
  */
78537
78577
  skipFilled(deviceId, dev, req) {
78538
- const filledBy = dev.scheduler.filledBy(req.trackId, req.stepId);
78539
- if (filledBy === void 0) return false;
78540
- if (dev.tracks.get(req.trackId)?.linkedSteps?.includes(req.stepId) !== true) return false;
78578
+ const supply = dev.scheduler.rootSupply(req.trackId, req.stepId);
78579
+ if (supply === void 0) return false;
78580
+ if (supply.kind === "crop" && servedChildren(req.stepId).length > 0) return false;
78541
78581
  dev.scheduler.markFilled(req.trackId, req.stepId);
78542
- this.deps.logger.info("detail step skipped — the root detector already filled it", {
78582
+ this.deps.logger.info("detail step not dispatched — the root model supplies it", {
78543
78583
  tags: { deviceId },
78544
78584
  meta: {
78545
78585
  trackId: req.trackId,
78546
78586
  stepId: req.stepId,
78547
- filledBy,
78587
+ filledBy: supply.modelId,
78588
+ kind: supply.kind,
78548
78589
  reason: req.reason
78549
78590
  }
78550
78591
  });
78551
78592
  return true;
78552
78593
  }
78594
+ /**
78595
+ * The root-supplied form of a crop request (D730): the step plus the
78596
+ * children its root box serves, and that box. `'no-box'` when the root drew
78597
+ * none inside this subject on its freshest frame — the same outcome as the
78598
+ * step's own model finding nothing, so the scheduler retries per cadence.
78599
+ * `undefined` for every request the root does not supply.
78600
+ */
78601
+ rootSuppliedDispatch(dev, req, frame) {
78602
+ const supply = dev.scheduler.rootSupply(req.trackId, req.stepId);
78603
+ if (supply?.kind !== "crop") return void 0;
78604
+ const served = servedChildren(req.stepId);
78605
+ const composed = composeDetailSteps(req, (id) => this.deps.hasTrackLabel?.(id) ?? false);
78606
+ const [first, ...rest] = (frame.rootChildBoxes ?? []).filter((b) => b.stepId === req.stepId).map((b) => ({
78607
+ bbox: { ...b.bbox },
78608
+ score: b.score
78609
+ }));
78610
+ if (first === void 0) return "no-box";
78611
+ return {
78612
+ steps: [req.stepId, ...composed.filter((s) => served.includes(s))],
78613
+ supplied: {
78614
+ stepId: req.stepId,
78615
+ modelId: supply.modelId,
78616
+ boxes: [first, ...rest]
78617
+ }
78618
+ };
78619
+ }
78553
78620
  pump(deviceId, dev) {
78554
78621
  while (dev.inFlight < this.maxInFlight && dev.queue.length > 0) {
78555
78622
  const req = dev.queue.shift();
@@ -78564,7 +78631,24 @@ var TrackDetailDispatcher = class {
78564
78631
  }
78565
78632
  }
78566
78633
  async dispatch(deviceId, dev, req, frame) {
78567
- const details = await this.runOnce(deviceId, dev, req, frame);
78634
+ const rootSupplied = this.rootSuppliedDispatch(dev, req, frame);
78635
+ if (rootSupplied === "no-box") {
78636
+ const key = `${req.trackId}:${req.stepId}`;
78637
+ if (!dev.rootBoxMissLogged.has(key)) {
78638
+ dev.rootBoxMissLogged.add(key);
78639
+ this.deps.logger.info("detail step waits — the root model drew no box in this subject yet", {
78640
+ tags: { deviceId },
78641
+ meta: {
78642
+ trackId: req.trackId,
78643
+ stepId: req.stepId,
78644
+ reason: req.reason
78645
+ }
78646
+ });
78647
+ }
78648
+ dev.scheduler.onResult(req.trackId, req.stepId, null, Date.now());
78649
+ return;
78650
+ }
78651
+ const details = await this.runOnce(deviceId, dev, req, frame, rootSupplied);
78568
78652
  if (details === null) {
78569
78653
  dev.scheduler.onFrameMiss(req.trackId, req.stepId, Date.now());
78570
78654
  return;
@@ -78619,19 +78703,21 @@ var TrackDetailDispatcher = class {
78619
78703
  * the same missing lease). Walking them anyway is what burned two extra
78620
78704
  * cross-node RPCs per refusal, ~600–900 times an hour fleet-wide.
78621
78705
  */
78622
- async runOnce(deviceId, dev, req, frame) {
78706
+ async runOnce(deviceId, dev, req, frame, rootSupplied) {
78623
78707
  const parent = {
78624
78708
  bbox: { ...frame.bbox },
78625
78709
  className: frame.className
78626
78710
  };
78627
- const steps = composeDetailSteps(req, (trackId) => this.deps.hasTrackLabel?.(trackId) ?? false);
78711
+ const steps = rootSupplied ? [...rootSupplied.steps] : composeDetailSteps(req, (trackId) => this.deps.hasTrackLabel?.(trackId) ?? false);
78712
+ const supplied = rootSupplied ? { supplied: rootSupplied.supplied } : {};
78628
78713
  let handleRefused = false;
78629
78714
  if (frame.frameHandle !== void 0) try {
78630
78715
  const primary = await this.deps.runDetailSubtree({
78631
78716
  deviceId,
78632
78717
  frameHandle: frame.frameHandle,
78633
78718
  parent,
78634
- steps
78719
+ steps,
78720
+ ...supplied
78635
78721
  }, frame.nodeId);
78636
78722
  if (primary !== null) return primary.details;
78637
78723
  } catch (err) {
@@ -78669,7 +78755,8 @@ var TrackDetailDispatcher = class {
78669
78755
  bbox: { ...parked.bbox },
78670
78756
  className: frame.className
78671
78757
  },
78672
- steps
78758
+ steps,
78759
+ ...rootSupplied ? { supplied: suppliedInParcel(rootSupplied.supplied, frame.bbox, parked.bbox) } : {}
78673
78760
  }, parked.nodeId);
78674
78761
  if (derived !== null) {
78675
78762
  const perStep = dev.parcelEnriched.get(req.trackId) ?? /* @__PURE__ */ new Map();
@@ -78699,7 +78786,8 @@ var TrackDetailDispatcher = class {
78699
78786
  deviceId,
78700
78787
  cropJpeg,
78701
78788
  parent,
78702
- steps
78789
+ steps,
78790
+ ...supplied
78703
78791
  }, frame.nodeId);
78704
78792
  if (retry !== null) return retry.details;
78705
78793
  }
@@ -102226,7 +102314,7 @@ function buildDetectionSettingsSections() {
102226
102314
  {
102227
102315
  id: "tracking",
102228
102316
  title: "Tracking",
102229
- description: "Per-device tracker tuning (tracker v2, D683): association, coasting, spawn floors, sub-floor continuation and detector-dropout handling. Use the deviceId-tagged logs (track started/lost/ended, frame processed) to measure the effect.",
102317
+ description: "Per-device tracker tuning: association, coasting, spawn floors, sub-floor continuation and detector-dropout handling. Use the deviceId-tagged logs (track started/lost/ended, frame processed) to measure the effect.",
102230
102318
  columns: 2,
102231
102319
  fields: [
102232
102320
  {
@@ -102408,7 +102496,7 @@ function buildDetectionSettingsSections() {
102408
102496
  type: "number",
102409
102497
  key: "byteTrackLowIouThreshold",
102410
102498
  label: "Sub-floor recovery IoU",
102411
- description: "The IoU a sub-floor box needs with a moving tracklet’s prediction to re-attach it (D665/D683). Which boxes count as sub-floor is decided by the \"keep tracks through low-confidence frames\" option below.",
102499
+ description: "The IoU a sub-floor box needs with a moving tracklet’s prediction to re-attach it. Which boxes count as sub-floor is decided by the \"keep tracks through low-confidence frames\" option below.",
102412
102500
  min: 0,
102413
102501
  max: 1,
102414
102502
  step: .05,
@@ -106620,7 +106708,6 @@ var PipelineAnalyticsAddon = class PipelineAnalyticsAddon extends require_clip_m
106620
106708
  async ncEndpoints() {
106621
106709
  return collectArtifactEndpoints({
106622
106710
  markedBaseUrl: await this.markedNotificationEndpoint(),
106623
- configuredPublicUrl: process.env["CAMSTACK_HUB_PUBLIC_URL"],
106624
106711
  getConnected: async () => {
106625
106712
  const status = await this.ctx.api.networkAccess.getStatus.query();
106626
106713
  this.ctx.logger.debug("artifact base-url: connected ingress", { meta: {
@@ -106640,7 +106727,7 @@ var PipelineAnalyticsAddon = class PipelineAnalyticsAddon extends require_clip_m
106640
106727
  }));
106641
106728
  },
106642
106729
  listLan: async (port) => {
106643
- return (await this.ctx.api.localNetwork.getConnectionEndpoints.query({ port })).endpoints.flatMap((e) => e.kind === "app-link" ? [] : [{
106730
+ return (await this.ctx.api.localNetwork.getConnectionEndpoints.query({ port })).endpoints.flatMap((e) => e.kind === "app-link" || e.kind === "custom" ? [] : [{
106644
106731
  baseUrl: e.baseUrl,
106645
106732
  kind: e.kind,
106646
106733
  priority: e.priority
@@ -110287,7 +110374,7 @@ var PipelineAnalyticsAddon = class PipelineAnalyticsAddon extends require_clip_m
110287
110374
  this.ctx.logger.error("artifacts storage location is NOT available — enrolling a face, a plate or a scene reference will FAIL until it is", { meta: {
110288
110375
  location: ARTIFACTS_MEDIA_LOCATION,
110289
110376
  error: require_clip_model_registry.errMsg(err),
110290
- hint: "the declaration is seeded when a storage-provider registers; restart this node so the manifest is re-read, or create an artifacts location. Refusing the write is deliberate — the footage volume is where the last gallery was lost (D197), and the addon data dir carries no media (D341)."
110377
+ hint: "the declaration is seeded when a storage-provider registers; restart this node so the manifest is re-read, or create an artifacts location. Refusing the write is deliberate — the gallery is never written to the footage volume, and the addon data dir carries no media."
110291
110378
  } });
110292
110379
  return;
110293
110380
  }
@@ -111698,7 +111785,7 @@ var PipelineAnalyticsAddon = class PipelineAnalyticsAddon extends require_clip_m
111698
111785
  frameHandle,
111699
111786
  nodeId: frameHandle.nodeId
111700
111787
  } : {},
111701
- ...t.linkedSteps !== void 0 ? { linkedSteps: t.linkedSteps } : {}
111788
+ ...t.rootChildBoxes !== void 0 ? { rootChildBoxes: t.rootChildBoxes } : {}
111702
111789
  };
111703
111790
  if (prevIds.has(t.trackId)) dispatcher.onFrame(deviceId, t.trackId, steps, detailFrame, result.timestamp);
111704
111791
  else dispatcher.onTrackStarted(deviceId, t.trackId, t.className, steps, detailFrame, result.timestamp);
@@ -116569,8 +116656,8 @@ var PipelineAnalyticsAddon = class PipelineAnalyticsAddon extends require_clip_m
116569
116656
  const mediaStore = this.mediaStore;
116570
116657
  if (!mediaStore) throw new Error("embedding.reembedFaces: the media store is not ready");
116571
116658
  if (this.faceReembedRunning) throw new Error("embedding.reembedFaces: a face re-embed pass is already running");
116572
- if (this.faceAlignmentJobs?.isPhotoPassRunning === true) throw new Error("embedding.reembedFaces: a photo re-enrol pass is running (D643)");
116573
- if (this.faceAlignmentJobs?.isResetRunning === true) throw new Error("embedding.reembedFaces: a face gallery reset is running (D644)");
116659
+ if (this.faceAlignmentJobs?.isPhotoPassRunning === true) throw new Error("embedding.reembedFaces: a photo re-enrol pass is running");
116660
+ if (this.faceAlignmentJobs?.isResetRunning === true) throw new Error("embedding.reembedFaces: a face gallery reset is running");
116574
116661
  this.faceReembedRunning = true;
116575
116662
  try {
116576
116663
  let targetModelId = confirmedTargetModelId;
@@ -116640,8 +116727,8 @@ var PipelineAnalyticsAddon = class PipelineAnalyticsAddon extends require_clip_m
116640
116727
  const mediaStore = this.mediaStore;
116641
116728
  if (!mediaStore) throw new Error("faceGallery.reembedSamples: the media store is not ready");
116642
116729
  if (this.faceReembedRunning) throw new Error("faceGallery.reembedSamples: a face re-embed pass is already running");
116643
- if (this.faceAlignmentJobs?.isPhotoPassRunning === true) throw new Error("faceGallery.reembedSamples: a photo re-enrol pass is running (D643)");
116644
- if (this.faceAlignmentJobs?.isResetRunning === true) throw new Error("faceGallery.reembedSamples: a face gallery reset is running (D644)");
116730
+ if (this.faceAlignmentJobs?.isPhotoPassRunning === true) throw new Error("faceGallery.reembedSamples: a photo re-enrol pass is running");
116731
+ if (this.faceAlignmentJobs?.isResetRunning === true) throw new Error("faceGallery.reembedSamples: a face gallery reset is running");
116645
116732
  this.faceReembedRunning = true;
116646
116733
  try {
116647
116734
  const embedder = new FaceReembedEmbedder({