@trillboards/edge-sdk 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/README.md +4 -3
  2. package/deploy/docker/Dockerfile.cloud-sense +117 -0
  3. package/deploy/docker/Dockerfile.cpu +30 -21
  4. package/deploy/docker/Dockerfile.cuda +30 -21
  5. package/deploy/docker/Dockerfile.openvino +30 -20
  6. package/deploy/docker/README.md +9 -4
  7. package/deploy/docker/connector-entrypoint.sh +122 -0
  8. package/deploy/helm/README.md +1 -1
  9. package/deploy/k8s/daemonset.yaml +1 -1
  10. package/deploy/macos/README.md +161 -0
  11. package/deploy/macos/TrillboardsSetupApp.m +603 -0
  12. package/deploy/macos/build-macos-pkg.sh +588 -0
  13. package/deploy/macos/com.trillboards.edge.plist +62 -0
  14. package/deploy/macos/com.trillboards.litertlm.plist +45 -0
  15. package/deploy/macos/pair.command +519 -0
  16. package/deploy/macos/scripts/ensure-litertlm.sh +62 -0
  17. package/deploy/macos/scripts/postinstall +153 -0
  18. package/deploy/macos/scripts/setup-litertlm.sh +272 -0
  19. package/deploy/macos/test-install-pair.sh +383 -0
  20. package/deploy/macos/test-setup-litertlm-reinstall.sh +109 -0
  21. package/deploy/systemd/install.sh +25 -15
  22. package/deploy/systemd/trillboards-edge.service +4 -1
  23. package/deploy/windows/README.md +70 -0
  24. package/deploy/windows/build-windows.ps1 +225 -0
  25. package/deploy/windows/bundle-windows-installer.ps1 +153 -0
  26. package/deploy/windows/check-feeds.js +26 -0
  27. package/deploy/windows/e2e/fixtures/person.jpg +0 -0
  28. package/deploy/windows/e2e/test-local-sense.ps1 +185 -0
  29. package/deploy/windows/install-update.ps1 +101 -0
  30. package/deploy/windows/installer.nsi +138 -0
  31. package/deploy/windows/register-litertlm-task.ps1 +42 -0
  32. package/deploy/windows/register-task.ps1 +44 -0
  33. package/deploy/windows/run-connector.ps1 +69 -0
  34. package/deploy/windows/setup-litertlm.ps1 +361 -0
  35. package/deploy/windows/stop-existing.ps1 +72 -0
  36. package/deploy/windows/trillboards-edge-task.vbs +25 -0
  37. package/deploy/windows/trillboards-edge.cmd +33 -0
  38. package/deploy/windows/trillboards-pair.cmd +276 -0
  39. package/deploy/windows/trillboards-setup.ps1 +456 -0
  40. package/deploy/windows/trillboards-setup.vbs +13 -0
  41. package/dist/AudienceAnalyzeClient.d.ts +136 -0
  42. package/dist/AudienceAnalyzeClient.d.ts.map +1 -0
  43. package/dist/AudienceAnalyzeClient.js +246 -0
  44. package/dist/AudienceAnalyzeClient.js.map +1 -0
  45. package/dist/ChannelProber.d.ts +150 -0
  46. package/dist/ChannelProber.d.ts.map +1 -0
  47. package/dist/ChannelProber.js +887 -0
  48. package/dist/ChannelProber.js.map +1 -0
  49. package/dist/CloudEscalationPolicy.d.ts +143 -0
  50. package/dist/CloudEscalationPolicy.d.ts.map +1 -0
  51. package/dist/CloudEscalationPolicy.js +137 -0
  52. package/dist/CloudEscalationPolicy.js.map +1 -0
  53. package/dist/CloudSensingManager.d.ts +533 -0
  54. package/dist/CloudSensingManager.d.ts.map +1 -0
  55. package/dist/CloudSensingManager.js +1254 -0
  56. package/dist/CloudSensingManager.js.map +1 -0
  57. package/dist/DiscoveryReportClient.d.ts +66 -0
  58. package/dist/DiscoveryReportClient.d.ts.map +1 -0
  59. package/dist/DiscoveryReportClient.js +85 -0
  60. package/dist/DiscoveryReportClient.js.map +1 -0
  61. package/dist/EdgeAgent.d.ts +12 -2
  62. package/dist/EdgeAgent.d.ts.map +1 -1
  63. package/dist/EdgeAgent.js +55 -13
  64. package/dist/EdgeAgent.js.map +1 -1
  65. package/dist/LiteRtVlmProvider.d.ts +193 -0
  66. package/dist/LiteRtVlmProvider.d.ts.map +1 -0
  67. package/dist/LiteRtVlmProvider.js +436 -0
  68. package/dist/LiteRtVlmProvider.js.map +1 -0
  69. package/dist/MosaicSource.d.ts +108 -0
  70. package/dist/MosaicSource.d.ts.map +1 -0
  71. package/dist/MosaicSource.js +274 -0
  72. package/dist/MosaicSource.js.map +1 -0
  73. package/dist/OnvifClient.d.ts +83 -0
  74. package/dist/OnvifClient.d.ts.map +1 -0
  75. package/dist/OnvifClient.js +209 -0
  76. package/dist/OnvifClient.js.map +1 -0
  77. package/dist/PairClient.d.ts +106 -0
  78. package/dist/PairClient.d.ts.map +1 -0
  79. package/dist/PairClient.js +186 -0
  80. package/dist/PairClient.js.map +1 -0
  81. package/dist/RecorderAddressRecovery.d.ts +53 -0
  82. package/dist/RecorderAddressRecovery.d.ts.map +1 -0
  83. package/dist/RecorderAddressRecovery.js +359 -0
  84. package/dist/RecorderAddressRecovery.js.map +1 -0
  85. package/dist/SceneChangeDetector.d.ts +291 -0
  86. package/dist/SceneChangeDetector.d.ts.map +1 -0
  87. package/dist/SceneChangeDetector.js +682 -0
  88. package/dist/SceneChangeDetector.js.map +1 -0
  89. package/dist/SensingProfileClient.d.ts +59 -0
  90. package/dist/SensingProfileClient.d.ts.map +1 -0
  91. package/dist/SensingProfileClient.js +78 -0
  92. package/dist/SensingProfileClient.js.map +1 -0
  93. package/dist/SetupSessionClient.d.ts +114 -0
  94. package/dist/SetupSessionClient.d.ts.map +1 -0
  95. package/dist/SetupSessionClient.js +95 -0
  96. package/dist/SetupSessionClient.js.map +1 -0
  97. package/dist/VlmAdmissionGate.d.ts +126 -0
  98. package/dist/VlmAdmissionGate.d.ts.map +1 -0
  99. package/dist/VlmAdmissionGate.js +166 -0
  100. package/dist/VlmAdmissionGate.js.map +1 -0
  101. package/dist/autoSense.d.ts +216 -0
  102. package/dist/autoSense.d.ts.map +1 -0
  103. package/dist/autoSense.js +521 -0
  104. package/dist/autoSense.js.map +1 -0
  105. package/dist/cli.d.ts +27 -1
  106. package/dist/cli.d.ts.map +1 -1
  107. package/dist/cli.js +511 -21
  108. package/dist/cli.js.map +1 -1
  109. package/dist/combinedSense.d.ts +128 -0
  110. package/dist/combinedSense.d.ts.map +1 -0
  111. package/dist/combinedSense.js +261 -0
  112. package/dist/combinedSense.js.map +1 -0
  113. package/dist/config.d.ts +351 -0
  114. package/dist/config.d.ts.map +1 -1
  115. package/dist/config.js +99 -2
  116. package/dist/config.js.map +1 -1
  117. package/dist/connectorCadence.d.ts +135 -0
  118. package/dist/connectorCadence.d.ts.map +1 -0
  119. package/dist/connectorCadence.js +151 -0
  120. package/dist/connectorCadence.js.map +1 -0
  121. package/dist/dataDir.d.ts +33 -0
  122. package/dist/dataDir.d.ts.map +1 -0
  123. package/dist/dataDir.js +76 -0
  124. package/dist/dataDir.js.map +1 -0
  125. package/dist/deployedCadence.d.ts +167 -0
  126. package/dist/deployedCadence.d.ts.map +1 -0
  127. package/dist/deployedCadence.js +209 -0
  128. package/dist/deployedCadence.js.map +1 -0
  129. package/dist/deployedCadenceSource.d.ts +48 -0
  130. package/dist/deployedCadenceSource.d.ts.map +1 -0
  131. package/dist/deployedCadenceSource.js +74 -0
  132. package/dist/deployedCadenceSource.js.map +1 -0
  133. package/dist/diagnose.d.ts +1 -1
  134. package/dist/diagnose.d.ts.map +1 -1
  135. package/dist/diagnose.js +13 -12
  136. package/dist/diagnose.js.map +1 -1
  137. package/dist/discovery.d.ts +131 -0
  138. package/dist/discovery.d.ts.map +1 -0
  139. package/dist/discovery.js +499 -0
  140. package/dist/discovery.js.map +1 -0
  141. package/dist/gemmaModelOta.d.ts +118 -0
  142. package/dist/gemmaModelOta.d.ts.map +1 -0
  143. package/dist/gemmaModelOta.js +291 -0
  144. package/dist/gemmaModelOta.js.map +1 -0
  145. package/dist/index.d.ts +16 -1
  146. package/dist/index.d.ts.map +1 -1
  147. package/dist/index.js +40 -1
  148. package/dist/index.js.map +1 -1
  149. package/dist/init.d.ts.map +1 -1
  150. package/dist/init.js +41 -18
  151. package/dist/init.js.map +1 -1
  152. package/dist/keepAwake.d.ts +33 -0
  153. package/dist/keepAwake.d.ts.map +1 -0
  154. package/dist/keepAwake.js +54 -0
  155. package/dist/keepAwake.js.map +1 -0
  156. package/dist/legacyRecorderProfile.d.ts +20 -0
  157. package/dist/legacyRecorderProfile.d.ts.map +1 -0
  158. package/dist/legacyRecorderProfile.js +27 -0
  159. package/dist/legacyRecorderProfile.js.map +1 -0
  160. package/dist/localInferenceSchema.d.ts +132 -0
  161. package/dist/localInferenceSchema.d.ts.map +1 -0
  162. package/dist/localInferenceSchema.js +274 -0
  163. package/dist/localInferenceSchema.js.map +1 -0
  164. package/dist/localSenseE2eHarness.d.ts +101 -0
  165. package/dist/localSenseE2eHarness.d.ts.map +1 -0
  166. package/dist/localSenseE2eHarness.js +279 -0
  167. package/dist/localSenseE2eHarness.js.map +1 -0
  168. package/dist/localSensing.d.ts +268 -0
  169. package/dist/localSensing.d.ts.map +1 -0
  170. package/dist/localSensing.js +492 -0
  171. package/dist/localSensing.js.map +1 -0
  172. package/dist/modelIntegrity.d.ts +59 -0
  173. package/dist/modelIntegrity.d.ts.map +1 -0
  174. package/dist/modelIntegrity.js +165 -0
  175. package/dist/modelIntegrity.js.map +1 -0
  176. package/dist/pairVerify.d.ts +100 -0
  177. package/dist/pairVerify.d.ts.map +1 -0
  178. package/dist/pairVerify.js +296 -0
  179. package/dist/pairVerify.js.map +1 -0
  180. package/dist/qrScanner.d.ts +33 -0
  181. package/dist/qrScanner.d.ts.map +1 -0
  182. package/dist/qrScanner.js +103 -0
  183. package/dist/qrScanner.js.map +1 -0
  184. package/dist/runtimePaths.d.ts +10 -0
  185. package/dist/runtimePaths.d.ts.map +1 -0
  186. package/dist/runtimePaths.js +79 -0
  187. package/dist/runtimePaths.js.map +1 -0
  188. package/dist/sensingRunMode.d.ts +68 -0
  189. package/dist/sensingRunMode.d.ts.map +1 -0
  190. package/dist/sensingRunMode.js +346 -0
  191. package/dist/sensingRunMode.js.map +1 -0
  192. package/dist/setupMode.d.ts +98 -0
  193. package/dist/setupMode.d.ts.map +1 -0
  194. package/dist/setupMode.js +828 -0
  195. package/dist/setupMode.js.map +1 -0
  196. package/dist/setupProgress.d.ts +31 -0
  197. package/dist/setupProgress.d.ts.map +1 -0
  198. package/dist/setupProgress.js +173 -0
  199. package/dist/setupProgress.js.map +1 -0
  200. 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
