@trillboards/edge-sdk 0.2.13 → 0.2.15
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/deploy/windows/README.md +7 -0
- package/deploy/windows/build-windows.ps1 +4 -0
- package/deploy/windows/ensure-sensing.ps1 +58 -0
- package/deploy/windows/install-update.ps1 +32 -6
- package/deploy/windows/setup-litertlm.ps1 +45 -0
- package/deploy/windows/stop-existing.ps1 +51 -1
- package/deploy/windows/trillboards-edge.cmd +8 -2
- package/deploy/windows/trillboards-hidden-run.vbs +47 -0
- package/deploy/windows/trillboards-setup.ps1 +25 -0
- package/dist/AudienceAnalyzeClient.d.ts +16 -2
- package/dist/AudienceAnalyzeClient.d.ts.map +1 -1
- package/dist/AudienceAnalyzeClient.js.map +1 -1
- package/dist/CloudSensingManager.d.ts +213 -5
- package/dist/CloudSensingManager.d.ts.map +1 -1
- package/dist/CloudSensingManager.js +432 -23
- package/dist/CloudSensingManager.js.map +1 -1
- package/dist/EdgeAgent.js +1 -1
- package/dist/SceneChangeDetector.d.ts +39 -3
- package/dist/SceneChangeDetector.d.ts.map +1 -1
- package/dist/SceneChangeDetector.js +84 -16
- package/dist/SceneChangeDetector.js.map +1 -1
- package/dist/VlmAdmissionGate.d.ts +14 -0
- package/dist/VlmAdmissionGate.d.ts.map +1 -1
- package/dist/VlmAdmissionGate.js +14 -0
- package/dist/VlmAdmissionGate.js.map +1 -1
- package/dist/VlmCandidateBuffer.d.ts +236 -0
- package/dist/VlmCandidateBuffer.d.ts.map +1 -0
- package/dist/VlmCandidateBuffer.js +347 -0
- package/dist/VlmCandidateBuffer.js.map +1 -0
- package/dist/config.d.ts +46 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/diagnose.d.ts +1 -1
- package/dist/diagnose.js +1 -1
- package/dist/discovery.d.ts +15 -0
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +65 -0
- package/dist/discovery.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/recorderRanking.d.ts +71 -0
- package/dist/recorderRanking.d.ts.map +1 -0
- package/dist/recorderRanking.js +230 -0
- package/dist/recorderRanking.js.map +1 -0
- package/dist/sensingRunMode.d.ts.map +1 -1
- package/dist/sensingRunMode.js +124 -0
- package/dist/sensingRunMode.js.map +1 -1
- package/dist/setupMode.d.ts +9 -0
- package/dist/setupMode.d.ts.map +1 -1
- package/dist/setupMode.js +23 -1
- package/dist/setupMode.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Rank + explain what the LAN scan found.
|
|
4
|
+
*
|
|
5
|
+
* Discovery already works: the field test's 32-channel NETSurveillance unit WAS
|
|
6
|
+
* found, and once selected all 32 RTSP feeds validated. What failed was the
|
|
7
|
+
* PRESENTATION — the recorder arrived in TCP-sweep race order among a handful of
|
|
8
|
+
* unrelated LAN hosts, with nothing saying which one was the recorder, so the
|
|
9
|
+
* operator fell back to typing the IP by hand.
|
|
10
|
+
*
|
|
11
|
+
* Everything here classifies from what a device SELF-REPORTS:
|
|
12
|
+
* - ONVIF's standardized scope grammar (Profile G means "this device records";
|
|
13
|
+
* type/NetworkVideoStorage means "this device is storage"),
|
|
14
|
+
* - how many ONVIF service endpoints it advertises for itself,
|
|
15
|
+
* - the XM/DVRIP handshake, whose login reply states its own ChannelNum.
|
|
16
|
+
*
|
|
17
|
+
* Explicitly NOT a vendor-name allowlist. A device calling itself "HIKVISION
|
|
18
|
+
* DS-7608NI NVR" contributes exactly nothing to its classification — that string
|
|
19
|
+
* is shown as a label and ignored as evidence — because an allowlist goes stale
|
|
20
|
+
* the first time a customer buys a different box.
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.XM_PORT = void 0;
|
|
24
|
+
exports.buildXmLoginFrame = buildXmLoginFrame;
|
|
25
|
+
exports.parseXmLoginResponse = parseXmLoginResponse;
|
|
26
|
+
exports.classifyDiscoveredHost = classifyDiscoveredHost;
|
|
27
|
+
exports.rankDiscoveredHosts = rankDiscoveredHosts;
|
|
28
|
+
// ─── XM / NETSurveillance (DVRIP) handshake ──────────────────────────────────
|
|
29
|
+
// Port 34567 being open says a socket accepted a connection. It does NOT say the
|
|
30
|
+
// thing behind it is a recorder. One handshake turns that into a self-report:
|
|
31
|
+
// the login reply names the device's own ChannelNum and DeviceType, which is the
|
|
32
|
+
// difference between "something answered" and "a 32-channel recorder".
|
|
33
|
+
exports.XM_PORT = 34567;
|
|
34
|
+
const XM_LOGIN_REQUEST = 1000;
|
|
35
|
+
const XM_HEADER_BYTES = 20;
|
|
36
|
+
/** DVRIP hash of an empty password. One attempt per host per scan, never a sweep. */
|
|
37
|
+
const XM_BLANK_PASSWORD = 'tlJwpbo6';
|
|
38
|
+
/** Frame a DVRIP request: 20-byte header + NUL-terminated JSON payload. */
|
|
39
|
+
function buildXmFrame(msgId, payload) {
|
|
40
|
+
const body = Buffer.from(`${JSON.stringify(payload)}\n\0`, 'utf8');
|
|
41
|
+
const head = Buffer.alloc(XM_HEADER_BYTES);
|
|
42
|
+
head[0] = 0xff; // protocol magic
|
|
43
|
+
head.writeUInt16LE(msgId, 14);
|
|
44
|
+
head.writeUInt32LE(body.length, 16);
|
|
45
|
+
return Buffer.concat([head, body]);
|
|
46
|
+
}
|
|
47
|
+
function buildXmLoginFrame() {
|
|
48
|
+
return buildXmFrame(XM_LOGIN_REQUEST, {
|
|
49
|
+
EncryptType: 'MD5',
|
|
50
|
+
LoginType: 'DVRIP-Web',
|
|
51
|
+
PassWord: XM_BLANK_PASSWORD,
|
|
52
|
+
UserName: 'admin',
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Parse a DVRIP login reply. Returns null unless the bytes really are a DVRIP
|
|
57
|
+
* frame carrying JSON — anything less stays "port open", not "XM recorder".
|
|
58
|
+
*/
|
|
59
|
+
function parseXmLoginResponse(buf) {
|
|
60
|
+
if (!Buffer.isBuffer(buf) || buf.length <= XM_HEADER_BYTES)
|
|
61
|
+
return null;
|
|
62
|
+
if (buf[0] !== 0xff)
|
|
63
|
+
return null;
|
|
64
|
+
const raw = buf.subarray(XM_HEADER_BYTES).toString('utf8').replace(/[\s\0]+$/, '');
|
|
65
|
+
const start = raw.indexOf('{');
|
|
66
|
+
if (start < 0)
|
|
67
|
+
return null;
|
|
68
|
+
let parsed;
|
|
69
|
+
try {
|
|
70
|
+
parsed = JSON.parse(raw.slice(start));
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
if (!parsed || typeof parsed !== 'object' || typeof parsed.Ret !== 'number')
|
|
76
|
+
return null;
|
|
77
|
+
const out = { speaksXm: true, ret: parsed.Ret };
|
|
78
|
+
const channels = Number(parsed.ChannelNum);
|
|
79
|
+
if (Number.isInteger(channels) && channels > 0 && channels <= 256) {
|
|
80
|
+
out.channelCount = channels;
|
|
81
|
+
}
|
|
82
|
+
// Some firmwares emit the key with a trailing space ("DeviceType ").
|
|
83
|
+
const typeKey = Object.keys(parsed).find((k) => k.trim() === 'DeviceType');
|
|
84
|
+
const deviceType = typeKey ? String(parsed[typeKey] ?? '').trim() : '';
|
|
85
|
+
if (deviceType)
|
|
86
|
+
out.deviceType = deviceType;
|
|
87
|
+
return out;
|
|
88
|
+
}
|
|
89
|
+
// ─── Classification ──────────────────────────────────────────────────────────
|
|
90
|
+
const plural = (n, one, many) => (n === 1 ? one : many);
|
|
91
|
+
/** Distinct ONVIF service endpoints this host advertises for itself. */
|
|
92
|
+
function distinctServiceEndpoints(xaddrs) {
|
|
93
|
+
const paths = new Set();
|
|
94
|
+
for (const x of xaddrs) {
|
|
95
|
+
if (typeof x !== 'string' || !x)
|
|
96
|
+
continue;
|
|
97
|
+
const m = x.match(/^https?:\/\/[^/]+(\/.*)?$/i);
|
|
98
|
+
paths.add((m?.[1] || '/').replace(/\/+$/, '').toLowerCase() || '/');
|
|
99
|
+
}
|
|
100
|
+
return paths.size;
|
|
101
|
+
}
|
|
102
|
+
function classifyDiscoveredHost(input) {
|
|
103
|
+
const openPorts = Array.isArray(input.openPorts) ? input.openPorts.filter(Number.isInteger) : [];
|
|
104
|
+
const xaddrs = Array.isArray(input.xaddrs) ? input.xaddrs.filter((x) => typeof x === 'string') : [];
|
|
105
|
+
const scopes = Array.isArray(input.scopes) ? input.scopes.filter((s) => typeof s === 'string') : [];
|
|
106
|
+
const xm = input.xm && input.xm.speaksXm ? input.xm : null;
|
|
107
|
+
const evidence = [];
|
|
108
|
+
let recorderScore = 0;
|
|
109
|
+
let cameraScore = 0;
|
|
110
|
+
let channelCount;
|
|
111
|
+
// 1. The device stated its own channel count. Nothing beats this.
|
|
112
|
+
if (xm?.channelCount !== undefined) {
|
|
113
|
+
channelCount = xm.channelCount;
|
|
114
|
+
if (xm.channelCount > 1) {
|
|
115
|
+
recorderScore += 0.95;
|
|
116
|
+
evidence.push({
|
|
117
|
+
code: 'xm_reported_channels',
|
|
118
|
+
detail: `Reports ${xm.channelCount} camera channels of its own`,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
cameraScore += 0.7;
|
|
123
|
+
evidence.push({ code: 'xm_reported_channels', detail: 'Reports a single camera channel' });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else if (xm) {
|
|
127
|
+
// Protocol confirmed but the login was refused — still definitively a
|
|
128
|
+
// recorder-class management service, just password-protected.
|
|
129
|
+
recorderScore += 0.6;
|
|
130
|
+
evidence.push({
|
|
131
|
+
code: 'xm_handshake',
|
|
132
|
+
detail: 'Answered the recorder management handshake (credentials needed for details)',
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
// 2. ONVIF's own words for "this device records" / "this device is storage".
|
|
136
|
+
const hasProfileG = scopes.some((s) => /\/Profile\/G(\/|$)/i.test(s));
|
|
137
|
+
const isStorage = scopes.some((s) => /\/type\/NetworkVideoStorage(\/|$)/i.test(s));
|
|
138
|
+
if (hasProfileG) {
|
|
139
|
+
recorderScore += 0.8;
|
|
140
|
+
evidence.push({ code: 'onvif_profile_g', detail: 'Advertises ONVIF Profile G (video recording and storage)' });
|
|
141
|
+
}
|
|
142
|
+
if (isStorage) {
|
|
143
|
+
recorderScore += 0.8;
|
|
144
|
+
evidence.push({ code: 'onvif_type_storage', detail: 'Identifies itself as ONVIF network video storage' });
|
|
145
|
+
}
|
|
146
|
+
// 3. More than one service endpoint from one address means more than one feed.
|
|
147
|
+
const endpoints = distinctServiceEndpoints(xaddrs);
|
|
148
|
+
if (endpoints > 1) {
|
|
149
|
+
recorderScore += 0.7;
|
|
150
|
+
// NOT a channel count. A 32-channel NVR commonly advertises ONE ONVIF
|
|
151
|
+
// service endpoint, so endpoint count would be a guess wearing the costume
|
|
152
|
+
// of a device self-report — and the picker prints channelCount verbatim.
|
|
153
|
+
// It is evidence of "more than one feed", nothing more.
|
|
154
|
+
evidence.push({
|
|
155
|
+
code: 'onvif_multi_service',
|
|
156
|
+
detail: `Advertises ${endpoints} separate video ${plural(endpoints, 'service', 'services')} on one address`,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
// 4. A plain ONVIF responder is a camera until it says otherwise.
|
|
160
|
+
if (xaddrs.length > 0) {
|
|
161
|
+
cameraScore += 0.55;
|
|
162
|
+
evidence.push({ code: 'onvif_responder', detail: 'Answered an ONVIF discovery probe' });
|
|
163
|
+
}
|
|
164
|
+
// 5. Floor: something accepted a connection. Never enough on its own.
|
|
165
|
+
if (evidence.length === 0) {
|
|
166
|
+
const ports = openPorts.length > 0 ? openPorts.join(', ') : 'none';
|
|
167
|
+
evidence.push({
|
|
168
|
+
code: 'tcp_port_open',
|
|
169
|
+
detail: openPorts.length > 0
|
|
170
|
+
? `Only has a video port open (${ports}) — it has not identified itself`
|
|
171
|
+
: 'Responded on the network but has not identified itself',
|
|
172
|
+
});
|
|
173
|
+
return { kind: 'host', confidence: 0.2, evidence };
|
|
174
|
+
}
|
|
175
|
+
const kind = recorderScore > cameraScore ? 'recorder' : 'camera';
|
|
176
|
+
const winner = Math.max(recorderScore, cameraScore);
|
|
177
|
+
const confidence = Math.min(0.99, Math.round(winner * 100) / 100);
|
|
178
|
+
return { kind, confidence, evidence, ...(channelCount !== undefined ? { channelCount } : {}) };
|
|
179
|
+
}
|
|
180
|
+
// ─── Ranking ─────────────────────────────────────────────────────────────────
|
|
181
|
+
const KIND_RANK = { recorder: 0, camera: 1, host: 2 };
|
|
182
|
+
/** Sort IPv4 addresses numerically so .5 precedes .254 within a tier. */
|
|
183
|
+
function hostSortKey(host) {
|
|
184
|
+
return host
|
|
185
|
+
.split('.')
|
|
186
|
+
.map((part) => (/^\d+$/.test(part) ? part.padStart(5, '0') : part))
|
|
187
|
+
.join('.');
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Classify every discovered host and return a TOTAL order: recorders, then
|
|
191
|
+
* cameras, then unidentified hosts; within a tier by confidence, then by
|
|
192
|
+
* reported channel count, then by address. Deterministic — the same LAN always
|
|
193
|
+
* produces the same list, regardless of which socket won the scan race.
|
|
194
|
+
*
|
|
195
|
+
* Unknown fields are preserved: this widens the discovery envelope, it does not
|
|
196
|
+
* replace it.
|
|
197
|
+
*/
|
|
198
|
+
function rankDiscoveredHosts(hosts) {
|
|
199
|
+
const classified = (Array.isArray(hosts) ? hosts : [])
|
|
200
|
+
.filter((h) => !!h && typeof h === 'object')
|
|
201
|
+
.filter((h) => typeof h.host === 'string' && h.host.trim().length > 0)
|
|
202
|
+
.map((h) => {
|
|
203
|
+
const classification = classifyDiscoveredHost({
|
|
204
|
+
host: String(h.host),
|
|
205
|
+
openPorts: Array.isArray(h.openPorts) ? h.openPorts : [],
|
|
206
|
+
xaddrs: Array.isArray(h.xaddrs) ? h.xaddrs : [],
|
|
207
|
+
scopes: Array.isArray(h.scopes) ? h.scopes : [],
|
|
208
|
+
xm: h.xm ?? null,
|
|
209
|
+
});
|
|
210
|
+
return { ...h, host: String(h.host), ...classification };
|
|
211
|
+
});
|
|
212
|
+
return classified.sort((a, b) => {
|
|
213
|
+
const kind = KIND_RANK[a.kind] - KIND_RANK[b.kind];
|
|
214
|
+
if (kind !== 0)
|
|
215
|
+
return kind;
|
|
216
|
+
// Within a tier, a device that STATED how many cameras it runs outranks one
|
|
217
|
+
// that did not. Confidence answers "is this a recorder"; the reported count
|
|
218
|
+
// answers "is this THE recorder" — and the second question is the one the
|
|
219
|
+
// venue owner is asking. Without this, an ONVIF box scoring 0.99 on two
|
|
220
|
+
// weaker signals sat above the unit that said it runs 32 cameras.
|
|
221
|
+
const channels = (b.channelCount ?? 0) - (a.channelCount ?? 0);
|
|
222
|
+
if (channels !== 0)
|
|
223
|
+
return channels;
|
|
224
|
+
const confidence = b.confidence - a.confidence;
|
|
225
|
+
if (confidence !== 0)
|
|
226
|
+
return confidence;
|
|
227
|
+
return hostSortKey(a.host).localeCompare(hostSortKey(b.host));
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=recorderRanking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recorderRanking.js","sourceRoot":"","sources":["../src/recorderRanking.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sensingRunMode.d.ts","sourceRoot":"","sources":["../src/sensingRunMode.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAInB,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"sensingRunMode.d.ts","sourceRoot":"","sources":["../src/sensingRunMode.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAInB,KAAK,YAAY,EAElB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAMhD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC/C,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,CAClB,IAAI,EAAE,YAAY,EAClB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,KAAK,KACT,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC7B;AA2CD;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,IAAI;QAAE,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;CAClD;AAED,iFAAiF;AACjF,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,qEAAqE;AACrE,eAAO,MAAM,SAAS,EAAE,SAIvB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,QAEgD,CAAC;AAE9E;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,QAAgB,CAAC;AAqM5D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,GAC1D,MAAM,CA6CR;AAoDD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,eAAe,EACvB,EAAE,GAAE,SAAqB,EACzB,IAAI,CAAC,EAAE,kBAAkB,GACxB,mBAAmB,GAAG,IAAI,CAiE5B;AAqCD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,eAAe,EACvB,EAAE,GAAE,SAAqB,EACzB,IAAI,CAAC,EAAE,kBAAkB,GACxB,mBAAmB,GAAG,IAAI,CAwF5B"}
|
package/dist/sensingRunMode.js
CHANGED
|
@@ -102,6 +102,87 @@ function formatDeployedCadence(cadence) {
|
|
|
102
102
|
}
|
|
103
103
|
return parts;
|
|
104
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* The measured CPU→GPU delegate ratio on the SHIPPED code path, quoted on the
|
|
107
|
+
* operator line so "you are on CPU" carries the magnitude that makes somebody
|
|
108
|
+
* act on it.
|
|
109
|
+
*
|
|
110
|
+
* From `scripts/bench-local-vlm.mjs` — interleaved arms, quiet box, same
|
|
111
|
+
* fixture, same prompt, delegate the ONLY variable:
|
|
112
|
+
*
|
|
113
|
+
* | arm | s/frame |
|
|
114
|
+
* | cpu-dooh-sop (16 keys) | 13.92 |
|
|
115
|
+
* | gpu-dooh-sop (16 keys) | 2.11 | → 6.6x
|
|
116
|
+
* | cpu-sop (7 keys) | 3.61 |
|
|
117
|
+
* | gpu-sop (7 keys) | 1.29 | → 2.8x
|
|
118
|
+
*
|
|
119
|
+
* A RATIO is quoted rather than a latency on purpose. The same configuration
|
|
120
|
+
* measured 296.8 s at machine load ~110 and 21.4 s at load ~34 — a 14x swing
|
|
121
|
+
* from load alone — so an absolute s/frame number is meaningless without the
|
|
122
|
+
* load it was taken at, while the interleaved-arm ratio survives it. Accuracy
|
|
123
|
+
* is identical across delegates (9/12 both): the delegate changes SPEED, not
|
|
124
|
+
* answers, so this is pure waste and nothing else.
|
|
125
|
+
*/
|
|
126
|
+
const DELEGATE_SPEEDUP = '2.8-6.6x faster';
|
|
127
|
+
/**
|
|
128
|
+
* The one line that tells an operator WHICH litert-lm delegate their frames
|
|
129
|
+
* are actually going through.
|
|
130
|
+
*
|
|
131
|
+
* `LiteRtVlmProvider` has resolved and reported this since the `,gpu` variant
|
|
132
|
+
* shipped — and nothing a human reads ever printed it. A 32-camera field test
|
|
133
|
+
* on connector 0.2.13 reported "Gemma currently has one CPU inference slot,
|
|
134
|
+
* averaging roughly 2.4 analyses/minute" (~25 s/frame) and reasonably read
|
|
135
|
+
* that as the product's speed; it is ~19x the measured GPU+lean path. The
|
|
136
|
+
* tester saw the only thing the connector showed them. The counters above this
|
|
137
|
+
* fragment describe the SYMPTOM; this fragment is the DIAGNOSIS, and the two
|
|
138
|
+
* belong on the same line.
|
|
139
|
+
*
|
|
140
|
+
* The five CPU states are deliberately NOT one message. "This host has no GPU
|
|
141
|
+
* delegate" is a capability fact, "the operator pinned CPU" is a choice, and
|
|
142
|
+
* "the GPU was there and broke" is a fault with a reason worth paging on —
|
|
143
|
+
* collapsing them into one "running on CPU" would recreate exactly the
|
|
144
|
+
* ambiguity that made the field report unresolvable.
|
|
145
|
+
*/
|
|
146
|
+
function formatAccelerator(accelerator) {
|
|
147
|
+
// The cloud path runs no model on this machine — an absent fragment is the
|
|
148
|
+
// honest rendering, and an embedder on an older manager shape (no key at
|
|
149
|
+
// all) gets a sentence rather than a TypeError.
|
|
150
|
+
if (!accelerator || accelerator.feeds === 0)
|
|
151
|
+
return [];
|
|
152
|
+
const { delegate, gpuAdvertised, gpuDemoted, policy, reason } = accelerator;
|
|
153
|
+
if (delegate === 'gpu')
|
|
154
|
+
return ['on-device model: GPU delegate'];
|
|
155
|
+
if (delegate === null) {
|
|
156
|
+
return ['on-device model: delegate not resolved yet (no on-device inference has completed)'];
|
|
157
|
+
}
|
|
158
|
+
const head = delegate === 'mixed'
|
|
159
|
+
? 'on-device model: MIXED delegates across feeds'
|
|
160
|
+
: 'on-device model: CPU delegate';
|
|
161
|
+
// THE ALARM STATE. The machine had a GPU delegate and is not using it —
|
|
162
|
+
// the one case where the operator is paying a multiple for nothing. It
|
|
163
|
+
// outranks every other explanation, including a config pin, because a pin
|
|
164
|
+
// on a GPU-capable host is the same waste by another route.
|
|
165
|
+
if (gpuAdvertised === true) {
|
|
166
|
+
const what = gpuDemoted
|
|
167
|
+
? 'GPU WAS ADVERTISED BUT FAILED'
|
|
168
|
+
: 'GPU IS ADVERTISED BUT NOT IN USE';
|
|
169
|
+
return [`${head} — ${what}${reason ? `: ${reason}` : ''} (GPU measured ${DELEGATE_SPEEDUP})`];
|
|
170
|
+
}
|
|
171
|
+
// An explicit `accelerator: 'cpu'` never probes (by contract), so it can
|
|
172
|
+
// never reach the branch above — say it was a choice, not a failure.
|
|
173
|
+
if (policy === 'cpu') {
|
|
174
|
+
return [`${head} — PINNED by config (accelerator: cpu); GPU measured ${DELEGATE_SPEEDUP}`];
|
|
175
|
+
}
|
|
176
|
+
// A serve with no `,gpu` variant is a CAPABILITY FACT about this host, not
|
|
177
|
+
// a fault — it must not read like one, or every CPU-only install looks
|
|
178
|
+
// broken forever.
|
|
179
|
+
if (gpuAdvertised === false) {
|
|
180
|
+
return [`${head} — this litert-lm serve advertises no ,gpu variant`];
|
|
181
|
+
}
|
|
182
|
+
// Nothing probed successfully. Distinct from "no GPU here": a warming serve
|
|
183
|
+
// re-probes on the next frame, so this state is expected to be transient.
|
|
184
|
+
return [`${head} — GPU unprobed${reason ? ` (${reason})` : ''}`];
|
|
185
|
+
}
|
|
105
186
|
/**
|
|
106
187
|
* Operator wording for a cascade drop. Only the four SKIP reasons can appear on
|
|
107
188
|
* the capacity line; the three that mean "analyzed" are here so the map is
|
|
@@ -138,6 +219,28 @@ function describeSkips(cascade) {
|
|
|
138
219
|
return 'no change';
|
|
139
220
|
return named.map(([r, n]) => `${n} ${SKIP_WORDING[r]}`).join(' · ');
|
|
140
221
|
}
|
|
222
|
+
/**
|
|
223
|
+
* Operator wording for the candidate hold.
|
|
224
|
+
*
|
|
225
|
+
* `analyzed` is the win — a frame the cascade flagged, the model could not
|
|
226
|
+
* take at that instant, and that reached it anyway. `waiting` is the live
|
|
227
|
+
* depth. `evicted` and `expired` are losses and are named as losses: an
|
|
228
|
+
* interesting frame that never reached the model is the exact failure the hold
|
|
229
|
+
* exists to remove, and hiding it inside an aggregate would recreate it one
|
|
230
|
+
* layer up.
|
|
231
|
+
*/
|
|
232
|
+
function describeCandidateHold(hold) {
|
|
233
|
+
const bits = [`${hold.served} analyzed`];
|
|
234
|
+
if (hold.buffered > 0) {
|
|
235
|
+
const oldest = hold.oldestAgeMs === null ? '' : `, oldest ${(hold.oldestAgeMs / 1000).toFixed(0)}s`;
|
|
236
|
+
bits.push(`${hold.buffered}/${hold.maxFrames} waiting${oldest}`);
|
|
237
|
+
}
|
|
238
|
+
if (hold.evicted > 0)
|
|
239
|
+
bits.push(`${hold.evicted} evicted (hold full)`);
|
|
240
|
+
if (hold.expired > 0)
|
|
241
|
+
bits.push(`${hold.expired} expired (too old to act on)`);
|
|
242
|
+
return bits.join(' · ');
|
|
243
|
+
}
|
|
141
244
|
/**
|
|
142
245
|
* The operator-facing degradation line. A machine that cannot analyze 16
|
|
143
246
|
* cameras every 30 s is not a bug to hide — it is a capacity fact to state, in
|
|
@@ -152,12 +255,24 @@ function formatSensingHealth(health) {
|
|
|
152
255
|
`${health.loops} feed${health.loops === 1 ? '' : 's'}`,
|
|
153
256
|
`sampling ${perCamera}`,
|
|
154
257
|
`sustained ${health.analysesPerMinute.toFixed(1)} analyses/min (cap ${health.maxConcurrentAnalyses} concurrent)`,
|
|
258
|
+
// Immediately after the throughput number, because it is the largest
|
|
259
|
+
// single term in it — see formatAccelerator.
|
|
260
|
+
...formatAccelerator(health.accelerator),
|
|
155
261
|
];
|
|
156
262
|
if (health.motionSkipped > 0) {
|
|
157
263
|
parts.push(`${health.motionSkipped} skipped (${describeSkips(health.cascade)})`);
|
|
158
264
|
}
|
|
159
265
|
if (health.admissionDenied > 0)
|
|
160
266
|
parts.push(`${health.admissionDenied} deferred (model busy)`);
|
|
267
|
+
// …and where those deferred frames went. Printed whenever the hold is
|
|
268
|
+
// running, INCLUDING at zero, for the same reason the escalation line is:
|
|
269
|
+
// "did an interesting frame get thrown away" is a question an operator must
|
|
270
|
+
// be able to answer from the log, and an absent line reads as "none" whether
|
|
271
|
+
// or not the feature is even on. `evicted`/`expired` are the ones that cost
|
|
272
|
+
// something, so they lead when they are non-zero.
|
|
273
|
+
if (health.candidateBuffer?.enabled) {
|
|
274
|
+
parts.push(`held candidates: ${describeCandidateHold(health.candidateBuffer)}`);
|
|
275
|
+
}
|
|
161
276
|
// A corrected config is only corrected if somebody is told. `scanIntervalMs`
|
|
162
277
|
// is the one cascade knob a units typo can invert, and the floor that saves
|
|
163
278
|
// the recorder also hides the typo unless it is said out loud.
|
|
@@ -275,6 +390,10 @@ function buildCloudSensingManager(config, io = exports.consoleIo, opts) {
|
|
|
275
390
|
// relieve, and looking more often would raise the per-call bill instead of
|
|
276
391
|
// throughput. Local sensing enables it by default (see below).
|
|
277
392
|
motionGate: resolveMotionGateOptions(config, false),
|
|
393
|
+
// Inert unless the operator turned the cascade on: the hold needs a
|
|
394
|
+
// classifier, and a genuinely concurrent cloud backend has no slot to wait
|
|
395
|
+
// for in the first place.
|
|
396
|
+
candidateBuffer: config.cloudSensing?.candidateBuffer,
|
|
278
397
|
});
|
|
279
398
|
wireSensingLogs(manager, io, (name, response) => `[${name}] analyze → HTTP ${response.statusCode}${response.ok ? '' : ' (NOT OK)'}`);
|
|
280
399
|
return manager;
|
|
@@ -384,6 +503,11 @@ function buildLocalSensingManager(config, io = exports.consoleIo, opts) {
|
|
|
384
503
|
admissionRetryDelayMs: config.cloudSensing?.admissionRetryDelayMs,
|
|
385
504
|
// …and don't spend that one slot on an empty aisle: the cascade decides.
|
|
386
505
|
motionGate: resolveMotionGateOptions(config, true),
|
|
506
|
+
// …and don't lose the aisle that wasn't empty. One slot means a
|
|
507
|
+
// motion-positive frame can arrive while the model is mid-inference; the
|
|
508
|
+
// hold keeps THAT frame until the slot frees instead of dropping it and
|
|
509
|
+
// asking about an empty aisle thirteen minutes later.
|
|
510
|
+
candidateBuffer: config.cloudSensing?.candidateBuffer,
|
|
387
511
|
});
|
|
388
512
|
wireSensingLogs(manager, io, (name, response) => `[${name}] local→preAnalyzed → HTTP ${response.statusCode}${response.ok ? '' : ' (NOT OK)'}`);
|
|
389
513
|
return manager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sensingRunMode.js","sourceRoot":"","sources":["../src/sensingRunMode.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sensingRunMode.js","sourceRoot":"","sources":["../src/sensingRunMode.ts"],"names":[],"mappings":"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"}
|
package/dist/setupMode.d.ts
CHANGED
|
@@ -56,6 +56,15 @@ export declare function buildSetupPortalUrl(displayCode: string, portalBaseUrl?:
|
|
|
56
56
|
/** Open the setup handoff in the owner's default browser. Never uses a shell. */
|
|
57
57
|
export declare function openSetupPortal(url: string, platform?: NodeJS.Platform): Promise<boolean>;
|
|
58
58
|
export declare function normalizeDirectStreamUrl(input: string): string;
|
|
59
|
+
/**
|
|
60
|
+
* Merge the two discovery sources and RANK the result.
|
|
61
|
+
*
|
|
62
|
+
* Before ranking, this returned ONVIF-datagram-arrival order followed by
|
|
63
|
+
* TCP-sweep-race order, and the portal rendered that array verbatim — so the
|
|
64
|
+
* recorder a venue actually wanted could land anywhere among the printers and
|
|
65
|
+
* NAS boxes that happen to hold 554 open. That is why the field test gave up on
|
|
66
|
+
* the list and typed the IP by hand.
|
|
67
|
+
*/
|
|
59
68
|
export declare function mergeDiscoveredHosts(onvifHosts: unknown[], sweptHosts: unknown[]): unknown[];
|
|
60
69
|
/**
|
|
61
70
|
* Merge a finalized setup into the local config.
|
package/dist/setupMode.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupMode.d.ts","sourceRoot":"","sources":["../src/setupMode.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAA+C,MAAM,sBAAsB,CAAC;AACvG,OAAO,EACL,SAAS,EAMT,KAAK,kBAAkB,EACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"setupMode.d.ts","sourceRoot":"","sources":["../src/setupMode.ts"],"names":[],"mappings":"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"}
|
package/dist/setupMode.js
CHANGED
|
@@ -48,6 +48,7 @@ const child_process_1 = require("child_process");
|
|
|
48
48
|
const SetupSessionClient_1 = require("./SetupSessionClient");
|
|
49
49
|
const ChannelProber_1 = require("./ChannelProber");
|
|
50
50
|
const discovery_1 = require("./discovery");
|
|
51
|
+
const recorderRanking_1 = require("./recorderRanking");
|
|
51
52
|
const connectorCadence_1 = require("./connectorCadence");
|
|
52
53
|
const legacyRecorderProfile_1 = require("./legacyRecorderProfile");
|
|
53
54
|
const RecorderAddressRecovery_1 = require("./RecorderAddressRecovery");
|
|
@@ -149,6 +150,15 @@ function directStreamInfo(streamUrl, preferredName) {
|
|
|
149
150
|
brand: looksUbiquiti ? 'ubiquiti' : 'direct-link',
|
|
150
151
|
};
|
|
151
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Merge the two discovery sources and RANK the result.
|
|
155
|
+
*
|
|
156
|
+
* Before ranking, this returned ONVIF-datagram-arrival order followed by
|
|
157
|
+
* TCP-sweep-race order, and the portal rendered that array verbatim — so the
|
|
158
|
+
* recorder a venue actually wanted could land anywhere among the printers and
|
|
159
|
+
* NAS boxes that happen to hold 554 open. That is why the field test gave up on
|
|
160
|
+
* the list and typed the IP by hand.
|
|
161
|
+
*/
|
|
152
162
|
function mergeDiscoveredHosts(onvifHosts, sweptHosts) {
|
|
153
163
|
const sweptByHost = new Map(sweptHosts
|
|
154
164
|
.filter((host) => typeof host?.host === 'string' && host.host)
|
|
@@ -166,13 +176,16 @@ function mergeDiscoveredHosts(onvifHosts, sweptHosts) {
|
|
|
166
176
|
...host,
|
|
167
177
|
...(Array.isArray(swept.openPorts) ? { openPorts: swept.openPorts } : {}),
|
|
168
178
|
...(typeof swept.brandHint === 'string' ? { brandHint: swept.brandHint } : {}),
|
|
179
|
+
// An ONVIF responder can also speak XM; its self-reported channel count
|
|
180
|
+
// is the strongest signal we have and must survive the merge.
|
|
181
|
+
...(swept.xm ? { xm: swept.xm } : {}),
|
|
169
182
|
};
|
|
170
183
|
});
|
|
171
184
|
for (const swept of sweptByHost.values()) {
|
|
172
185
|
if (!seen.has(String(swept.host)))
|
|
173
186
|
merged.push(swept);
|
|
174
187
|
}
|
|
175
|
-
return merged;
|
|
188
|
+
return (0, recorderRanking_1.rankDiscoveredHosts)(merged);
|
|
176
189
|
}
|
|
177
190
|
function recorderIdentityFor(camera, credsByHost, probedByChannelKey, macByHost) {
|
|
178
191
|
const probed = probedByChannelKey.get(camera.channelKey);
|
|
@@ -479,6 +492,15 @@ async function runSetupMode(opts) {
|
|
|
479
492
|
catch {
|
|
480
493
|
swept = [];
|
|
481
494
|
}
|
|
495
|
+
// Ask anything holding the XM service port open to describe itself. One
|
|
496
|
+
// login exchange per host; the reply names its own channel count, which is
|
|
497
|
+
// what promotes "a host with a port open" to "your 32-channel recorder".
|
|
498
|
+
try {
|
|
499
|
+
swept = await (0, discovery_1.annotateXmRecorders)(swept);
|
|
500
|
+
}
|
|
501
|
+
catch {
|
|
502
|
+
/* best-effort: fall back to port-open evidence */
|
|
503
|
+
}
|
|
482
504
|
// Merge: ONVIF hits are richer; sweep adds no-ONVIF recorders (as bare
|
|
483
505
|
// host entries the portal renders as "Recorder at <ip> — tap to connect").
|
|
484
506
|
const discoveredHosts = mergeDiscoveredHosts(onvifHosts, swept);
|