@trillboards/edge-sdk 0.2.119 → 0.2.123

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/EdgeAgent.js CHANGED
@@ -44,7 +44,7 @@ const edge_ads_1 = require("@trillboards/edge-ads");
44
44
  const CommandRouter_1 = require("./CommandRouter");
45
45
  const config_1 = require("./config");
46
46
  const dataDir_1 = require("./dataDir");
47
- const SDK_VERSION = '0.2.119';
47
+ const SDK_VERSION = '0.2.123';
48
48
  class EdgeAgent extends events_1.EventEmitter {
49
49
  constructor(config, deps) {
50
50
  super();
@@ -31,7 +31,7 @@ export interface DiagnosticReport {
31
31
  skipped: number;
32
32
  };
33
33
  }
34
- declare const SDK_VERSION = "0.2.119";
34
+ declare const SDK_VERSION = "0.2.123";
35
35
  declare function checkNodeVersion(): CheckResult;
36
36
  declare function checkPlatform(): CheckResult;
37
37
  declare function checkMemory(): CheckResult;
package/dist/diagnose.js CHANGED
@@ -63,7 +63,7 @@ const localNetworkAccess_1 = require("./localNetworkAccess");
63
63
  // ---------------------------------------------------------------------------
64
64
  // SDK version — mirrors package.json; kept in sync by CI
65
65
  // ---------------------------------------------------------------------------
66
- const SDK_VERSION = '0.2.119';
66
+ const SDK_VERSION = '0.2.123';
67
67
  exports._SDK_VERSION = SDK_VERSION;
68
68
  // ---------------------------------------------------------------------------
69
69
  // ANSI helpers (no external deps)
package/dist/index.d.ts CHANGED
@@ -46,4 +46,5 @@ export type { ProducerField, ProducedField, ProducedFieldValue, ProducedFieldSet
46
46
  export { evaluateZone, countInZone, normalizeBox, assertNormalizedRect, DEFAULT_ZONE_PREDICATE, } from './zoneContainment';
47
47
  export type { NormalizedRect, PixelBox, FrameSize, ZonePredicate, ZoneVerdict, } from './zoneContainment';
48
48
  export type { AudienceMetricsPayload, DetectedFace, EdgeQualityReport, VASResult, DeviceCapabilityMatrix, PlatformAdapter, CameraProvider, AudioProvider, EdgeSDKConfig, } from '@trillboards/edge-core';
49
+ export * from './obstructionRelation';
49
50
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,6 +2,20 @@
2
2
  // @trillboards/edge-sdk — Composable Cross-Platform Edge AI SDK
3
3
  // Install: npm install @trillboards/edge-sdk
4
4
  // Run: npx trillboards-edge start --config trillboards.config.json
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
5
19
  Object.defineProperty(exports, "__esModule", { value: true });
6
20
  exports.attachAudioOnset = exports.SILENCE_DBFS = exports.rmsDbfs = exports.AudioOnsetDetector = exports.motionSignature = exports.downscaleRgbaToGrey = exports.decodeGreyFrame = exports.isChangeCandidate = exports.SceneChangeDetector = exports.MotionGate = exports.DurableVlmCandidateSpool = exports.DEFAULT_CANDIDATE_TTL_MS = exports.VlmCandidateBuffer = exports.VlmAdmissionGate = exports.shouldAttemptRecorderAddressRecovery = exports.rewriteStreamHost = exports.normalizeMacAddress = exports.lookupMacAddress = exports.RecorderAddressRecovery = exports.resolveFeeds = exports.classifyRtspFailureClass = exports.buildTiledCameras = exports.buildSensingLoops = exports.CloudSensingManager = exports.defaultHttpPoster = exports.AudienceAnalyzeClient = exports.LOCAL_NETWORK_DENIED_SUMMARY = exports.LOCAL_NETWORK_DENIED_SUGGESTION = exports.decideLocalNetworkVerdict = exports.probeLocalNetworkAccess = exports.describeProxy = exports.resolveProxyForUrl = exports.describeTrustAnchors = exports.resolveTrustAnchors = exports.isTrustFailure = exports.formatTransportFailure = exports.classifyTransportError = exports.TransportFailure = exports.EnterpriseHttpsAgent = exports.resetEnterpriseNetworkCaches = exports.diagnoseTransportError = exports.getEnterpriseAgent = exports.describeNetworkPosture = exports.installEnterpriseNetworking = exports.runDiagnose = exports.runInit = exports.CommandRouter = exports.resolveConfig = exports.loadConfig = exports.EdgeAgent = void 0;
7
21
  exports.DEFAULT_ZONE_PREDICATE = exports.assertNormalizedRect = exports.normalizeBox = exports.countInZone = exports.evaluateZone = exports.DEFAULT_PRODUCE_DEADLINE_MS = exports.DEFAULT_PRODUCER_TIMEOUT_MS = exports.DEFAULT_PRODUCER_MIN_CONFIDENCE = exports.PRODUCER_WITHHOLD_REASONS = exports.DETECTOR_MODEL_JOIN = exports.CONCEPT_KEY_RE = exports.toFieldValues = exports.toDetectorClassName = exports.countsForClasses = exports.classifyProducerField = exports.DetectorFieldProducer = exports.DEFAULT_OBSERVE_DEADLINE_MS = exports.DETECTOR_GATE_CONFIDENCE = exports.DEFAULT_MIN_OBSERVE_INTERVAL_MS = exports.DEFAULT_BACKOFF_MAX_MS = exports.DEFAULT_BACKOFF_INITIAL_MS = exports.DEFAULT_SHADOW_TIMEOUT_MS = exports.PERSON_LABELS = exports.DetectorShadowProbe = exports.DEFAULT_DETECTOR_PORT = exports.defaultDetectorPoster = exports.DetectorUnavailableError = exports.LocalDetectorClient = exports.CropViewProvider = exports.SharedFrameSource = exports.GEMMA_AUDIO_MAX_SECONDS = exports.GEMMA_AUDIO_SAMPLE_RATE = exports.takeMostRecentSeconds = exports.encodeWav16 = void 0;
@@ -149,4 +163,5 @@ Object.defineProperty(exports, "countInZone", { enumerable: true, get: function
149
163
  Object.defineProperty(exports, "normalizeBox", { enumerable: true, get: function () { return zoneContainment_1.normalizeBox; } });
150
164
  Object.defineProperty(exports, "assertNormalizedRect", { enumerable: true, get: function () { return zoneContainment_1.assertNormalizedRect; } });
151
165
  Object.defineProperty(exports, "DEFAULT_ZONE_PREDICATE", { enumerable: true, get: function () { return zoneContainment_1.DEFAULT_ZONE_PREDICATE; } });
166
+ __exportStar(require("./obstructionRelation"), exports);
152
167
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -186,9 +186,33 @@ export interface GrantedModelFeed {
186
186
  screenId: string | null;
187
187
  client: GrantedModelProfileClient;
188
188
  }
189
- /** Polled by `startModelOta`; `null` means "nobody answered — keep what you have". */
189
+ /**
190
+ * A resolution that also says WHICH screens answered.
191
+ *
192
+ * Revocation needs this and a bare list cannot carry it. `buildGrantedModelSource`
193
+ * UNIONS N feeds, so when one screen answers and another fails, the union is the
194
+ * surviving screen's models alone — indistinguishable, as a list, from the failed
195
+ * screen having had everything withdrawn. Revoking on that would drop a model
196
+ * from a screen that was never asked successfully, and a permanently unreachable
197
+ * screen would lose OTA tracking for as long as any sibling kept answering.
198
+ *
199
+ * `answeredScreenIds` is therefore the scope within which absence MEANS
200
+ * withdrawal. `null` in the array is the screen-less client (the host identity).
201
+ */
202
+ export interface GrantedResolution {
203
+ models: GrantedModel[];
204
+ answeredScreenIds: Array<string | null>;
205
+ }
206
+ /**
207
+ * Polled by `startModelOta`; `null` means "nobody answered — keep what you have".
208
+ *
209
+ * A bare array is still accepted and means "this is the whole answer" — every
210
+ * watched model is in revocation scope. Sources that can fail PARTIALLY must
211
+ * return a `GrantedResolution` instead, or they will revoke what they could not
212
+ * ask about.
213
+ */
190
214
  export interface GrantedModelSource {
191
- resolve(): Promise<GrantedModel[] | null>;
215
+ resolve(): Promise<GrantedModel[] | GrantedResolution | null>;
192
216
  }
193
217
  /**
194
218
  * Union the granted lists of every feed's screen.
@@ -222,6 +246,13 @@ export interface SpecialistModelManagerLike extends ModelManagerLike {
222
246
  * rather than failing.
223
247
  */
224
248
  checkForUpdates?(): Promise<unknown>;
249
+ /**
250
+ * Optional: stop tracking a model whose grant was WITHDRAWN. Optional because
251
+ * a fake need not implement it — but its absence is LOGGED, never silent,
252
+ * because a connector that cannot stop downloading a revoked model is exactly
253
+ * the failure this whole module exists to prevent.
254
+ */
255
+ unregisterModel?(name: string): boolean;
225
256
  }
226
257
  export interface ModelOtaDeps {
227
258
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"modelOta.d.ts","sourceRoot":"","sources":["../src/modelOta.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modelOta.d.ts","sourceRoot":"","sources":["../src/modelOta.ts"],"names":[],"mappings":"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"}
package/dist/modelOta.js CHANGED
@@ -216,12 +216,12 @@ function buildGrantedModelSource(options) {
216
216
  screenId: f.screenId,
217
217
  profile: await f.client.fetchProfile().catch(() => null),
218
218
  })));
219
- let anyAnswered = false;
219
+ const answeredScreenIds = [];
220
220
  const byId = new Map();
221
221
  for (const { screenId, profile } of results) {
222
222
  if (!profile)
223
223
  continue;
224
- anyAnswered = true;
224
+ answeredScreenIds.push(screenId || null);
225
225
  for (const m of Array.isArray(profile.models) ? profile.models : []) {
226
226
  if (!m || typeof m.modelId !== 'string' || !m.modelId)
227
227
  continue;
@@ -247,9 +247,12 @@ function buildGrantedModelSource(options) {
247
247
  }
248
248
  }
249
249
  }
250
- if (!anyAnswered)
250
+ if (answeredScreenIds.length === 0)
251
251
  return null;
252
- return [...byId.values()].sort((a, b) => a.modelId.localeCompare(b.modelId));
252
+ return {
253
+ models: [...byId.values()].sort((a, b) => a.modelId.localeCompare(b.modelId)),
254
+ answeredScreenIds,
255
+ };
253
256
  },