@@ -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;AAChD,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,YAAY,EACV,sBAAsB,EACtB,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,aAAa,EACb,aAAa,GACd,MAAM,wBAAwB,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAeA;;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;AAqOD;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA2JlE"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAgBA;;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;AAyPD;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA8JlE"}
package/dist/init.js CHANGED
@@ -39,6 +39,7 @@ const fs = __importStar(require("fs"));
39
39
  const path = __importStar(require("path"));
40
40
  const https = __importStar(require("https"));
41
41
  const http = __importStar(require("http"));
42
+ const modelIntegrity_1 = require("./modelIntegrity");
42
43
  const MODEL_URLS = {
43
44
  'blazeface.onnx': 'https://models.trillboards.com/blazeface_128x128.onnx',
44
45
  'yamnet.onnx': 'https://models.trillboards.com/yamnet_classification.onnx',
@@ -147,45 +148,60 @@ function downloadFile(url, dest, maxRedirects = 5) {
147
148
  return;
148
149
  }
149
150
  const proto = url.startsWith('https') ? https : http;
150
- const file = fs.createWriteStream(dest);
151
+ let file = null;
152
+ let settled = false;
153
+ const cleanupPartial = () => {
154
+ if (fs.existsSync(dest))
155
+ fs.unlinkSync(dest);
156
+ };
157
+ const fail = (err) => {
158
+ if (settled)
159
+ return;
160
+ settled = true;
161
+ try {
162
+ file?.close();
163
+ }
164
+ catch {
165
+ // Best-effort cleanup only.
166
+ }
167
+ cleanupPartial();
168
+ reject(err);
169
+ };
151
170
  const request = proto.get(url, (response) => {
152
171
  if (response.statusCode === 301 ||
153
172
  response.statusCode === 302 ||
154
173
  response.statusCode === 307 ||
155
174
  response.statusCode === 308) {
156
- file.close();
157
- if (fs.existsSync(dest))
158
- fs.unlinkSync(dest);
175
+ file?.close();
176
+ cleanupPartial();
159
177
  if (response.headers.location) {
160
178
  downloadFile(response.headers.location, dest, maxRedirects - 1).then(resolve, reject);
161
179
  }
162
180
  else {
163
- reject(new Error('Redirect with no location header'));
181
+ fail(new Error('Redirect with no location header'));
164
182
  }
165
183
  return;
166
184
  }
167
185
  if (response.statusCode !== 200) {
168
- file.close();
169
- if (fs.existsSync(dest))
170
- fs.unlinkSync(dest);
171
- reject(new Error(`HTTP ${response.statusCode}`));
186
+ cleanupPartial();
187
+ fail(new Error(`HTTP ${response.statusCode}`));
172
188
  return;
173
189
  }
190
+ file = fs.createWriteStream(dest);
191
+ file.on('error', fail);
174
192
  response.pipe(file);
175
193
  file.on('finish', () => {
176
- file.close();
194
+ if (settled)
195
+ return;
196
+ settled = true;
197
+ file?.close();
177
198
  resolve();
178
199
  });
179
200
  });
180
- request.on('error', (err) => {
181
- file.close();
182
- if (fs.existsSync(dest))
183
- fs.unlinkSync(dest);
184
- reject(err);
185
- });
201
+ request.on('error', fail);
186
202
  request.setTimeout(60000, () => {
187
203
  request.destroy();
188
- reject(new Error('Download timed out after 60s'));
204
+ fail(new Error('Download timed out after 60s'));
189
205
  });
190
206
  });
