@trillboards/edge-sdk 0.2.4 → 0.2.7
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/README.md +4 -3
- package/deploy/docker/Dockerfile.cloud-sense +117 -0
- package/deploy/docker/Dockerfile.cpu +30 -21
- package/deploy/docker/Dockerfile.cuda +30 -21
- package/deploy/docker/Dockerfile.openvino +30 -20
- package/deploy/docker/README.md +9 -5
- package/deploy/docker/connector-entrypoint.sh +122 -0
- package/deploy/helm/README.md +1 -1
- package/deploy/k8s/daemonset.yaml +1 -1
- package/deploy/macos/README.md +161 -0
- package/deploy/macos/TrillboardsSetupApp.m +603 -0
- package/deploy/macos/build-macos-pkg.sh +588 -0
- package/deploy/macos/com.trillboards.edge.plist +62 -0
- package/deploy/macos/com.trillboards.litertlm.plist +45 -0
- package/deploy/macos/pair.command +519 -0
- package/deploy/macos/scripts/ensure-litertlm.sh +62 -0
- package/deploy/macos/scripts/postinstall +153 -0
- package/deploy/macos/scripts/setup-litertlm.sh +272 -0
- package/deploy/macos/test-install-pair.sh +383 -0
- package/deploy/macos/test-setup-litertlm-reinstall.sh +109 -0
- package/deploy/systemd/install.sh +25 -15
- package/deploy/systemd/trillboards-edge.service +4 -1
- package/deploy/windows/README.md +70 -0
- package/deploy/windows/build-windows.ps1 +225 -0
- package/deploy/windows/bundle-windows-installer.ps1 +153 -0
- package/deploy/windows/check-feeds.js +26 -0
- package/deploy/windows/e2e/fixtures/person.jpg +0 -0
- package/deploy/windows/e2e/test-local-sense.ps1 +185 -0
- package/deploy/windows/install-service.ps1 +6 -1
- package/deploy/windows/install-update.ps1 +101 -0
- package/deploy/windows/installer.nsi +138 -0
- package/deploy/windows/register-litertlm-task.ps1 +42 -0
- package/deploy/windows/register-task.ps1 +44 -0
- package/deploy/windows/run-connector.ps1 +69 -0
- package/deploy/windows/setup-litertlm.ps1 +361 -0
- package/deploy/windows/stop-existing.ps1 +72 -0
- package/deploy/windows/trillboards-edge-task.vbs +25 -0
- package/deploy/windows/trillboards-edge.cmd +33 -0
- package/deploy/windows/trillboards-pair.cmd +276 -0
- package/deploy/windows/trillboards-setup.ps1 +456 -0
- package/deploy/windows/trillboards-setup.vbs +13 -0
- package/dist/AudienceAnalyzeClient.d.ts +136 -0
- package/dist/AudienceAnalyzeClient.d.ts.map +1 -0
- package/dist/AudienceAnalyzeClient.js +246 -0
- package/dist/AudienceAnalyzeClient.js.map +1 -0
- package/dist/ChannelProber.d.ts +150 -0
- package/dist/ChannelProber.d.ts.map +1 -0
- package/dist/ChannelProber.js +887 -0
- package/dist/ChannelProber.js.map +1 -0
- package/dist/CloudEscalationPolicy.d.ts +143 -0
- package/dist/CloudEscalationPolicy.d.ts.map +1 -0
- package/dist/CloudEscalationPolicy.js +137 -0
- package/dist/CloudEscalationPolicy.js.map +1 -0
- package/dist/CloudSensingManager.d.ts +557 -0
- package/dist/CloudSensingManager.d.ts.map +1 -0
- package/dist/CloudSensingManager.js +1267 -0
- package/dist/CloudSensingManager.js.map +1 -0
- package/dist/DiscoveryReportClient.d.ts +66 -0
- package/dist/DiscoveryReportClient.d.ts.map +1 -0
- package/dist/DiscoveryReportClient.js +85 -0
- package/dist/DiscoveryReportClient.js.map +1 -0
- package/dist/EdgeAgent.d.ts +12 -2
- package/dist/EdgeAgent.d.ts.map +1 -1
- package/dist/EdgeAgent.js +55 -13
- package/dist/EdgeAgent.js.map +1 -1
- package/dist/LiteRtVlmProvider.d.ts +193 -0
- package/dist/LiteRtVlmProvider.d.ts.map +1 -0
- package/dist/LiteRtVlmProvider.js +436 -0
- package/dist/LiteRtVlmProvider.js.map +1 -0
- package/dist/MosaicSource.d.ts +108 -0
- package/dist/MosaicSource.d.ts.map +1 -0
- package/dist/MosaicSource.js +274 -0
- package/dist/MosaicSource.js.map +1 -0
- package/dist/OnvifClient.d.ts +83 -0
- package/dist/OnvifClient.d.ts.map +1 -0
- package/dist/OnvifClient.js +209 -0
- package/dist/OnvifClient.js.map +1 -0
- package/dist/PairClient.d.ts +106 -0
- package/dist/PairClient.d.ts.map +1 -0
- package/dist/PairClient.js +186 -0
- package/dist/PairClient.js.map +1 -0
- package/dist/RecorderAddressRecovery.d.ts +53 -0
- package/dist/RecorderAddressRecovery.d.ts.map +1 -0
- package/dist/RecorderAddressRecovery.js +359 -0
- package/dist/RecorderAddressRecovery.js.map +1 -0
- package/dist/SceneChangeDetector.d.ts +291 -0
- package/dist/SceneChangeDetector.d.ts.map +1 -0
- package/dist/SceneChangeDetector.js +682 -0
- package/dist/SceneChangeDetector.js.map +1 -0
- package/dist/SensingProfileClient.d.ts +59 -0
- package/dist/SensingProfileClient.d.ts.map +1 -0
- package/dist/SensingProfileClient.js +78 -0
- package/dist/SensingProfileClient.js.map +1 -0
- package/dist/SetupSessionClient.d.ts +114 -0
- package/dist/SetupSessionClient.d.ts.map +1 -0
- package/dist/SetupSessionClient.js +95 -0
- package/dist/SetupSessionClient.js.map +1 -0
- package/dist/VlmAdmissionGate.d.ts +126 -0
- package/dist/VlmAdmissionGate.d.ts.map +1 -0
- package/dist/VlmAdmissionGate.js +166 -0
- package/dist/VlmAdmissionGate.js.map +1 -0
- package/dist/autoSense.d.ts +266 -0
- package/dist/autoSense.d.ts.map +1 -0
- package/dist/autoSense.js +606 -0
- package/dist/autoSense.js.map +1 -0
- package/dist/cli.d.ts +27 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +526 -27
- package/dist/cli.js.map +1 -1
- package/dist/combinedSense.d.ts +128 -0
- package/dist/combinedSense.d.ts.map +1 -0
- package/dist/combinedSense.js +261 -0
- package/dist/combinedSense.js.map +1 -0
- package/dist/config.d.ts +351 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +99 -2
- package/dist/config.js.map +1 -1
- package/dist/connectorCadence.d.ts +135 -0
- package/dist/connectorCadence.d.ts.map +1 -0
- package/dist/connectorCadence.js +151 -0
- package/dist/connectorCadence.js.map +1 -0
- package/dist/dataDir.d.ts +33 -0
- package/dist/dataDir.d.ts.map +1 -0
- package/dist/dataDir.js +76 -0
- package/dist/dataDir.js.map +1 -0
- package/dist/deployedCadence.d.ts +167 -0
- package/dist/deployedCadence.d.ts.map +1 -0
- package/dist/deployedCadence.js +209 -0
- package/dist/deployedCadence.js.map +1 -0
- package/dist/deployedCadenceSource.d.ts +48 -0
- package/dist/deployedCadenceSource.d.ts.map +1 -0
- package/dist/deployedCadenceSource.js +74 -0
- package/dist/deployedCadenceSource.js.map +1 -0
- package/dist/diagnose.d.ts +1 -1
- package/dist/diagnose.d.ts.map +1 -1
- package/dist/diagnose.js +15 -13
- package/dist/diagnose.js.map +1 -1
- package/dist/discovery.d.ts +131 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +499 -0
- package/dist/discovery.js.map +1 -0
- package/dist/gemmaModelOta.d.ts +118 -0
- package/dist/gemmaModelOta.d.ts.map +1 -0
- package/dist/gemmaModelOta.js +291 -0
- package/dist/gemmaModelOta.js.map +1 -0
- package/dist/index.d.ts +16 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +40 -1
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +25 -87
- package/dist/init.js.map +1 -1
- package/dist/keepAwake.d.ts +33 -0
- package/dist/keepAwake.d.ts.map +1 -0
- package/dist/keepAwake.js +54 -0
- package/dist/keepAwake.js.map +1 -0
- package/dist/legacyRecorderProfile.d.ts +20 -0
- package/dist/legacyRecorderProfile.d.ts.map +1 -0
- package/dist/legacyRecorderProfile.js +27 -0
- package/dist/legacyRecorderProfile.js.map +1 -0
- package/dist/localInferenceSchema.d.ts +132 -0
- package/dist/localInferenceSchema.d.ts.map +1 -0
- package/dist/localInferenceSchema.js +274 -0
- package/dist/localInferenceSchema.js.map +1 -0
- package/dist/localSenseE2eHarness.d.ts +101 -0
- package/dist/localSenseE2eHarness.d.ts.map +1 -0
- package/dist/localSenseE2eHarness.js +279 -0
- package/dist/localSenseE2eHarness.js.map +1 -0
- package/dist/localSensing.d.ts +284 -0
- package/dist/localSensing.d.ts.map +1 -0
- package/dist/localSensing.js +512 -0
- package/dist/localSensing.js.map +1 -0
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +3 -1
- package/dist/mcp-server.js.map +1 -1
- package/dist/modelIntegrity.d.ts +80 -0
- package/dist/modelIntegrity.d.ts.map +1 -0
- package/dist/modelIntegrity.js +194 -0
- package/dist/modelIntegrity.js.map +1 -0
- package/dist/pairVerify.d.ts +100 -0
- package/dist/pairVerify.d.ts.map +1 -0
- package/dist/pairVerify.js +296 -0
- package/dist/pairVerify.js.map +1 -0
- package/dist/qrScanner.d.ts +33 -0
- package/dist/qrScanner.d.ts.map +1 -0
- package/dist/qrScanner.js +103 -0
- package/dist/qrScanner.js.map +1 -0
- package/dist/runtimePaths.d.ts +10 -0
- package/dist/runtimePaths.d.ts.map +1 -0
- package/dist/runtimePaths.js +79 -0
- package/dist/runtimePaths.js.map +1 -0
- package/dist/sensingRunMode.d.ts +86 -0
- package/dist/sensingRunMode.d.ts.map +1 -0
- package/dist/sensingRunMode.js +346 -0
- package/dist/sensingRunMode.js.map +1 -0
- package/dist/setupMode.d.ts +98 -0
- package/dist/setupMode.d.ts.map +1 -0
- package/dist/setupMode.js +828 -0
- package/dist/setupMode.js.map +1 -0
- package/dist/setupProgress.d.ts +31 -0
- package/dist/setupProgress.d.ts.map +1 -0
- package/dist/setupProgress.js +173 -0
- package/dist/setupProgress.js.map +1 -0
- package/package.json +13 -4
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* gemmaModelOta — keep the BYO-CCTV connector's on-device LiteRT-LM VLM (Gemma)
|
|
4
|
+
* up to date over the air, REUSING the generic @trillboards/edge-core
|
|
5
|
+
* `ModelManager` (atomic .tmp+rename download, SHA-256 verify, redirect-follow
|
|
6
|
+
* for S3 presigned URLs, NO size cap — purpose-built for the ~2.4 GB `.litertlm`
|
|
7
|
+
* file). This is NOT `@trillboards/edge-federated`'s `FederatedModelClient`,
|
|
8
|
+
* whose hard 500 MB cap is for tiny aggregated slice weights.
|
|
9
|
+
*
|
|
10
|
+
* How it reuses ModelManager + the existing /v1/federated/models channel:
|
|
11
|
+
* - The model is registered under modelType `gemma-vlm`, whose `filePath` is
|
|
12
|
+
* the litert-lm STORE path (`~/.litert-lm/models/<id>/model.litertlm`). The
|
|
13
|
+
* litert-lm registry IS the filesystem (no manifest), so ModelManager's
|
|
14
|
+
* atomic download straight INTO the store path is itself the drop-in update.
|
|
15
|
+
* - ModelManager.checkForUpdates polls `GET /v1/federated/models?
|
|
16
|
+
* deviceFingerprint=X&modelType=gemma-vlm`; the server returns the version +
|
|
17
|
+
* an S3 presigned `downloadUrl` from the existing sensing_model_registry SoR.
|
|
18
|
+
* - A model pre-bundled into the installer is recorded as already-installed via
|
|
19
|
+
* a version marker written next to the store file by setup-litertlm, so the
|
|
20
|
+
* first check does NOT re-download the bundled model.
|
|
21
|
+
* - On `modelUpdated` we clear stale XNNPACK caches (the new weights must not
|
|
22
|
+
* reuse the old compiled graph) and RESTART `litert-lm serve` (its engine is
|
|
23
|
+
* lazy-loaded + cached in memory per model id, so a file swap alone is not
|
|
24
|
+
* picked up until restart).
|
|
25
|
+
*
|
|
26
|
+
* Entirely NON-FATAL: any failure here only means the connector keeps serving its
|
|
27
|
+
* current model — it must never break sensing. Node built-ins only (survives
|
|
28
|
+
* bundling into the self-contained connector; trivially mockable in tests).
|
|
29
|
+
*/
|
|
30
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
31
|
+
if (k2 === undefined) k2 = k;
|
|
32
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
33
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
34
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
35
|
+
}
|
|
36
|
+
Object.defineProperty(o, k2, desc);
|
|
37
|
+
}) : (function(o, m, k, k2) {
|
|
38
|
+
if (k2 === undefined) k2 = k;
|
|
39
|
+
o[k2] = m[k];
|
|
40
|
+
}));
|
|
41
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
42
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
43
|
+
}) : function(o, v) {
|
|
44
|
+
o["default"] = v;
|
|
45
|
+
});
|
|
46
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
47
|
+
var ownKeys = function(o) {
|
|
48
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
49
|
+
var ar = [];
|
|
50
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
51
|
+
return ar;
|
|
52
|
+
};
|
|
53
|
+
return ownKeys(o);
|
|
54
|
+
};
|
|
55
|
+
return function (mod) {
|
|
56
|
+
if (mod && mod.__esModule) return mod;
|
|
57
|
+
var result = {};
|
|
58
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
59
|
+
__setModuleDefault(result, mod);
|
|
60
|
+
return result;
|
|
61
|
+
};
|
|
62
|
+
})();
|
|
63
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
64
|
+
exports.GEMMA_VLM_MODEL_TYPE = void 0;
|
|
65
|
+
exports.resolveLiteRtLmStoreModelPath = resolveLiteRtLmStoreModelPath;
|
|
66
|
+
exports.readBundledModelVersion = readBundledModelVersion;
|
|
67
|
+
exports.clearStaleXnnpackCaches = clearStaleXnnpackCaches;
|
|
68
|
+
exports.restartLiteRtLmServe = restartLiteRtLmServe;
|
|
69
|
+
exports.startGemmaModelOta = startGemmaModelOta;
|
|
70
|
+
const fs = __importStar(require("fs"));
|
|
71
|
+
const os = __importStar(require("os"));
|
|
72
|
+
const path = __importStar(require("path"));
|
|
73
|
+
const child_process_1 = require("child_process");
|
|
74
|
+
const edge_core_1 = require("@trillboards/edge-core");
|
|
75
|
+
/** The connector-facing OTA modelType for the on-device Gemma VLM. */
|
|
76
|
+
exports.GEMMA_VLM_MODEL_TYPE = 'gemma-vlm';
|
|
77
|
+
/** Default litert-lm model id (matches config.localSensing.model + the serve store). */
|
|
78
|
+
const DEFAULT_LITERT_LM_MODEL = 'gemma-4-E2B-it.litertlm';
|
|
79
|
+
/** macOS LaunchAgent / Windows Scheduled-Task labels for `litert-lm serve`. */
|
|
80
|
+
const MACOS_SERVE_LABEL = 'com.trillboards.litertlm';
|
|
81
|
+
const WINDOWS_SERVE_TASK = 'TrillboardsLiteRtLm';
|
|
82
|
+
/** Marker (written by setup-litertlm next to the store model) = the installed version. */
|
|
83
|
+
const BUNDLED_VERSION_MARKER = 'trillboards-bundled-version.json';
|
|
84
|
+
/**
|
|
85
|
+
* Resolve the litert-lm STORE path for a model id:
|
|
86
|
+
* ${LITERT_LM_DIR:-~/.litert-lm}/models/<id>/model.litertlm
|
|
87
|
+
* This is exactly where `litert-lm serve` reads the model from (the registry is
|
|
88
|
+
* the filesystem), so writing here IS the model swap.
|
|
89
|
+
*/
|
|
90
|
+
function resolveLiteRtLmStoreModelPath(opts) {
|
|
91
|
+
const env = opts.env ?? process.env;
|
|
92
|
+
const home = opts.homedir ?? os.homedir();
|
|
93
|
+
const base = env.LITERT_LM_DIR && env.LITERT_LM_DIR.trim()
|
|
94
|
+
? env.LITERT_LM_DIR
|
|
95
|
+
: path.join(home, '.litert-lm');
|
|
96
|
+
return path.join(base, 'models', opts.modelId, 'model.litertlm');
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Read the bundled/installed version marker written by setup-litertlm next to the
|
|
100
|
+
* store model. Returns null when absent/unreadable (the model may not be
|
|
101
|
+
* installed yet — in which case the OTA will simply download it, a bonus
|
|
102
|
+
* self-heal). NEVER throws.
|
|
103
|
+
*/
|
|
104
|
+
function readBundledModelVersion(storeModelPath) {
|
|
105
|
+
try {
|
|
106
|
+
const markerPath = path.join(path.dirname(storeModelPath), BUNDLED_VERSION_MARKER);
|
|
107
|
+
if (!fs.existsSync(markerPath))
|
|
108
|
+
return null;
|
|
109
|
+
// Strip a leading UTF-8 BOM: Windows PowerShell 5.1 `Set-Content -Encoding utf8`
|
|
110
|
+
// writes one and JSON.parse rejects it. setup-litertlm.ps1 now writes BOM-free,
|
|
111
|
+
// but be tolerant of any marker source so the version always seeds.
|
|
112
|
+
let raw = fs.readFileSync(markerPath, 'utf-8');
|
|
113
|
+
if (raw.charCodeAt(0) === 0xfeff)
|
|
114
|
+
raw = raw.slice(1);
|
|
115
|
+
const parsed = JSON.parse(raw);
|
|
116
|
+
return typeof parsed?.version === 'string' && parsed.version ? parsed.version : null;
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Delete stale XNNPACK cache siblings of the store model. litert-lm compiles the
|
|
124
|
+
* model graph into `model.litertlm.*xnnpack_cache*` files on first serve; after a
|
|
125
|
+
* weights swap those caches are stale and MUST be cleared so the new model is
|
|
126
|
+
* recompiled cleanly (a same-size replace would otherwise silently reuse the old
|
|
127
|
+
* compiled graph). NEVER throws.
|
|
128
|
+
*/
|
|
129
|
+
function clearStaleXnnpackCaches(storeModelPath, log = () => { }) {
|
|
130
|
+
try {
|
|
131
|
+
const dir = path.dirname(storeModelPath);
|
|
132
|
+
const modelFile = path.basename(storeModelPath); // model.litertlm
|
|
133
|
+
if (!fs.existsSync(dir))
|
|
134
|
+
return;
|
|
135
|
+
for (const entry of fs.readdirSync(dir)) {
|
|
136
|
+
// Caches are named like `model.litertlm.<...>xnnpack_cache<...>` — same
|
|
137
|
+
// prefix as the model file but NOT the model file itself.
|
|
138
|
+
if (entry !== modelFile && entry.startsWith(modelFile) && entry.includes('xnnpack')) {
|
|
139
|
+
try {
|
|
140
|
+
fs.rmSync(path.join(dir, entry), { force: true });
|
|
141
|
+
log(`[gemma-ota] cleared stale XNNPACK cache ${entry}`);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
/* best-effort */
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
/* best-effort */
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Default platform-aware `litert-lm serve` restart. The serve process caches the
|
|
155
|
+
* model engine in memory, so after a file swap it must be restarted to load the
|
|
156
|
+
* new weights.
|
|
157
|
+
* macOS: launchctl kickstart -k gui/<uid>/com.trillboards.litertlm
|
|
158
|
+
* Windows: schtasks /End then /Run on TrillboardsLiteRtLm
|
|
159
|
+
* Linux: no managed serve unit in this repo — log + rely on the next natural
|
|
160
|
+
* restart (KeepAlive supervisors, if any, reload the swapped file).
|
|
161
|
+
*/
|
|
162
|
+
async function restartLiteRtLmServe(deps = {}) {
|
|
163
|
+
const platform = deps.platform ?? process.platform;
|
|
164
|
+
const log = deps.log ?? ((m) => console.log(m));
|
|
165
|
+
const run = deps.execFileFn ?? defaultExecFile;
|
|
166
|
+
if (platform === 'darwin') {
|
|
167
|
+
const uid = deps.uid ?? (typeof process.getuid === 'function' ? process.getuid() : 0);
|
|
168
|
+
await run('launchctl', ['kickstart', '-k', `gui/${uid}/${MACOS_SERVE_LABEL}`]);
|
|
169
|
+
log(`[gemma-ota] restarted litert-lm serve (launchctl kickstart ${MACOS_SERVE_LABEL})`);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
if (platform === 'win32') {
|
|
173
|
+
// /End is best-effort (no-op if not running); /Run starts it fresh.
|
|
174
|
+
try {
|
|
175
|
+
await run('schtasks', ['/End', '/TN', WINDOWS_SERVE_TASK]);
|
|
176
|
+
}
|
|
177
|
+
catch { /* may not be running */ }
|
|
178
|
+
await run('schtasks', ['/Run', '/TN', WINDOWS_SERVE_TASK]);
|
|
179
|
+
log(`[gemma-ota] restarted litert-lm serve (schtasks /Run ${WINDOWS_SERVE_TASK})`);
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
log('[gemma-ota] model updated; no managed litert-lm serve unit on this platform — '
|
|
183
|
+
+ 'serve will pick up the new model on its next restart');
|
|
184
|
+
}
|
|
185
|
+
function defaultExecFile(cmd, args) {
|
|
186
|
+
return new Promise((resolve, reject) => {
|
|
187
|
+
(0, child_process_1.execFile)(cmd, args, (err) => (err ? reject(err) : resolve()));
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
/** Stable, non-PII connector fingerprint for the OTA version-check query param. */
|
|
191
|
+
function connectorFingerprint(config) {
|
|
192
|
+
if (config.screenId)
|
|
193
|
+
return String(config.screenId);
|
|
194
|
+
const raw = `${os.hostname()}|${process.platform}|${os.arch()}`;
|
|
195
|
+
// Cheap stable hash without pulling crypto into the hot path.
|
|
196
|
+
let h = 0;
|
|
197
|
+
for (let i = 0; i < raw.length; i += 1)
|
|
198
|
+
h = (Math.imul(31, h) + raw.charCodeAt(i)) | 0;
|
|
199
|
+
return `conn_${(h >>> 0).toString(16)}`;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Start the gemma-vlm OTA loop. Returns a handle (or null when disabled / not
|
|
203
|
+
* applicable). NON-FATAL: a thrown error is swallowed (logged) so OTA wiring can
|
|
204
|
+
* never break the sensing run mode.
|
|
205
|
+
*/
|
|
206
|
+
function startGemmaModelOta(config, deps = {}) {
|
|
207
|
+
const log = deps.log ?? ((m) => console.log(m));
|
|
208
|
+
try {
|
|
209
|
+
if (config.localSensing?.modelOtaEnabled === false) {
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
const env = deps.env ?? process.env;
|
|
213
|
+
const modelId = config.localSensing?.model || DEFAULT_LITERT_LM_MODEL;
|
|
214
|
+
// The gemma-vlm OTA alias maps (server-side) to the Gemma model. If the
|
|
215
|
+
// operator pointed localSensing.model at a DIFFERENT imported litert-lm model
|
|
216
|
+
// (e.g. a custom/test model), OTA-updating here would overwrite THAT model's
|
|
217
|
+
// store `model.litertlm` with Gemma + restart serve. So only manage the default
|
|
218
|
+
// Gemma model; a custom model is left untouched (no gemma-vlm OTA for it).
|
|
219
|
+
if (modelId !== DEFAULT_LITERT_LM_MODEL) {
|
|
220
|
+
log(`[gemma-ota] localSensing.model='${modelId}' is not the default Gemma model — gemma-vlm OTA disabled (won't overwrite a custom model)`);
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
const storeModelPath = deps.storeModelPath
|
|
224
|
+
?? resolveLiteRtLmStoreModelPath({ modelId, env, homedir: deps.homedir });
|
|
225
|
+
const apiBaseUrl = config.apiBaseUrl || 'https://api.trillboards.com';
|
|
226
|
+
const dataDir = config.dataDir || path.join(os.homedir(), '.trillboards');
|
|
227
|
+
const modelsDir = path.join(dataDir, 'model-ota');
|
|
228
|
+
const deviceFingerprint = connectorFingerprint(config);
|
|
229
|
+
const checkIntervalMs = config.localSensing?.modelOtaCheckIntervalMs;
|
|
230
|
+
const installedVersion = readBundledModelVersion(storeModelPath);
|
|
231
|
+
const mgr = (deps.createModelManager ?? defaultCreateModelManager)({
|
|
232
|
+
modelsDir,
|
|
233
|
+
apiBaseUrl,
|
|
234
|
+
deviceFingerprint,
|
|
235
|
+
checkIntervalMs,
|
|
236
|
+
autoUpdate: true,
|
|
237
|
+
});
|
|
238
|
+
// Register at the litert-lm STORE path → ModelManager's atomic download IS the
|
|
239
|
+
// drop-in. Seed the installed version so the bundled model isn't re-downloaded.
|
|
240
|
+
mgr.registerModel(exports.GEMMA_VLM_MODEL_TYPE, storeModelPath, installedVersion ? { version: installedVersion } : undefined);
|
|
241
|
+
mgr.on('modelUpdated', (evt) => {
|
|
242
|
+
if (evt?.name !== exports.GEMMA_VLM_MODEL_TYPE)
|
|
243
|
+
return;
|
|
244
|
+
log(`[gemma-ota] on-device VLM updated to v${evt.newVersion} — refreshing litert-lm serve`);
|
|
245
|
+
// Clear stale compiled-graph caches, then restart serve to load new weights.
|
|
246
|
+
clearStaleXnnpackCaches(storeModelPath, log);
|
|
247
|
+
const restart = deps.restartServe ?? (() => restartLiteRtLmServe(deps));
|
|
248
|
+
Promise.resolve()
|
|
249
|
+
.then(restart)
|
|
250
|
+
.catch((err) => log(`[gemma-ota] serve restart failed (non-fatal): ${err?.message || err}`));
|
|
251
|
+
});
|
|
252
|
+
mgr.on('downloadProgress', (evt) => {
|
|
253
|
+
if (typeof evt?.percent === 'number' && evt.percent % 25 === 0) {
|
|
254
|
+
log(`[gemma-ota] downloading on-device VLM update… ${evt.percent}%`);
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
mgr.on('downloadError', (evt) => {
|
|
258
|
+
log(`[gemma-ota] update check/download issue (non-fatal): ${evt?.error}`);
|
|
259
|
+
});
|
|
260
|
+
log(`[gemma-ota] watching ${exports.GEMMA_VLM_MODEL_TYPE} (installed v${installedVersion ?? '0.0.0'}) at ${storeModelPath} ` +
|
|
261
|
+
`via ${apiBaseUrl}/v1/federated/models`);
|
|
262
|
+
// initialize() loads the manifest + verifies the on-disk file; start() arms the
|
|
263
|
+
// periodic check. Both are kicked off async + non-fatal.
|
|
264
|
+
Promise.resolve()
|
|
265
|
+
.then(() => mgr.initialize())
|
|
266
|
+
.then(() => mgr.start())
|
|
267
|
+
.catch((err) => log(`[gemma-ota] init failed (non-fatal): ${err?.message || err}`));
|
|
268
|
+
return {
|
|
269
|
+
stop() {
|
|
270
|
+
try {
|
|
271
|
+
mgr.stop();
|
|
272
|
+
}
|
|
273
|
+
catch { /* best-effort */ }
|
|
274
|
+
},
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
catch (err) {
|
|
278
|
+
log(`[gemma-ota] disabled — startup failed (non-fatal): ${err?.message || err}`);
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
function defaultCreateModelManager(opts) {
|
|
283
|
+
return new edge_core_1.ModelManager({
|
|
284
|
+
modelsDir: opts.modelsDir,
|
|
285
|
+
apiBaseUrl: opts.apiBaseUrl,
|
|
286
|
+
deviceFingerprint: opts.deviceFingerprint,
|
|
287
|
+
...(opts.checkIntervalMs ? { checkIntervalMs: opts.checkIntervalMs } : {}),
|
|
288
|
+
autoUpdate: opts.autoUpdate ?? true,
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=gemmaModelOta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemmaModelOta.js","sourceRoot":"","sources":["../src/gemmaModelOta.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,25 @@
|
|
|
1
1
|
export { EdgeAgent } from './EdgeAgent';
|
|
2
|
-
export type { EdgeAgentConfig } from './config';
|
|
2
|
+
export type { EdgeAgentConfig, CameraFeedConfig, RecorderIdentity } from './config';
|
|
3
3
|
export { loadConfig, resolveConfig } from './config';
|
|
4
4
|
export { CommandRouter } from './CommandRouter';
|
|
5
5
|
export type { CommandContext, DeviceCommand, CommandResult } from './CommandRouter';
|
|
6
6
|
export { runInit } from './init';
|
|
7
7
|
export { runDiagnose } from './diagnose';
|
|
8
8
|
export type { DiagnosticReport } from './diagnose';
|
|
9
|
+
export { AudienceAnalyzeClient, defaultHttpPoster } from './AudienceAnalyzeClient';
|
|
10
|
+
export type { AudienceAnalyzeClientOptions, AudienceAnalyzeRequest, AudienceAnalyzeResponse, CameraHealthFailureClass, CameraHealthReport, CameraHealthState, HttpPoster, } from './AudienceAnalyzeClient';
|
|
11
|
+
export { CloudSensingManager, buildSensingLoops, buildTiledCameras, classifyRtspFailureClass, resolveFeeds, } from './CloudSensingManager';
|
|
12
|
+
export { RecorderAddressRecovery, lookupMacAddress, normalizeMacAddress, rewriteStreamHost, shouldAttemptRecorderAddressRecovery, } from './RecorderAddressRecovery';
|
|
13
|
+
export type { RecorderAddressRecoveryOptions } from './RecorderAddressRecovery';
|
|
14
|
+
export type { CloudSensingManagerOptions, SensingLoopDeps, ResolvedFeed, } from './CloudSensingManager';
|
|
15
|
+
export { VlmAdmissionGate } from './VlmAdmissionGate';
|
|
16
|
+
export type { VlmAdmissionGateOptions, VlmAdmissionStats, VlmAdmissionTicket, } from './VlmAdmissionGate';
|
|
17
|
+
export { MotionGate, SceneChangeDetector, decodeGreyFrame, downscaleRgbaToGrey, motionSignature, } from './SceneChangeDetector';
|
|
18
|
+
export type { GreyFrame, MotionBox, MotionDetectResult, MotionGateOptions, MotionGateReason, MotionGateResult, MotionGateStats, SceneChangeDetectorOptions, } from './SceneChangeDetector';
|
|
19
|
+
export { CloudEscalationPolicy } from './CloudEscalationPolicy';
|
|
20
|
+
export { isCloudEscalationEnabled } from './localSensing';
|
|
21
|
+
export type { CloudEscalationPolicyOptions, CloudEscalationStats, EscalationInput, EscalationReason, EscalationVerdict, } from './CloudEscalationPolicy';
|
|
22
|
+
export { SharedFrameSource, CropViewProvider } from './MosaicSource';
|
|
23
|
+
export type { CropViewProviderOptions } from './MosaicSource';
|
|
9
24
|
export type { AudienceMetricsPayload, DetectedFace, EdgeQualityReport, VASResult, DeviceCapabilityMatrix, PlatformAdapter, CameraProvider, AudioProvider, EdgeSDKConfig, } from '@trillboards/edge-core';
|
|
10
25
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACnF,YAAY,EACV,4BAA4B,EAC5B,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,GACX,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,EACxB,YAAY,GACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,oCAAoC,GACrC,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAChF,YAAY,EACV,0BAA0B,EAC1B,eAAe,EACf,YAAY,GACb,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EACV,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,YAAY,EACV,4BAA4B,EAC5B,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACrE,YAAY,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAG9D,YAAY,EACV,sBAAsB,EACtB,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,aAAa,EACb,aAAa,GACd,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Install: npm install @trillboards/edge-sdk
|
|
4
4
|
// Run: npx trillboards-edge start --config trillboards.config.json
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.runDiagnose = exports.runInit = exports.CommandRouter = exports.resolveConfig = exports.loadConfig = exports.EdgeAgent = void 0;
|
|
6
|
+
exports.CropViewProvider = exports.SharedFrameSource = exports.isCloudEscalationEnabled = exports.CloudEscalationPolicy = exports.motionSignature = exports.downscaleRgbaToGrey = exports.decodeGreyFrame = exports.SceneChangeDetector = exports.MotionGate = 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.runDiagnose = exports.runInit = exports.CommandRouter = exports.resolveConfig = exports.loadConfig = exports.EdgeAgent = void 0;
|
|
7
7
|
var EdgeAgent_1 = require("./EdgeAgent");
|
|
8
8
|
Object.defineProperty(exports, "EdgeAgent", { enumerable: true, get: function () { return EdgeAgent_1.EdgeAgent; } });
|
|
9
9
|
var config_1 = require("./config");
|
|
@@ -15,4 +15,43 @@ var init_1 = require("./init");
|
|
|
15
15
|
Object.defineProperty(exports, "runInit", { enumerable: true, get: function () { return init_1.runInit; } });
|
|
16
16
|
var diagnose_1 = require("./diagnose");
|
|
17
17
|
Object.defineProperty(exports, "runDiagnose", { enumerable: true, get: function () { return diagnose_1.runDiagnose; } });
|
|
18
|
+
// Cloud-sensing mode: RTSP frame → cloud-VLM POST (no local ONNX), multi-channel.
|
|
19
|
+
var AudienceAnalyzeClient_1 = require("./AudienceAnalyzeClient");
|
|
20
|
+
Object.defineProperty(exports, "AudienceAnalyzeClient", { enumerable: true, get: function () { return AudienceAnalyzeClient_1.AudienceAnalyzeClient; } });
|
|
21
|
+
Object.defineProperty(exports, "defaultHttpPoster", { enumerable: true, get: function () { return AudienceAnalyzeClient_1.defaultHttpPoster; } });
|
|
22
|
+
var CloudSensingManager_1 = require("./CloudSensingManager");
|
|
23
|
+
Object.defineProperty(exports, "CloudSensingManager", { enumerable: true, get: function () { return CloudSensingManager_1.CloudSensingManager; } });
|
|
24
|
+
Object.defineProperty(exports, "buildSensingLoops", { enumerable: true, get: function () { return CloudSensingManager_1.buildSensingLoops; } });
|
|
25
|
+
Object.defineProperty(exports, "buildTiledCameras", { enumerable: true, get: function () { return CloudSensingManager_1.buildTiledCameras; } });
|
|
26
|
+
Object.defineProperty(exports, "classifyRtspFailureClass", { enumerable: true, get: function () { return CloudSensingManager_1.classifyRtspFailureClass; } });
|
|
27
|
+
Object.defineProperty(exports, "resolveFeeds", { enumerable: true, get: function () { return CloudSensingManager_1.resolveFeeds; } });
|
|
28
|
+
var RecorderAddressRecovery_1 = require("./RecorderAddressRecovery");
|
|
29
|
+
Object.defineProperty(exports, "RecorderAddressRecovery", { enumerable: true, get: function () { return RecorderAddressRecovery_1.RecorderAddressRecovery; } });
|
|
30
|
+
Object.defineProperty(exports, "lookupMacAddress", { enumerable: true, get: function () { return RecorderAddressRecovery_1.lookupMacAddress; } });
|
|
31
|
+
Object.defineProperty(exports, "normalizeMacAddress", { enumerable: true, get: function () { return RecorderAddressRecovery_1.normalizeMacAddress; } });
|
|
32
|
+
Object.defineProperty(exports, "rewriteStreamHost", { enumerable: true, get: function () { return RecorderAddressRecovery_1.rewriteStreamHost; } });
|
|
33
|
+
Object.defineProperty(exports, "shouldAttemptRecorderAddressRecovery", { enumerable: true, get: function () { return RecorderAddressRecovery_1.shouldAttemptRecorderAddressRecovery; } });
|
|
34
|
+
// The 16-camera cascade: a global admission gate in front of a
|
|
35
|
+
// single-conversation inference backend, and a cheap motion gate in front of
|
|
36
|
+
// the expensive model.
|
|
37
|
+
var VlmAdmissionGate_1 = require("./VlmAdmissionGate");
|
|
38
|
+
Object.defineProperty(exports, "VlmAdmissionGate", { enumerable: true, get: function () { return VlmAdmissionGate_1.VlmAdmissionGate; } });
|
|
39
|
+
var SceneChangeDetector_1 = require("./SceneChangeDetector");
|
|
40
|
+
Object.defineProperty(exports, "MotionGate", { enumerable: true, get: function () { return SceneChangeDetector_1.MotionGate; } });
|
|
41
|
+
Object.defineProperty(exports, "SceneChangeDetector", { enumerable: true, get: function () { return SceneChangeDetector_1.SceneChangeDetector; } });
|
|
42
|
+
Object.defineProperty(exports, "decodeGreyFrame", { enumerable: true, get: function () { return SceneChangeDetector_1.decodeGreyFrame; } });
|
|
43
|
+
Object.defineProperty(exports, "downscaleRgbaToGrey", { enumerable: true, get: function () { return SceneChangeDetector_1.downscaleRgbaToGrey; } });
|
|
44
|
+
Object.defineProperty(exports, "motionSignature", { enumerable: true, get: function () { return SceneChangeDetector_1.motionSignature; } });
|
|
45
|
+
// Confidence-based cloud escalation: local Gemma gates, the cloud VLM
|
|
46
|
+
// adjudicates the candidate frames — bounded by novelty, pacing and an hourly
|
|
47
|
+
// budget so a busy camera cannot escalate every frame.
|
|
48
|
+
var CloudEscalationPolicy_1 = require("./CloudEscalationPolicy");
|
|
49
|
+
Object.defineProperty(exports, "CloudEscalationPolicy", { enumerable: true, get: function () { return CloudEscalationPolicy_1.CloudEscalationPolicy; } });
|
|
50
|
+
var localSensing_1 = require("./localSensing");
|
|
51
|
+
Object.defineProperty(exports, "isCloudEscalationEnabled", { enumerable: true, get: function () { return localSensing_1.isCloudEscalationEnabled; } });
|
|
52
|
+
// Mosaic tiling: carve one composite ("mosaic"/quad) RTSP feed into per-screen
|
|
53
|
+
// tiles, pulling the source once and cropping each tile in ffmpeg.
|
|
54
|
+
var MosaicSource_1 = require("./MosaicSource");
|
|
55
|
+
Object.defineProperty(exports, "SharedFrameSource", { enumerable: true, get: function () { return MosaicSource_1.SharedFrameSource; } });
|
|
56
|
+
Object.defineProperty(exports, "CropViewProvider", { enumerable: true, get: function () { return MosaicSource_1.CropViewProvider; } });
|
|
18
57
|
//# 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":";AAAA,gEAAgE;AAChE,6CAA6C;AAC7C,mEAAmE;;;AAEnE,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAElB,mCAAqD;AAA5C,oGAAA,UAAU,OAAA;AAAE,uGAAA,aAAa,OAAA;AAClC,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AAEtB,+BAAiC;AAAxB,+FAAA,OAAO,OAAA;AAChB,uCAAyC;AAAhC,uGAAA,WAAW,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,6CAA6C;AAC7C,mEAAmE;;;AAEnE,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAElB,mCAAqD;AAA5C,oGAAA,UAAU,OAAA;AAAE,uGAAA,aAAa,OAAA;AAClC,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AAEtB,+BAAiC;AAAxB,+FAAA,OAAO,OAAA;AAChB,uCAAyC;AAAhC,uGAAA,WAAW,OAAA;AAGpB,kFAAkF;AAClF,iEAAmF;AAA1E,8HAAA,qBAAqB,OAAA;AAAE,0HAAA,iBAAiB,OAAA;AAUjD,6DAM+B;AAL7B,0HAAA,mBAAmB,OAAA;AACnB,wHAAA,iBAAiB,OAAA;AACjB,wHAAA,iBAAiB,OAAA;AACjB,+HAAA,wBAAwB,OAAA;AACxB,mHAAA,YAAY,OAAA;AAEd,qEAMmC;AALjC,kIAAA,uBAAuB,OAAA;AACvB,2HAAA,gBAAgB,OAAA;AAChB,8HAAA,mBAAmB,OAAA;AACnB,4HAAA,iBAAiB,OAAA;AACjB,+IAAA,oCAAoC,OAAA;AAStC,+DAA+D;AAC/D,6EAA6E;AAC7E,uBAAuB;AACvB,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AAMzB,6DAM+B;AAL7B,iHAAA,UAAU,OAAA;AACV,0HAAA,mBAAmB,OAAA;AACnB,sHAAA,eAAe,OAAA;AACf,0HAAA,mBAAmB,OAAA;AACnB,sHAAA,eAAe,OAAA;AAajB,sEAAsE;AACtE,8EAA8E;AAC9E,uDAAuD;AACvD,iEAAgE;AAAvD,8HAAA,qBAAqB,OAAA;AAC9B,+CAA0D;AAAjD,wHAAA,wBAAwB,OAAA;AASjC,+EAA+E;AAC/E,mEAAmE;AACnE,+CAAqE;AAA5D,iHAAA,iBAAiB,OAAA;AAAE,gHAAA,gBAAgB,OAAA"}
|
package/dist/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,qFAAqF;IACrF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CAChC;AAoKD;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA8JlE"}
|
package/dist/init.js
CHANGED
|
@@ -37,12 +37,7 @@ exports.runInit = runInit;
|
|
|
37
37
|
const readline = __importStar(require("readline"));
|
|
38
38
|
const fs = __importStar(require("fs"));
|
|
39
39
|
const path = __importStar(require("path"));
|
|
40
|
-
const
|
|
41
|
-
const http = __importStar(require("http"));
|
|
42
|
-
const MODEL_URLS = {
|
|
43
|
-
'blazeface.onnx': 'https://models.trillboards.com/blazeface_128x128.onnx',
|
|
44
|
-
'yamnet.onnx': 'https://models.trillboards.com/yamnet_classification.onnx',
|
|
45
|
-
};
|
|
40
|
+
const modelIntegrity_1 = require("./modelIntegrity");
|
|
46
41
|
const VALID_EXECUTION_PROVIDERS = ['cpu', 'openvino', 'directml', 'cuda'];
|
|
47
42
|
/**
|
|
48
43
|
* Create a prompt context that buffers incoming lines from readline.
|
|
@@ -137,90 +132,30 @@ function detectCameraDevices() {
|
|
|
137
132
|
return devices;
|
|
138
133
|
}
|
|
139
134
|
/**
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
const proto = url.startsWith('https') ? https : http;
|
|
150
|
-
const file = fs.createWriteStream(dest);
|
|
151
|
-
const request = proto.get(url, (response) => {
|
|
152
|
-
if (response.statusCode === 301 ||
|
|
153
|
-
response.statusCode === 302 ||
|
|
154
|
-
response.statusCode === 307 ||
|
|
155
|
-
response.statusCode === 308) {
|
|
156
|
-
file.close();
|
|
157
|
-
if (fs.existsSync(dest))
|
|
158
|
-
fs.unlinkSync(dest);
|
|
159
|
-
if (response.headers.location) {
|
|
160
|
-
downloadFile(response.headers.location, dest, maxRedirects - 1).then(resolve, reject);
|
|
161
|
-
}
|
|
162
|
-
else {
|
|
163
|
-
reject(new Error('Redirect with no location header'));
|
|
164
|
-
}
|
|
165
|
-
return;
|
|
166
|
-
}
|
|
167
|
-
if (response.statusCode !== 200) {
|
|
168
|
-
file.close();
|
|
169
|
-
if (fs.existsSync(dest))
|
|
170
|
-
fs.unlinkSync(dest);
|
|
171
|
-
reject(new Error(`HTTP ${response.statusCode}`));
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
response.pipe(file);
|
|
175
|
-
file.on('finish', () => {
|
|
176
|
-
file.close();
|
|
177
|
-
resolve();
|
|
178
|
-
});
|
|
179
|
-
});
|
|
180
|
-
request.on('error', (err) => {
|
|
181
|
-
file.close();
|
|
182
|
-
if (fs.existsSync(dest))
|
|
183
|
-
fs.unlinkSync(dest);
|
|
184
|
-
reject(err);
|
|
185
|
-
});
|
|
186
|
-
request.setTimeout(60000, () => {
|
|
187
|
-
request.destroy();
|
|
188
|
-
reject(new Error('Download timed out after 60s'));
|
|
189
|
-
});
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Download all ONNX models into the given directory, skipping any that
|
|
194
|
-
* already exist on disk.
|
|
135
|
+
* Prepare the models directory. Deliberately does NOT download.
|
|
136
|
+
*
|
|
137
|
+
* `init` used to fetch from `models.trillboards.com`, a host that was never
|
|
138
|
+
* provisioned — the `*.trillboards.com` wildcard answered every path with the
|
|
139
|
+
* marketing SPA (HTTP 200, 2490 bytes of HTML), so this step wrote a web page
|
|
140
|
+
* to blazeface.onnx and printed a size for it. Neither model exists in this
|
|
141
|
+
* repo or in any Trillboards bucket, so there is no origin to point at and no
|
|
142
|
+
* default that would be true. The operator supplies these files.
|
|
195
143
|
*/
|
|
196
|
-
|
|
144
|
+
function prepareModelsDir(modelsDir) {
|
|
197
145
|
const resolved = path.resolve(modelsDir);
|
|
198
146
|
if (!fs.existsSync(resolved)) {
|
|
199
147
|
fs.mkdirSync(resolved, { recursive: true });
|
|
200
148
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
try {
|
|
212
|
-
await downloadFile(url, dest);
|
|
213
|
-
const stats = fs.statSync(dest);
|
|
214
|
-
const sizeMb = (stats.size / (1024 * 1024)).toFixed(1);
|
|
215
|
-
console.log(` (${sizeMb} MB)`);
|
|
216
|
-
}
|
|
217
|
-
catch (err) {
|
|
218
|
-
console.log(` FAILED`);
|
|
219
|
-
console.error(` [FAIL] ${filename}: ${err instanceof Error ? err.message : err}`);
|
|
220
|
-
// Remove partial download
|
|
221
|
-
if (fs.existsSync(dest))
|
|
222
|
-
fs.unlinkSync(dest);
|
|
223
|
-
}
|
|
149
|
+
const present = Object.keys(modelIntegrity_1.MODEL_FILES).filter((f) => fs.existsSync(path.join(resolved, f)));
|
|
150
|
+
const missing = Object.keys(modelIntegrity_1.MODEL_FILES).filter((f) => !present.includes(f));
|
|
151
|
+
console.log(`\n Models directory: ${resolved}`);
|
|
152
|
+
for (const f of present)
|
|
153
|
+
console.log(` [OK] ${f}`);
|
|
154
|
+
for (const f of missing)
|
|
155
|
+
console.log(` [MISSING] ${f}`);
|
|
156
|
+
if (missing.length > 0) {
|
|
157
|
+
console.log('');
|
|
158
|
+
console.log(' ' + modelIntegrity_1.MODELS_NOT_DISTRIBUTED.split('\n').join('\n '));
|
|
224
159
|
}
|
|
225
160
|
}
|
|
226
161
|
/**
|
|
@@ -264,7 +199,10 @@ async function runInit(options) {
|
|
|
264
199
|
if (ctx.closed) {
|
|
265
200
|
throw new Error('Setup cancelled: stdin closed before device token was provided');
|
|
266
201
|
}
|
|
267
|
-
|
|
202
|
+
// Names the page that actually issues device tokens. This used to point at
|
|
203
|
+
// app.trillboards.com, which serves nothing — it was a wildcard-DNS artifact that
|
|
204
|
+
// landed on the white-label distributor sign-in, i.e. the wrong portal entirely.
|
|
205
|
+
console.log(' Device token is required. Get one from https://trillboards.com/developer/api-keys');
|
|
268
206
|
}
|
|
269
207
|
}
|
|
270
208
|
// ── Platform ──────────────────────────────────────────────────────
|
|
@@ -346,7 +284,7 @@ async function runInit(options) {
|
|
|
346
284
|
fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
347
285
|
console.log(` Config saved.`);
|
|
348
286
|
// ── Download models ───────────────────────────────────────────────
|
|
349
|
-
|
|
287
|
+
prepareModelsDir(modelsDir);
|
|
350
288
|
// ── Done ──────────────────────────────────────────────────────────
|
|
351
289
|
console.log('');
|
|
352
290
|
console.log(' Setup complete!');
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { spawn, type ChildProcess } from 'child_process';
|
|
2
|
+
/**
|
|
3
|
+
* keepAwake — stop the host machine from SLEEPING while the connector senses.
|
|
4
|
+
*
|
|
5
|
+
* The #1 silent-death mode after a successful install is a laptop lid-close /
|
|
6
|
+
* idle sleep: the scheduled task / LaunchAgent survives, but the machine is
|
|
7
|
+
* asleep, so frames stop and the owner's alerts silently die overnight. Both
|
|
8
|
+
* mechanisms below prevent SYSTEM sleep only (the display may still sleep),
|
|
9
|
+
* need no admin rights, and release automatically when the connector exits:
|
|
10
|
+
*
|
|
11
|
+
* macOS `caffeinate -i -w <pid>` — prevents idle sleep while our pid is
|
|
12
|
+
* alive; caffeinate exits by itself when we do.
|
|
13
|
+
* Windows a tiny PowerShell loop calling SetThreadExecutionState
|
|
14
|
+
* (ES_CONTINUOUS | ES_SYSTEM_REQUIRED = 0x80000001) every 50 s. The
|
|
15
|
+
* loop watches our pid and exits when the connector dies, so an
|
|
16
|
+
* orphaned loop can never keep a machine awake forever.
|
|
17
|
+
* other no-op (Docker/systemd hosts are servers; sleep is not the risk).
|
|
18
|
+
*
|
|
19
|
+
* Best-effort by design: a spawn failure logs one line and sensing continues —
|
|
20
|
+
* keep-awake must never take the connector down.
|
|
21
|
+
*/
|
|
22
|
+
export interface KeepAwakeHandle {
|
|
23
|
+
/** The spawned helper, null when keep-awake is inactive on this platform. */
|
|
24
|
+
child: ChildProcess | null;
|
|
25
|
+
stop(): void;
|
|
26
|
+
}
|
|
27
|
+
/** Build the platform command (exported for tests — pure). */
|
|
28
|
+
export declare function keepAwakeCommand(platform: NodeJS.Platform, pid: number): {
|
|
29
|
+
cmd: string;
|
|
30
|
+
args: string[];
|
|
31
|
+
} | null;
|
|
32
|
+
export declare function startKeepAwake(platform?: NodeJS.Platform, pid?: number, spawner?: typeof spawn): KeepAwakeHandle;
|
|
33
|
+
//# sourceMappingURL=keepAwake.d.ts.map
|