254
257
  };
255
258
  }
@@ -294,7 +297,13 @@ function startModelOta(config, models = [], deps = {}) {
294
297
  */
295
298
  const managers = new Map();
296
299
  const startedManagers = new Set();
297
- const watched = new Set();
300
+ /**
301
+ * modelId -> the manager identity that watches it. A Set was enough while
302
+ * grants only ever ACCUMULATED; revoking one has to reach the manager that
303
+ * registered it, and with several granting screens on one box that is not
304
+ * derivable after the fact.
305
+ */
306
+ const watched = new Map();
298
307
  const skipLogged = new Set();
299
308
  let pollHandle = null;
300
309
  let stopped = false;
@@ -357,7 +366,7 @@ function startModelOta(config, models = [], deps = {}) {
357
366
  managers.set(identity, created);
358
367
  return created;
359
368
  };
360
- const setGrantedModels = (next) => {
369
+ const setGrantedModels = (next, revocationScope) => {
361
370
  if (stopped)
362
371
  return;
363
372
  try {
@@ -384,11 +393,50 @@ function startModelOta(config, models = [], deps = {}) {
384
393
  continue;
385
394
  // The registry id IS the OTA modelType — see GrantedModel.modelId.
386
395
  m.registerModel(dest.modelId, dest.filePath);
387
- watched.add(dest.modelId);
396
+ watched.set(dest.modelId, identity);
388
397
  touched.add(identity);
389
398
  log(`[model-ota] watching ${dest.modelId} → ${dest.filePath}`
390
399
  + ` (asking as ${screenId ? `screen ${screenId}` : `host ${hostFingerprint}`})`);
391
400
  }
401
+ // ── Revocation ────────────────────────────────────────────────────────
402
+ // Everything we watch that this answer did NOT grant. `setGrantedModels`
403
+ // was add-only until 2026-09-01, so a withdrawn grant — a rolled-back
404
+ // canary, a model retired for being wrong, one withheld to fit the RAM
405
+ // budget — kept being version-checked and re-downloaded for ever, and
406
+ // nothing on the box or in the logs said so.
407
+ //
408
+ // Reached ONLY from a list the server actually returned. A `null` (the
409
+ // API blipped) never gets here: the caller drops it, because "I could not
410
+ // ask" and "you are granted nothing" are different facts and only the
411
+ // second one may revoke.
412
+ const stillGranted = new Set((Array.isArray(next) ? next : [])
413
+ .map((m) => (typeof m?.modelId === 'string' ? m.modelId.trim() : ''))
414
+ .filter(Boolean));
415
+ for (const [modelId, identity] of [...watched]) {
416
+ if (stillGranted.has(modelId))
417
+ continue;
418
+ // Absence only means WITHDRAWN inside the scope that answered. A screen
419
+ // whose profile request failed contributed nothing to `next`, so every
420
+ // model only it granted looks withdrawn and is not — see
421
+ // `GrantedResolution`. Undefined scope means the caller gave a bare
422
+ // list, i.e. the whole answer, so everything is in scope.
423
+ if (revocationScope && !revocationScope.has(identity))
424
+ continue;
425
+ const m = managers.get(identity);
426
+ if (m && typeof m.unregisterModel === 'function') {
427
+ m.unregisterModel(modelId);
428
+ watched.delete(modelId);
429
+ // Re-arm the skip log: if this model is granted again later, its next
430
+ // refusal is worth saying out loud rather than being deduped against
431
+ // a message from before the revocation.
432
+ skipLogged.delete(modelId);
433
+ log(`[model-ota] grant revoked for ${modelId} — no longer downloading it`);
434
+ }
435
+ else {
436
+ log(`[model-ota] grant revoked for ${modelId} but this manager cannot unregister`
437
+ + ' — it will keep being downloaded');
438
+ }
439
+ }
392
440
  for (const identity of touched) {
393
441
  const m = managers.get(identity);
394
442
  if (!m)
@@ -431,8 +479,18 @@ function startModelOta(config, models = [], deps = {}) {
431
479
  const refresh = () => {
432
480
  Promise.resolve()
433
481
  .then(() => source.resolve())
434
- .then((resolved) => { if (resolved)
435
- setGrantedModels(resolved); })
482
+ .then((resolved) => {
483
+ if (!resolved)
484
+ return; // could not ask — never a revocation
485
+ if (Array.isArray(resolved)) {
486
+ setGrantedModels(resolved);
487
+ return;
488
+ }
489
+ // A screen id maps to the same identity the download used, so the
490
+ // scope is comparable with `watched`'s values.
491
+ const scope = new Set((resolved.answeredScreenIds || []).map((id) => id || hostFingerprint));
492
+ setGrantedModels(resolved.models || [], scope);
493
+ })
436
494
  .catch((err) => log(`[model-ota] granted-model refresh failed (non-fatal): ${err?.message || err}`));
437
495
  };
438
496
  refresh();
@@ -464,7 +522,7 @@ function startModelOta(config, models = [], deps = {}) {
464
522
  },
465
523
  setGrantedModels,
466
524
  watchedModelIds() {
467
- return [...watched].sort();
525
+ return [...watched.keys()].sort();
468
526
  },
469
527
  };
470
528
  }
@@ -1 +1 @@
1
- {"version":3,"file":"modelOta.js","sourceRoot":"","sources":["../src/modelOta.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modelOta.js","sourceRoot":"","sources":["../src/modelOta.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * obstructionRelation — "is this thing BLOCKED by that thing", in image space.
3
+ *
4
+ * `blocked_fire_exit` is one of the nine classes we sell and the only one that
5
+ * is not an OBJECT. Every vocabulary anywhere has the PARTS — `exit`, `exit
6
+ * sign`, `fire extinguisher`, and any number of obstruction-shaped things — and
7
+ * none has the RELATION. A sweep of four repositories claiming to detect
8
+ * "fire passage occupancy" found that none ships trained weights and that one
9
+ * carries an ROI config block, i.e. its relation is intersection logic wearing a
10
+ * model's name. So the relation is geometry, and this is the geometry.
11
+ *
12
+ * ── THE GROUND PLANE IS STILL THE WHOLE PROBLEM ────────────────────────────
13
+ *
14
+ * `zoneContainment` establishes the rule this file inherits: the bottom-centre
15
+ * of a box is where the object touches the floor, and a point is inside a region
16
+ * or it is not, so no magic fraction is needed. The same applies here and for
17
+ * the same reason — a pallet's box top is not where the pallet IS.
18
+ *
19
+ * What is new is that the REGION is not drawn by an operator. It is derived from
20
+ * the protected object's own box: the floor immediately in front of an exit or
21
+ * an extinguisher is the thing that must stay clear, and on a camera looking
22
+ * down that floor is BELOW the object in the image and roughly as wide as it,
23
+ * widened by a reach allowance.
24
+ *
25
+ * ── WHAT A MONOCULAR CAMERA CANNOT DO, STATED UP FRONT ─────────────────────
26
+ *
27
+ * One camera cannot resolve depth. A person walking three metres in front of an
28
+ * extinguisher puts their ground contact in the SAME image region as a crate
29
+ * shoved against the wall beneath it. No threshold separates those two, because
30
+ * the information is not in the frame.
31
+ *
32
+ * The separator is TIME, and it already exists: a person walks on, a crate does
33
+ * not. `sensing_routes.sustain_seconds` and `routeEvaluatorService.checkSustain`
34
+ * are the server-side gate for exactly this, so this file answers ONE FRAME and
35
+ * a caller that wires it to an alert without a sustain is asserting that anyone
36
+ * who walks past an extinguisher has blocked it. `requiresSustain` is returned
37
+ * on every verdict so that obligation travels with the answer instead of living
38
+ * in a comment.
39
+ *
40
+ * ── WHY A PERSON IS NOT AN OBSTRUCTION, AND WHY THAT IS THE CALLER'S CALL ───
41
+ *
42
+ * `obstructionClasses` is a REQUIRED argument with no default. The set of things
43
+ * that can block an exit is a property of the granted model's vocabulary — one
44
+ * box declares `chair, couch, potted plant, suitcase, backpack`, another
45
+ * declares `dumpster, barricade` — and inventing a list here would be the
46
+ * enumerated allowlist this codebase asks not to write. It is derived at the
47
+ * call site from what the resident model actually emits.
48
+ *
49
+ * @reuse-audit
50
+ * considered: zoneContainment.evaluateZone / countInZone
51
+ * - REUSED, unchanged, as the containment kernel. The access footprint is a
52
+ * NormalizedRect and an obstruction is a PixelBox, which is precisely the
53
+ * pair `evaluateZone` already takes. Re-deriving containment here would be
54
+ * a second opinion about the same question, and the `groundContact`
55
+ * anchor is the reason that question has a threshold-free answer.
56
+ * considered: FaceDetector.iou
57
+ * - not reused, for the reason zoneContainment already records: IoU is a
58
+ * symmetric similarity and this is asymmetric. It is also the WRONG
59
+ * question twice over — a crate on the floor beneath a wall-mounted
60
+ * extinguisher may share almost no image area with it and still block it
61
+ * completely.
62
+ */
63
+ import { type FrameSize, type NormalizedRect, type PixelBox } from './zoneContainment';
64
+ /** How the access footprint is derived from a protected object's box. */
65
+ export interface AccessFootprintOptions {
66
+ /**
67
+ * How far BELOW the protected object's box the floor region extends, as a
68
+ * multiple of that box's own height. Required — the right value differs for a
69
+ * door (a person's stride) and a wall-mounted extinguisher (arm's reach), and
70
+ * a default here would be a magic number nobody could justify.
71
+ */
72
+ readonly reachBelow: number;
73
+ /**
74
+ * How far to either SIDE, as a multiple of the box's own width. Required, for
75
+ * the same reason.
76
+ */
77
+ readonly reachSide: number;
78
+ }
79
+ export interface ObstructionVerdict {
80
+ /** Did any obstruction's ground contact land in the access footprint. */
81
+ readonly blocked: boolean;
82
+ /** The footprint that was tested, so a caller can render or log it. */
83
+ readonly footprint: NormalizedRect;
84
+ /** Which obstruction classes landed, in first-seen order. Empty when clear. */
85
+ readonly blockedBy: readonly string[];
86
+ /**
87
+ * ALWAYS true. A single frame cannot distinguish a person walking past from a
88
+ * crate left against a wall, because one camera has no depth. Carried on the
89
+ * verdict rather than written in a docblock so a caller cannot wire this to an
90
+ * alert without meeting it.
91
+ */
92
+ readonly requiresSustain: true;
93
+ }
94
+ /**
95
+ * The floor region in front of a protected object, in normalized coordinates.
96
+ *
97
+ * Clamped to the frame: a footprint that ran off the bottom would silently test
98
+ * a smaller region than the caller asked for, and an obstruction at the frame
99
+ * edge is exactly the case that matters.
100
+ */
101
+ export declare function accessFootprint(protectedBox: PixelBox, frame: FrameSize, options: AccessFootprintOptions): NormalizedRect;
102
+ /**
103
+ * Is the protected object blocked, in THIS frame.
104
+ *
105
+ * `obstructionClasses` is required and must be non-empty: a call that passes
106
+ * nothing is asking "is anything at all near the exit", which every person
107
+ * walking past answers yes to.
108
+ */
109
+ export declare function evaluateObstruction(protectedBox: PixelBox, candidates: readonly {
110
+ label: string;
111
+ box: PixelBox;
112
+ }[], frame: FrameSize, obstructionClasses: readonly string[], options: AccessFootprintOptions): ObstructionVerdict;
113
+ //# sourceMappingURL=obstructionRelation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obstructionRelation.d.ts","sourceRoot":"","sources":["../src/obstructionRelation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,OAAO,EACL,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,QAAQ,EAGd,MAAM,mBAAmB,CAAC;AAE3B,yEAAyE;AACzE,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC;CAChC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,QAAQ,EACtB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,sBAAsB,GAC9B,cAAc,CAmBhB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,QAAQ,EACtB,UAAU,EAAE,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,QAAQ,CAAA;CAAE,EAAE,EACvD,KAAK,EAAE,SAAS,EAChB,kBAAkB,EAAE,SAAS,MAAM,EAAE,EACrC,OAAO,EAAE,sBAAsB,GAC9B,kBAAkB,CA+BpB"}
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.accessFootprint = accessFootprint;
4
+ exports.evaluateObstruction = evaluateObstruction;
5
+ /**
6
+ * obstructionRelation — "is this thing BLOCKED by that thing", in image space.
7
+ *
8
+ * `blocked_fire_exit` is one of the nine classes we sell and the only one that
9
+ * is not an OBJECT. Every vocabulary anywhere has the PARTS — `exit`, `exit
10
+ * sign`, `fire extinguisher`, and any number of obstruction-shaped things — and
11
+ * none has the RELATION. A sweep of four repositories claiming to detect
12
+ * "fire passage occupancy" found that none ships trained weights and that one
13
+ * carries an ROI config block, i.e. its relation is intersection logic wearing a
14
+ * model's name. So the relation is geometry, and this is the geometry.
15
+ *
16
+ * ── THE GROUND PLANE IS STILL THE WHOLE PROBLEM ────────────────────────────
17
+ *
18
+ * `zoneContainment` establishes the rule this file inherits: the bottom-centre
19
+ * of a box is where the object touches the floor, and a point is inside a region
20
+ * or it is not, so no magic fraction is needed. The same applies here and for
21
+ * the same reason — a pallet's box top is not where the pallet IS.
22
+ *
23
+ * What is new is that the REGION is not drawn by an operator. It is derived from
24
+ * the protected object's own box: the floor immediately in front of an exit or
25
+ * an extinguisher is the thing that must stay clear, and on a camera looking
26
+ * down that floor is BELOW the object in the image and roughly as wide as it,
27
+ * widened by a reach allowance.
28
+ *
29
+ * ── WHAT A MONOCULAR CAMERA CANNOT DO, STATED UP FRONT ─────────────────────
30
+ *
31
+ * One camera cannot resolve depth. A person walking three metres in front of an
32
+ * extinguisher puts their ground contact in the SAME image region as a crate
33
+ * shoved against the wall beneath it. No threshold separates those two, because
34
+ * the information is not in the frame.
35
+ *
36
+ * The separator is TIME, and it already exists: a person walks on, a crate does
37
+ * not. `sensing_routes.sustain_seconds` and `routeEvaluatorService.checkSustain`
38
+ * are the server-side gate for exactly this, so this file answers ONE FRAME and
39
+ * a caller that wires it to an alert without a sustain is asserting that anyone
40
+ * who walks past an extinguisher has blocked it. `requiresSustain` is returned
41
+ * on every verdict so that obligation travels with the answer instead of living
42
+ * in a comment.
43
+ *
44
+ * ── WHY A PERSON IS NOT AN OBSTRUCTION, AND WHY THAT IS THE CALLER'S CALL ───
45
+ *
46
+ * `obstructionClasses` is a REQUIRED argument with no default. The set of things
47
+ * that can block an exit is a property of the granted model's vocabulary — one
48
+ * box declares `chair, couch, potted plant, suitcase, backpack`, another
49
+ * declares `dumpster, barricade` — and inventing a list here would be the
50
+ * enumerated allowlist this codebase asks not to write. It is derived at the
51
+ * call site from what the resident model actually emits.
52
+ *
53
+ * @reuse-audit
54
+ * considered: zoneContainment.evaluateZone / countInZone
55
+ * - REUSED, unchanged, as the containment kernel. The access footprint is a
56
+ * NormalizedRect and an obstruction is a PixelBox, which is precisely the
57
+ * pair `evaluateZone` already takes. Re-deriving containment here would be
58
+ * a second opinion about the same question, and the `groundContact`
59
+ * anchor is the reason that question has a threshold-free answer.
60
+ * considered: FaceDetector.iou
61
+ * - not reused, for the reason zoneContainment already records: IoU is a
62
+ * symmetric similarity and this is asymmetric. It is also the WRONG
63
+ * question twice over — a crate on the floor beneath a wall-mounted
64
+ * extinguisher may share almost no image area with it and still block it
65
+ * completely.
66
+ */
67
+ const zoneContainment_1 = require("./zoneContainment");
68
+ /**
69
+ * The floor region in front of a protected object, in normalized coordinates.
70
+ *
71
+ * Clamped to the frame: a footprint that ran off the bottom would silently test
72
+ * a smaller region than the caller asked for, and an obstruction at the frame
73
+ * edge is exactly the case that matters.
74
+ */
75
+ function accessFootprint(protectedBox, frame, options) {
76
+ if (!Number.isFinite(options.reachBelow) || options.reachBelow < 0) {
77
+ throw new RangeError('accessFootprint: reachBelow must be a finite number >= 0');
78
+ }
79
+ if (!Number.isFinite(options.reachSide) || options.reachSide < 0) {
80
+ throw new RangeError('accessFootprint: reachSide must be a finite number >= 0');
81
+ }
82
+ const box = (0, zoneContainment_1.normalizeBox)(protectedBox, frame);
83
+ const sidePad = box.width * options.reachSide;
84
+ const belowPad = box.height * options.reachBelow;
85
+ // The footprint spans the object itself PLUS the floor beneath it. Including
86
+ // the object's own rows matters: a crate stacked against a door overlaps the
87
+ // door, and a footprint starting below the box would miss it.
88
+ const x = Math.max(0, box.x - sidePad);
89
+ const y = Math.max(0, box.y);
90
+ const right = Math.min(1, box.x + box.width + sidePad);
91
+ const bottom = Math.min(1, box.y + box.height + belowPad);
92
+ return { x, y, width: Math.max(0, right - x), height: Math.max(0, bottom - y) };
93
+ }
94
+ /**
95
+ * Is the protected object blocked, in THIS frame.
96
+ *
97
+ * `obstructionClasses` is required and must be non-empty: a call that passes
98
+ * nothing is asking "is anything at all near the exit", which every person
99
+ * walking past answers yes to.
100
+ */
101
+ function evaluateObstruction(protectedBox, candidates, frame, obstructionClasses, options) {
102
+ if (!Array.isArray(obstructionClasses) || obstructionClasses.length === 0) {
103
+ throw new RangeError('evaluateObstruction: obstructionClasses is required and must be non-empty. '
104
+ + 'Derive it from the granted model\'s own vocabulary; an empty set makes every '
105
+ + 'passer-by an obstruction.');
106
+ }
107
+ const footprint = accessFootprint(protectedBox, frame, options);
108
+ // Folded the way `modelClassLiveness` folds a class name, so `potted_plant`,
109
+ // `potted plant` and `Potted Plant` are one class rather than three misses.
110
+ const fold = (s) => s.trim().toLowerCase().replace(/[_\-\s]+/g, ' ');
111
+ const wanted = new Set(obstructionClasses.map(fold));
112
+ // Deduplicated on the FOLDED name, not the raw one: `potted_plant` and
113
+ // `Potted Plant` both pass the membership check above, and keying the seen-set
114
+ // on the original spelling would report one logical class twice. The first
115
+ // spelling encountered is the one reported.
116
+ const seen = new Set();
117
+ const blockedBy = [];
118
+ for (const candidate of candidates) {
119
+ const folded = fold(candidate.label);
120
+ if (!wanted.has(folded))
121
+ continue;
122
+ // `groundContact` by default — the bottom-centre point, threshold-free, for
123
+ // the reason zoneContainment's header gives.
124
+ if (!(0, zoneContainment_1.evaluateZone)(candidate.box, frame, footprint).inside)
125
+ continue;
126
+ if (seen.has(folded))
127
+ continue;
128
+ seen.add(folded);
129
+ blockedBy.push(candidate.label);
130
+ }
131
+ return { blocked: blockedBy.length > 0, footprint, blockedBy, requiresSustain: true };
132
+ }
133
+ //# sourceMappingURL=obstructionRelation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obstructionRelation.js","sourceRoot":"","sources":["../src/obstructionRelation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trillboards/edge-sdk",
3
- "version": "0.2.119",
3
+ "version": "0.2.123",
4
4
  "description": "Composable cross-platform Edge AI SDK for audience sensing on DOOH/CTV devices",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",