191
207
  }
@@ -210,6 +226,10 @@ async function downloadModelsToDir(modelsDir) {
210
226
  process.stdout.write(` [GET] ${filename}...`);
211
227
  try {
212
228
  await downloadFile(url, dest);
229
+ // HTTP 200 is not a model. models.trillboards.com answers every path with
230
+ // the marketing SPA's index.html (2490 bytes, HTTP 200), so without this
231
+ // `init` wrote a web page to blazeface.onnx and reported it as downloaded.
232
+ (0, modelIntegrity_1.assertOnnxModel)(dest, filename);
213
233
  const stats = fs.statSync(dest);
214
234
  const sizeMb = (stats.size / (1024 * 1024)).toFixed(1);
215
235
  console.log(` (${sizeMb} MB)`);
@@ -264,7 +284,10 @@ async function runInit(options) {
264
284
  if (ctx.closed) {
265
285
  throw new Error('Setup cancelled: stdin closed before device token was provided');
266
286
  }
267
- console.log(' Device token is required. Get one from https://app.trillboards.com');
287
+ // Names the page that actually issues device tokens. This used to point at
288
+ // app.trillboards.com, which serves nothing — it was a wildcard-DNS artifact that
289
+ // landed on the white-label distributor sign-in, i.e. the wrong portal entirely.
290
+ console.log(' Device token is required. Get one from https://trillboards.com/developer/api-keys');
268
291
  }
269
292
  }
270
293
  // ── Platform ──────────────────────────────────────────────────────
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keepAwake.d.ts","sourceRoot":"","sources":["../src/keepAwake.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,IAAI,IAAI,IAAI,CAAC;CACd;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,GAAG,EAAE,MAAM,GACV;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAcxC;AAED,wBAAgB,cAAc,CAC5B,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,GAAG,GAAE,MAAoB,EACzB,OAAO,GAAE,OAAO,KAAa,GAC5B,eAAe,CA+BjB"}