@trillboards/edge-sdk 0.2.67 → 0.2.68

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 (46) hide show
  1. package/deploy/macos/README.md +5 -5
  2. package/deploy/macos/TrillboardsSetupApp.m +16 -16
  3. package/deploy/macos/build-macos-pkg.sh +7 -7
  4. package/deploy/macos/pair.command +21 -21
  5. package/deploy/macos/scripts/postinstall +4 -2
  6. package/deploy/macos/test-install-pair.sh +4 -4
  7. package/deploy/windows/README.md +2 -2
  8. package/deploy/windows/bundle-windows-installer.ps1 +1 -1
  9. package/deploy/windows/installer.nsi +19 -13
  10. package/deploy/windows/setup-litertlm.ps1 +1 -1
  11. package/deploy/windows/trillboards-pair.cmd +17 -17
  12. package/deploy/windows/trillboards-setup.ps1 +18 -18
  13. package/dist/CloudSensingManager.d.ts +18 -0
  14. package/dist/CloudSensingManager.d.ts.map +1 -1
  15. package/dist/CloudSensingManager.js +39 -0
  16. package/dist/CloudSensingManager.js.map +1 -1
  17. package/dist/ConnectorStatusClient.d.ts +59 -0
  18. package/dist/ConnectorStatusClient.d.ts.map +1 -1
  19. package/dist/ConnectorStatusClient.js +9 -0
  20. package/dist/ConnectorStatusClient.js.map +1 -1
  21. package/dist/EdgeAgent.js +1 -1
  22. package/dist/autoSense.d.ts +14 -0
  23. package/dist/autoSense.d.ts.map +1 -1
  24. package/dist/autoSense.js +23 -0
  25. package/dist/autoSense.js.map +1 -1
  26. package/dist/cli.d.ts.map +1 -1
  27. package/dist/cli.js +3 -0
  28. package/dist/cli.js.map +1 -1
  29. package/dist/connectorUpdate.d.ts +53 -0
  30. package/dist/connectorUpdate.d.ts.map +1 -1
  31. package/dist/connectorUpdate.js +91 -2
  32. package/dist/connectorUpdate.js.map +1 -1
  33. package/dist/diagnose.d.ts +1 -1
  34. package/dist/diagnose.js +1 -1
  35. package/dist/hostSpecs.d.ts +115 -0
  36. package/dist/hostSpecs.d.ts.map +1 -0
  37. package/dist/hostSpecs.js +264 -0
  38. package/dist/hostSpecs.js.map +1 -0
  39. package/dist/sensingRunMode.d.ts +16 -0
  40. package/dist/sensingRunMode.d.ts.map +1 -1
  41. package/dist/sensingRunMode.js.map +1 -1
  42. package/dist/setupMode.d.ts +7 -11
  43. package/dist/setupMode.d.ts.map +1 -1
  44. package/dist/setupMode.js +27 -31
  45. package/dist/setupMode.js.map +1 -1
  46. package/package.json +1 -1
@@ -21,7 +21,7 @@ What lands on disk (home-domain, **no sudo / no admin password**):
21
21
  share/ensure-litertlm.sh background local-AI retry supervisor
22
22
  share/apply-update.sh signed-pkg updater with rollback
23
23
  share/models/gemma-4-E2B-it.litertlm required customer local VLM (removed after import)
24
- ~/Applications/Trillboards CCTV Setup.app native customer setup window (opened automatically)
24
+ ~/Applications/Sense Anything Connector.app native customer setup window (opened automatically)
25
25
  ~/Library/Application Support/Trillboards/trillboards.config.json (after pair, 0600)
26
26
  ~/Library/Logs/Trillboards/edge.{out,err}.log
27
27
  ~/Library/LaunchAgents/com.trillboards.edge.plist (after pair)
@@ -45,13 +45,13 @@ delivered **only by pairing** — it is never baked into the `.pkg`.
45
45
  no admin password. (Equivalent CLI: `installer -pkg <pkg> -target
46
46
  CurrentUserHomeDirectory`.)
47
47
  3. The installer installs and verifies the connector and included local AI
48
- model. Only then does **Trillboards CCTV Setup** open automatically. Select
49
- **Start setup**. The app opens the signed-in Trillboards camera wizard,
48
+ model. Only then does **Sense Anything Connector** open automatically. Select
49
+ **Start setup**. The app opens the signed-in Sense Anything camera wizard,
50
50
  finds recorders on the local network, and validates each channel before any
51
51
  camera screens are created. Black, disconnected, and unreadable inputs are
52
52
  ignored. After the working cameras are saved, the already-installed local AI
53
- begins sensing and the connector starts at every login. Reopen **Trillboards
54
- CCTV Setup** from
53
+ begins sensing and the connector starts at every login. Reopen **Sense
54
+ Anything Connector** from
55
55
  `~/Applications` to resume or repair setup.
56
56
 
57
57
  That's it. To check it's sensing: `tail -f ~/Library/Logs/Trillboards/edge.out.log`.
@@ -73,7 +73,7 @@ static BOOL acquireSetupInstanceLock(void) {
73
73
  - (void)applicationDidFinishLaunching:(NSNotification *)notification {
74
74
  (void)notification;
75
75
  self.lastStage = @"welcome";
76
- self.portalURL = @"https://app.senseanything.com/earner/screens";
76
+ self.portalURL = @"https://app.senseanything.com/sense/cameras";
77
77
  self.setupStarted = NO;
78
78
  [NSDistributedNotificationCenter.defaultCenter addObserver:self
79
79
  selector:@selector(activateSetupWindow:)
@@ -209,8 +209,8 @@ static BOOL acquireSetupInstanceLock(void) {
209
209
  TrillboardsSetupDelegate *strongSelf = weakSelf;
210
210
  if (!strongSelf || strongSelf.terminating || [strongSelf.lastStage isEqualToString:@"ready"] || [strongSelf.lastStage isEqualToString:@"error"] || [strongSelf.lastStage isEqualToString:@"local_ai_error"]) return;
211
211
  NSString *message = exitCode >= 0
212
- ? [NSString stringWithFormat:@"The camera setup helper exited with code %ld. Try again; if it repeats, send setup-app.log to Trillboards support.", (long)exitCode]
213
- : @"The camera setup helper stopped unexpectedly. Try again; if it repeats, send setup-app.log to Trillboards support.";
212
+ ? [NSString stringWithFormat:@"The camera setup helper exited with code %ld. Try again; if it repeats, send setup-app.log to Sense Anything support.", (long)exitCode]
213
+ : @"The camera setup helper stopped unexpectedly. Try again; if it repeats, send setup-app.log to Sense Anything support.";
214
214
  [strongSelf showLocalError:@"Setup stopped before finishing" message:message];
215
215
  });
216
216
  }
@@ -221,7 +221,7 @@ static BOOL acquireSetupInstanceLock(void) {
221
221
  styleMask:NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskMiniaturizable
222
222
  backing:NSBackingStoreBuffered
223
223
  defer:NO];
224
- self.window.title = @"Trillboards CCTV Setup";
224
+ self.window.title = @"Sense Anything Connector";
225
225
  self.window.minSize = NSMakeSize(760, 540);
226
226
  self.window.maxSize = NSMakeSize(760, 540);
227
227
  [self.window center];
@@ -232,7 +232,7 @@ static BOOL acquireSetupInstanceLock(void) {
232
232
  sidebar.layer.backgroundColor = NSColor.controlBackgroundColor.CGColor;
233
233
  [root addSubview:sidebar];
234
234
 
235
- NSTextField *brand = [self label:@"Trillboards" size:16 weight:NSFontWeightSemibold frame:NSMakeRect(24, 480, 145, 28)];
235
+ NSTextField *brand = [self label:@"Sense Anything" size:16 weight:NSFontWeightSemibold frame:NSMakeRect(24, 480, 145, 28)];
236
236
  [sidebar addSubview:brand];
237
237
 
238
238
  NSArray<NSString *> *names = @[@"Welcome", @"Account", @"Recorder", @"Cameras", @"Local AI", @"Ready"];
@@ -297,7 +297,7 @@ static BOOL acquireSetupInstanceLock(void) {
297
297
  - (void)showWelcome {
298
298
  self.lastStage = @"welcome";
299
299
  self.headline.stringValue = @"Set up this computer for CCTV";
300
- self.detail.stringValue = @"Connect your Trillboards account, find your recorder, and verify every camera before screens are created.";
300
+ self.detail.stringValue = @"Connect your Sense Anything account, find your recorder, and verify every camera before screens are created.";
301
301
  self.statusValue.stringValue = @"About 5 minutes";
302
302
  self.statusValue.font = [NSFont systemFontOfSize:25 weight:NSFontWeightSemibold];
303
303
  self.metric.stringValue = @"Keep this computer and the recorder on the same network.";
@@ -324,7 +324,7 @@ static BOOL acquireSetupInstanceLock(void) {
324
324
  [self.lastStage isEqualToString:@"account_attention"]) {
325
325
  [self openURL:self.portalURL];
326
326
  } else if ([self.lastStage isEqualToString:@"ready"]) {
327
- [self openURL:@"https://app.senseanything.com/earner/screens"];
327
+ [self openURL:@"https://app.senseanything.com/sense/cameras"];
328
328
  } else if ([self.lastStage isEqualToString:@"local_ai_error"]) {
329
329
  [NSApp terminate:nil];
330
330
  } else if ([self.lastStage isEqualToString:@"welcome"] || [self.lastStage isEqualToString:@"error"]) {
@@ -340,7 +340,7 @@ static BOOL acquireSetupInstanceLock(void) {
340
340
  NSString *logPath = [logDirectory stringByAppendingPathComponent:@"setup-app.log"];
341
341
  NSFileManager *files = NSFileManager.defaultManager;
342
342
  if (![files isExecutableFileAtPath:pairer]) {
343
- [self showLocalError:@"Setup app is incomplete" message:@"Reinstall the Trillboards CCTV connector, then try again."];
343
+ [self showLocalError:@"Setup app is incomplete" message:@"Reinstall the Sense Anything Connector, then try again."];
344
344
  return;
345
345
  }
346
346
  [files createDirectoryAtPath:stateDirectory withIntermediateDirectories:YES attributes:nil error:nil];
@@ -351,7 +351,7 @@ static BOOL acquireSetupInstanceLock(void) {
351
351
  self.lastStage = @"starting";
352
352
  self.setupStarted = YES;
353
353
  self.headline.stringValue = @"Starting camera setup";
354
- self.detail.stringValue = @"Connecting securely to Trillboards.";
354
+ self.detail.stringValue = @"Connecting securely to Sense Anything.";
355
355
  self.statusValue.stringValue = @"Please wait";
356
356
  self.metric.stringValue = @"No Terminal or command window is required.";
357
357
  self.progress.doubleValue = 8;
@@ -362,7 +362,7 @@ static BOOL acquireSetupInstanceLock(void) {
362
362
  arguments:@[@"--setup", @"--status-file", statePath]
363
363
  logPath:logPath
364
364
  error:&error]) {
365
- [self showLocalError:@"Could not start setup" message:@"Reinstall the Trillboards CCTV connector, then try again."];
365
+ [self showLocalError:@"Could not start setup" message:@"Reinstall the Sense Anything Connector, then try again."];
366
366
  return;
367
367
  }
368
368
  }
@@ -422,11 +422,11 @@ static BOOL acquireSetupInstanceLock(void) {
422
422
  } else if ([stage isEqualToString:@"account_attention"]) {
423
423
  self.metric.stringValue = @"No cameras were added. It is safe to switch accounts.";
424
424
  } else if ([stage isEqualToString:@"local_ai"]) {
425
- self.metric.stringValue = @"Checking the private model installed with Trillboards.";
425
+ self.metric.stringValue = @"Checking the private model installed with Sense Anything.";
426
426
  } else if ([stage isEqualToString:@"local_ai_error"]) {
427
- self.metric.stringValue = @"Reinstall Trillboards CCTV Setup; your camera pairing is saved.";
427
+ self.metric.stringValue = @"Reinstall the Sense Anything Connector; your camera pairing is saved.";
428
428
  } else if ([stage isEqualToString:@"ready"]) {
429
- self.metric.stringValue = @"Trillboards starts automatically when this computer logs in.";
429
+ self.metric.stringValue = @"Sense Anything starts automatically when this computer logs in.";
430
430
  } else if ([stage isEqualToString:@"error"]) {
431
431
  self.metric.stringValue = @"Details: Library/Logs/Trillboards/setup-app.log";
432
432
  } else {
@@ -436,7 +436,7 @@ static BOOL acquireSetupInstanceLock(void) {
436
436
  self.progress.doubleValue = [self progressForStage:stage];
437
437
  [self updateSteps:[self stepForStage:stage]];
438
438
  if ([stage isEqualToString:@"waiting_for_account"]) {
439
- self.actionButton.title = @"Open Trillboards";
439
+ self.actionButton.title = @"Open Sense Anything";
440
440
  self.actionButton.enabled = YES;
441
441
  } else if ([stage isEqualToString:@"account_attention"]) {
442
442
  self.actionButton.title = @"Switch account";
@@ -536,7 +536,7 @@ static int runCancellationSmokeTest(void) {
536
536
  fprintf(stderr, "Native setup cancellation smoke test left a process running.\n");
537
537
  return 1;
538
538
  }
539
- fprintf(stdout, "Trillboards CCTV Setup cancellation smoke test passed.\n");
539
+ fprintf(stdout, "Sense Anything Connector cancellation smoke test passed.\n");
540
540
  return 0;
541
541
  }
542
542
 
@@ -571,7 +571,7 @@ static int runTemporaryDirectorySmokeTest(void) {
571
571
  }
572
572
  rmdir(created);
573
573
  free(template);
574
- fprintf(stdout, "Trillboards CCTV Setup temporary-directory smoke test passed.\n");
574
+ fprintf(stdout, "Sense Anything Connector temporary-directory smoke test passed.\n");
575
575
  return 0;
576
576
  }
577
577
 
@@ -179,7 +179,7 @@ PAYLOAD="$STAGE/$INSTALL_SUBDIR" # …/Library/Trillboards/edge
179
179
  SCRATCH="$DIST_DIR/scratch-$ARCH_LABEL"
180
180
  PKG_OUT="$DIST_DIR/${INSTALLER_NAME}.pkg"
181
181
  COMPONENT_PKG="$SCRATCH/${APP_NAME}-component.pkg"
182
- SETUP_APP="$STAGE/Applications/Trillboards CCTV Setup.app"
182
+ SETUP_APP="$STAGE/Applications/Sense Anything Connector.app"
183
183
 
184
184
  log() { printf '\033[1;34m[build]\033[0m %s\n' "$*"; }
185
185
  warn() { printf '\033[1;33m[warn]\033[0m %s\n' "$*"; }
@@ -438,11 +438,11 @@ fi
438
438
  # while the existing, proven setup engine runs invisibly in the background.
439
439
  SETUP_APP_MACOS="$SETUP_APP/Contents/MacOS"
440
440
  SETUP_APP_RESOURCES="$SETUP_APP/Contents/Resources"
441
- SETUP_APP_BIN="$SETUP_APP_MACOS/Trillboards CCTV Setup"
441
+ SETUP_APP_BIN="$SETUP_APP_MACOS/Sense Anything Connector"
442
442
  mkdir -p "$SETUP_APP_MACOS" "$SETUP_APP_RESOURCES"
443
443
  cp "$PKG_ROOT/deploy/branding/SenseAnythingConnector.icns" \
444
444
  "$SETUP_APP_RESOURCES/SenseAnythingConnector.icns"
445
- log "Building native Trillboards CCTV Setup.app…"
445
+ log "Building native Sense Anything Connector.app…"
446
446
  if [ "$UNIVERSAL" -eq 1 ]; then
447
447
  clang -fobjc-arc -Wall -Wextra -Werror -O2 -mmacosx-version-min=12.0 -arch arm64 -arch x86_64 -framework Cocoa \
448
448
  "$PKG_ROOT/deploy/macos/TrillboardsSetupApp.m" -o "$SETUP_APP_BIN" \
@@ -470,18 +470,18 @@ cat > "$SETUP_APP/Contents/Info.plist" <<PLIST
470
470
  <plist version="1.0">
471
471
  <dict>
472
472
  <key>CFBundleDevelopmentRegion</key><string>en</string>
473
- <key>CFBundleDisplayName</key><string>Trillboards CCTV Setup</string>
474
- <key>CFBundleExecutable</key><string>Trillboards CCTV Setup</string>
473
+ <key>CFBundleDisplayName</key><string>Sense Anything Connector</string>
474
+ <key>CFBundleExecutable</key><string>Sense Anything Connector</string>
475
475
  <key>CFBundleIdentifier</key><string>com.trillboards.cctv-setup</string>
476
476
  <key>CFBundleIconFile</key><string>SenseAnythingConnector</string>
477
477
  <key>CFBundleInfoDictionaryVersion</key><string>6.0</string>
478
- <key>CFBundleName</key><string>Trillboards CCTV Setup</string>
478
+ <key>CFBundleName</key><string>Sense Anything Connector</string>
479
479
  <key>CFBundlePackageType</key><string>APPL</string>
480
480
  <key>CFBundleShortVersionString</key><string>$VERSION</string>
481
481
  <key>CFBundleVersion</key><string>$VERSION</string>
482
482
  <key>LSMinimumSystemVersion</key><string>12.0</string>
483
483
  <key>NSHighResolutionCapable</key><true/>
484
- <key>NSLocalNetworkUsageDescription</key><string>Trillboards uses your local network to find your camera recorder and validate its camera feeds.</string>
484
+ <key>NSLocalNetworkUsageDescription</key><string>Sense Anything uses your local network to find your camera recorder and validate its camera feeds.</string>
485
485
  </dict>
486
486
  </plist>
487
487
  PLIST
@@ -6,7 +6,7 @@
6
6
  # Three modes:
7
7
  # Native app (`--setup --status-file <path>`):
8
8
  # runs validate-first setup without Terminal or AppleScript dialogs and
9
- # reports credential-free progress to Trillboards CCTV Setup.app.
9
+ # reports credential-free progress to Sense Anything Connector.app.
10
10
  # Legacy GUI (no arguments):
11
11
  # osascript prompts for the pairing code, runs the bundled
12
12
  # `trillboards-edge pair`, bootstraps the per-user LaunchAgent, and shows
@@ -137,7 +137,7 @@ dialog_get_code() {
137
137
  # Returns the entered code on stdout, or exits 2 if cancelled.
138
138
  osascript <<'OSA' 2>/dev/null
139
139
  try
140
- set theResult to display dialog "Paste your Trillboards pairing code" & return & "(Get one from the Trillboards portal → Add a camera → Install.)" default answer "" with title "Trillboards Edge — Pair this Mac" buttons {"Cancel", "Pair"} default button "Pair" with icon note
140
+ set theResult to display dialog "Paste your Sense Anything pairing code" & return & "(Get one from the Sense Anything portal → Add a camera → Install.)" default answer "" with title "Sense Anything — Pair this Mac" buttons {"Cancel", "Pair"} default button "Pair" with icon note
141
141
  set theCode to text returned of theResult
142
142
  return theCode
143
143
  on error
@@ -154,7 +154,7 @@ OSA
154
154
  dialog_choose_mode() {
155
155
  osascript <<'OSA' 2>/dev/null
156
156
  try
157
- set theResult to display dialog "Connect this Mac's cameras to Trillboards." & return & return & "Start setup: this window shows a code, you type it in the portal, and the portal checks every camera BEFORE anything is created." with title "Trillboards Edge — Camera setup" buttons {"Cancel", "Classic code…", "Start setup"} default button "Start setup" with icon note
157
+ set theResult to display dialog "Connect this Mac's cameras to Sense Anything." & return & return & "Start setup: this window shows a code, you type it in the portal, and the portal checks every camera BEFORE anything is created." with title "Sense Anything — Camera setup" buttons {"Cancel", "Classic code…", "Start setup"} default button "Start setup" with icon note
158
158
  if button returned of theResult is "Start setup" then
159
159
  return "setup"
160
160
  else
@@ -167,10 +167,10 @@ OSA
167
167
  }
168
168
 
169
169
  dialog_info() { # $1 = message
170
- osascript -e "display dialog \"$1\" with title \"Trillboards Edge\" buttons {\"OK\"} default button \"OK\" with icon note" >/dev/null 2>&1 || true
170
+ osascript -e "display dialog \"$1\" with title \"Sense Anything\" buttons {\"OK\"} default button \"OK\" with icon note" >/dev/null 2>&1 || true
171
171
  }
172
172
  dialog_error() { # $1 = message
173
- osascript -e "display dialog \"$1\" with title \"Trillboards Edge — Pairing failed\" buttons {\"OK\"} default button \"OK\" with icon stop" >/dev/null 2>&1 || true
173
+ osascript -e "display dialog \"$1\" with title \"Sense Anything — Pairing failed\" buttons {\"OK\"} default button \"OK\" with icon stop" >/dev/null 2>&1 || true
174
174
  }
175
175
 
176
176
  # The ONE true remediation for "config dir/file owned by another account" — the
@@ -186,7 +186,7 @@ dialog_error() { # $1 = message
186
186
  # consumed one. The pre-write guards fire BEFORE the code is spent → default.
187
187
  perm_remediation_msg() {
188
188
  cat <<MSG
189
- Trillboards can't save its settings because
189
+ Sense Anything can't save its settings because
190
190
  $APP_SUPPORT
191
191
  (or the config file inside it) is owned by another account — the installer ran
192
192
  with admin rights. This is NOT a code problem.
@@ -268,7 +268,7 @@ if [ -e "$APP_SUPPORT" ] && [ ! -w "$APP_SUPPORT" ]; then
268
268
  fi
269
269
  if [ -e "$APP_SUPPORT" ] && [ ! -w "$APP_SUPPORT" ]; then
270
270
  if is_ui; then
271
- write_ui_status error "Camera settings need permission" "Reinstall Trillboards for this account. If the problem continues, contact Trillboards support."
271
+ write_ui_status error "Camera settings need permission" "Reinstall Sense Anything for this account. If the problem continues, contact Sense Anything support."
272
272
  elif is_headless; then
273
273
  printf '[trillboards-pair] ERROR: %s\n' "$(perm_remediation_msg)" >&2
274
274
  else
@@ -289,7 +289,7 @@ if [ -e "$CONFIG" ] && [ ! -w "$CONFIG" ]; then
289
289
  fi
290
290
  if [ -e "$CONFIG" ] && [ ! -w "$CONFIG" ]; then
291
291
  if is_ui; then
292
- write_ui_status error "Camera settings need permission" "Reinstall Trillboards for this account. If the problem continues, contact Trillboards support."
292
+ write_ui_status error "Camera settings need permission" "Reinstall Sense Anything for this account. If the problem continues, contact Sense Anything support."
293
293
  elif is_headless; then
294
294
  printf '[trillboards-pair] ERROR: %s\n' "$(perm_remediation_msg)" >&2
295
295
  else
@@ -325,7 +325,7 @@ if [ -f "$CONFIG" ] && [ "$(count_feeds_missing_rtsp)" = "0" ]; then
325
325
  ;;
326
326
  2|5)
327
327
  plog "resume: saved config, connection check failed (rc=$VERIFY_RC)"
328
- MSG="This Mac already has a saved Trillboards pairing, but it can't reach Trillboards right now. Check the internet connection, then run this helper again — you will NOT need a new code."
328
+ MSG="This Mac already has a saved Sense Anything pairing, but it can't reach Sense Anything right now. Check the internet connection, then run this helper again — you will NOT need a new code."
329
329
  if is_ui; then write_ui_status error "This computer is offline" "Check the internet connection, then try again. Your saved pairing is still secure."; elif is_headless; then echo "[trillboards-pair] $MSG" >&2; else dialog_error "$MSG"; fi
330
330
  exit 1
331
331
  ;;
@@ -375,7 +375,7 @@ if [ "${SETUP_MODE:-0}" = "1" ]; then
375
375
  elif [ "$SETUP_RC" -eq 3 ]; then
376
376
  plog "setup: server 404 (rc=3) — classic fallback"
377
377
  if is_ui; then
378
- write_ui_status error "Setup is temporarily unavailable" "Try again shortly or contact Trillboards support."
378
+ write_ui_status error "Setup is temporarily unavailable" "Try again shortly or contact Sense Anything support."
379
379
  exit 1
380
380
  fi
381
381
  if ! CODE="$(dialog_get_code)"; then exit 0; fi
@@ -390,7 +390,7 @@ if [ "${SETUP_MODE:-0}" = "1" ]; then
390
390
  exit 1
391
391
  else
392
392
  plog "setup: failed (rc=$SETUP_RC)"
393
- if is_ui; then write_ui_status error "Setup needs attention" "Try again. If the problem continues, contact Trillboards support."; else dialog_error "Setup hit an error. Details were saved to: $LOG_DIR/pairing.log — send that file to Trillboards support if it keeps happening."; fi
393
+ if is_ui; then write_ui_status error "Setup needs attention" "Try again. If the problem continues, contact Sense Anything support."; else dialog_error "Setup hit an error. Details were saved to: $LOG_DIR/pairing.log — send that file to Sense Anything support if it keeps happening."; fi
394
394
  exit 1
395
395
  fi
396
396
  fi
@@ -404,10 +404,10 @@ if [ -n "${CODE:-}" ]; then
404
404
  PAIR_ARGS=(pair --code "$CODE" --config "$CONFIG")
405
405
  [ -n "$API_BASE" ] && PAIR_ARGS+=(--api-base "$API_BASE")
406
406
 
407
- SAVED_UNVERIFIED_MSG="Paired and saved, but this Mac can't reach Trillboards right now. Fix the internet connection, then run this helper again — it resumes automatically and you will NOT need a new code."
407
+ SAVED_UNVERIFIED_MSG="Paired and saved, but this Mac can't reach Sense Anything right now. Fix the internet connection, then run this helper again — it resumes automatically and you will NOT need a new code."
408
408
  # rc=7: the API REJECTED the fresh pairing (auth) — unlike rc=6 the saved
409
409
  # config is unusable and the owner genuinely needs a new code.
410
- AUTH_REJECTED_MSG="Trillboards rejected this new pairing. Generate a FRESH code in the portal and run this helper again."
410
+ AUTH_REJECTED_MSG="Sense Anything rejected this new pairing. Generate a FRESH code in the portal and run this helper again."
411
411
 
412
412
  if is_headless; then
413
413
  echo "[trillboards-pair] pairing (headless)…"
@@ -483,7 +483,7 @@ if [ "${MISSING_RTSP:-0}" -gt 0 ] 2>/dev/null; then
483
483
  $CONFIG
484
484
  then run 'trillboards-edge auto-sense' (or re-run this pairing helper) to start. The background agent was NOT started yet so it won't crash-loop on an incomplete config."
485
485
  if is_ui; then
486
- write_ui_status error "Camera links are incomplete" "One or more cameras still need a stream link. Contact Trillboards support."
486
+ write_ui_status error "Camera links are incomplete" "One or more cameras still need a stream link. Contact Sense Anything support."
487
487
  elif is_headless; then
488
488
  echo "[trillboards-pair] $MISSING_RTSP feed(s) missing rtspUrl — NOT bootstrapping LaunchAgent. Add URL(s) to $CONFIG then run auto-sense." >&2
489
489
  else
@@ -494,26 +494,26 @@ fi
494
494
 
495
495
  # The config is complete and verified. Local AI was installed before this wizard
496
496
  # opened; confirm it is still healthy before starting the camera service.
497
- write_ui_status local_ai "Checking local AI" "The cameras are ready. Verifying the private AI service installed with Trillboards."
497
+ write_ui_status local_ai "Checking local AI" "The cameras are ready. Verifying the private AI service installed with Sense Anything."
498
498
  if ! verify_local_ai_setup; then
499
- write_ui_status local_ai_error "Local AI needs attention" "The included local AI could not be started. Reinstall Trillboards CCTV Setup; your camera pairing is saved."
499
+ write_ui_status local_ai_error "Local AI needs attention" "The included local AI could not be started. Reinstall the Sense Anything Connector; your camera pairing is saved."
500
500
  exit 1
501
501
  fi
502
502
 
503
- write_ui_status starting_service "Starting Trillboards" "Installing and verifying the background camera service."
503
+ write_ui_status starting_service "Starting Sense Anything" "Installing and verifying the background camera service."
504
504
 
505
505
  # "Bootstrapped" alone is not success — verify the agent PROCESS is actually
506
506
  # running before telling the owner anything is running (the Windows twin of this
507
507
  # lie left a 16-camera install "paired" with a never-registered task).
508
508
  if bootstrap_agent && wait_agent_running; then
509
509
  plog "agent: bootstrapped + running"
510
- MSG="Paired and running. Local AI is installed and healthy. Trillboards starts automatically at login."
511
- write_ui_status ready "Camera setup is complete" "Trillboards and private local AI are running in the background."
510
+ MSG="Paired and running. Local AI is installed and healthy. Sense Anything starts automatically at login."
511
+ write_ui_status ready "Camera setup is complete" "Sense Anything and private local AI are running in the background."
512
512
  if is_ui; then :; elif is_headless; then echo "[trillboards-pair] LaunchAgent running ($LABEL)"; else dialog_info "$MSG"; fi
513
513
  exit 0
514
514
  fi
515
515
 
516
516
  plog "agent: bootstrap or start FAILED (not running after wait)"
517
- MSG="Paired successfully, but the background agent did not start. Your pairing IS saved — nothing is lost. Try restarting this Mac (the agent starts at login). If it still fails, send this file to Trillboards support: $LOG_DIR/pairing.log (plus edge.err.log in the same folder)."
518
- if is_ui; then write_ui_status error "Cameras paired, service not running" "Restart this Mac, then open Trillboards CCTV Setup again. Your pairing is saved."; elif is_headless; then echo "[trillboards-pair] ERROR: $MSG" >&2; else dialog_error "$MSG"; fi
517
+ MSG="Paired successfully, but the background agent did not start. Your pairing IS saved — nothing is lost. Try restarting this Mac (the agent starts at login). If it still fails, send this file to Sense Anything support: $LOG_DIR/pairing.log (plus edge.err.log in the same folder)."
518
+ if is_ui; then write_ui_status error "Cameras paired, service not running" "Restart this Mac, then open Sense Anything Connector again. Your pairing is saved."; elif is_headless; then echo "[trillboards-pair] ERROR: $MSG" >&2; else dialog_error "$MSG"; fi
519
519
  exit 1
@@ -119,9 +119,11 @@ log "bundled local AI is installed and healthy"
119
119
  # so customers never see Terminal or a command window. The app itself is
120
120
  # part of the signed payload under ~/Applications.
121
121
  APPS_DIR="$USER_HOME/Applications"
122
- SETUP_APP="$APPS_DIR/Trillboards CCTV Setup.app"
122
+ SETUP_APP="$APPS_DIR/Sense Anything Connector.app"
123
+ LEGACY_SETUP_APP="$APPS_DIR/Trillboards CCTV Setup.app"
123
124
  LEGACY_PAIR_LAUNCHER="$APPS_DIR/Trillboards Pair.command"
124
125
  rm -f "$LEGACY_PAIR_LAUNCHER" 2>/dev/null || true
126
+ rm -rf "$LEGACY_SETUP_APP" 2>/dev/null || true
125
127
  if [ "$IS_UPGRADE" -eq 1 ]; then
126
128
  log "paired connector upgrade detected; setup remains closed"
127
129
  elif [ -d "$SETUP_APP" ] && [ -x "$EDGE_ROOT/bin/trillboards-pair" ]; then
@@ -158,6 +160,6 @@ fi
158
160
  if [ "$IS_UPGRADE" -eq 1 ]; then
159
161
  log "done. Connector update installed; existing pairing preserved."
160
162
  else
161
- log "done. Connector and local AI installed; Trillboards CCTV Setup opened automatically."
163
+ log "done. Connector and local AI installed; Sense Anything Connector opened automatically."
162
164
  fi
163
165
  exit 0
@@ -39,8 +39,8 @@ LOG_DIR="$HOME/Library/Logs/Trillboards"
39
39
  LA_PLIST="$HOME/Library/LaunchAgents/com.trillboards.edge.plist"
40
40
  LABEL="com.trillboards.edge"
41
41
  # Customer-facing native setup application installed under the user's home.
42
- SETUP_APP="$HOME/Applications/Trillboards CCTV Setup.app"
43
- SETUP_APP_BIN="$SETUP_APP/Contents/MacOS/Trillboards CCTV Setup"
42
+ SETUP_APP="$HOME/Applications/Sense Anything Connector.app"
43
+ SETUP_APP_BIN="$SETUP_APP/Contents/MacOS/Sense Anything Connector"
44
44
  LEGACY_PAIR_LAUNCHER="$HOME/Applications/Trillboards Pair.command"
45
45
  UID_N="$(id -u)"
46
46
 
@@ -77,7 +77,7 @@ file_mode() {
77
77
  # ─── Teardown (idempotent) — runs on EXIT so partial runs still clean up ──────
78
78
  teardown() {
79
79
  diag "teardown…"
80
- pkill -x 'Trillboards CCTV Setup' >/dev/null 2>&1 || true
80
+ pkill -x 'Sense Anything Connector' >/dev/null 2>&1 || true
81
81
  [ -n "$CS_PID" ] && kill "$CS_PID" >/dev/null 2>&1 || true
82
82
  [ -n "$STUB_PID" ] && kill "$STUB_PID" >/dev/null 2>&1 || true
83
83
  pkill -f "$STUB_JS" >/dev/null 2>&1 || true
@@ -94,7 +94,7 @@ teardown() {
94
94
  trap teardown EXIT
95
95
 
96
96
  # Pre-clean anything left by a prior aborted run BEFORE we start.
97
- pkill -x 'Trillboards CCTV Setup' >/dev/null 2>&1 || true
97
+ pkill -x 'Sense Anything Connector' >/dev/null 2>&1 || true
98
98
  launchctl bootout "gui/$UID_N/$LABEL" >/dev/null 2>&1 || true
99
99
  rm -f "$LA_PLIST"
100
100
  rm -rf "$HOME/Library/Trillboards" "$APP_SUPPORT" "$LOG_DIR"
@@ -44,9 +44,9 @@ serves every Windows 10/11 — no per-arch builds.
44
44
  2. Run it. Production installers are Authenticode-signed with Azure Trusted
45
45
  Signing and the release workflow verifies the signature before publishing.
46
46
  3. Installer copies the connector, installs and verifies the included local AI,
47
- registers the startup tasks, then opens **Trillboards CCTV Setup** without a
47
+ registers the startup tasks, then opens **Sense Anything Connector** without a
48
48
  command window.
49
- 4. Select **Start setup**. The app opens the Trillboards camera wizard, discovers
49
+ 4. Select **Start setup**. The app opens the Sense Anything camera wizard, discovers
50
50
  local recorders, and validates each channel. Black, disconnected, and
51
51
  unreadable inputs are ignored; only working camera feeds become screens.
52
52
  5. Sensing starts with the already-installed local AI; cloud inference is off
@@ -113,7 +113,7 @@ if ($LASTEXITCODE -ne 0) { Fail "payload archive integrity test failed" }
113
113
 
114
114
  $config = @'
115
115
  ;!@Install@!UTF-8!
116
- Title="Trillboards CCTV Setup"
116
+ Title="Sense Anything Connector"
117
117
  Progress="yes"
118
118
  GUIMode="1"
119
119
  Directory=""
@@ -24,7 +24,7 @@
24
24
  !error "APP_ICON not defined (pass /DAPP_ICON=...)"
25
25
  !endif
26
26
 
27
- !define APP_NAME "Trillboards Edge - CCTV Connector"
27
+ !define APP_NAME "Sense Anything Connector"
28
28
  !define TASK_NAME "TrillboardsEdge"
29
29
  !define LITERT_TASK_NAME "TrillboardsLiteRtLm"
30
30
  !define MUI_ICON "${APP_ICON}"
@@ -51,14 +51,14 @@ Icon "${APP_ICON}"
51
51
  UninstallIcon "${APP_ICON}"
52
52
  SetCompressor /SOLID lzma
53
53
  ShowInstDetails show
54
- BrandingText "Trillboards"
54
+ BrandingText "Sense Anything"
55
55
 
56
56
  !include "MUI2.nsh"
57
57
  !include "FileFunc.nsh"
58
58
 
59
59
  !define MUI_ABORTWARNING
60
- !define MUI_WELCOMEPAGE_TITLE "Connect your camera to Trillboards"
61
- !define MUI_WELCOMEPAGE_TEXT "This installs the Trillboards camera connector and private local AI included with it. Camera pairing opens after both are installed and verified. Cloud inference stays off unless explicitly enabled."
60
+ !define MUI_WELCOMEPAGE_TITLE "Connect your cameras to Sense Anything"
61
+ !define MUI_WELCOMEPAGE_TEXT "This installs the Sense Anything Connector and its included private local AI. Camera pairing opens after both are installed and verified. Cloud inference stays off unless explicitly enabled."
62
62
  !insertmacro MUI_PAGE_WELCOME
63
63
  !insertmacro MUI_PAGE_INSTFILES
64
64
 
@@ -72,7 +72,7 @@ BrandingText "Trillboards"
72
72
  !define MUI_FINISHPAGE_RUN
73
73
  !define MUI_FINISHPAGE_RUN_FUNCTION LaunchSetupAppUnlessUnattended
74
74
  !define MUI_FINISHPAGE_RUN_TEXT "Set up my CCTV cameras now"
75
- !define MUI_FINISHPAGE_TEXT "The connector and private local AI are installed. Continue in the Trillboards CCTV Setup app to pair your cameras."
75
+ !define MUI_FINISHPAGE_TEXT "The connector and private local AI are installed. Continue in the Sense Anything Connector app to pair your cameras."
76
76
  !insertmacro MUI_PAGE_FINISH
77
77
 
78
78
  Function LaunchSetupAppUnlessUnattended
@@ -136,7 +136,7 @@ Function .onInit
136
136
  ; forever. The default answer dismisses the box; the Abort on the next line
137
137
  ; is what actually decides the outcome, so a silent run FAILS here rather
138
138
  ; than proceeding without a model.
139
- MessageBox MB_ICONSTOP|MB_OK "This installer is missing its included local AI model. Download the complete Trillboards CCTV installer and try again." /SD IDOK
139
+ MessageBox MB_ICONSTOP|MB_OK "This installer is missing its included local AI model. Download the complete Sense Anything Connector and try again." /SD IDOK
140
140
  SetErrorLevel 2
141
141
  Abort
142
142
  ${EndIf}
@@ -178,7 +178,7 @@ Section "Install"
178
178
  nsExec::ExecToLog 'powershell -NoProfile -ExecutionPolicy Bypass -File "$PLUGINSDIR\install-update.ps1" -InstallDir "$INSTDIR" -StagingDir "$INSTDIR\.update-staging"'
179
179
  Pop $0
180
180
  ${If} $0 != 0
181
- MessageBox MB_ICONSTOP|MB_OK "Trillboards CCTV setup could not be updated safely. Your previous connector was restored. Please retry the installer." /SD IDOK
181
+ MessageBox MB_ICONSTOP|MB_OK "Sense Anything setup could not be updated safely. Your previous connector was restored. Please retry the installer." /SD IDOK
182
182
  SetErrorLevel 3
183
183
  Abort
184
184
  ${EndIf}
@@ -189,7 +189,7 @@ Section "Install"
189
189
  ; is synchronous and required: pairing is never offered while AI is absent or
190
190
  ; still downloading in the background.
191
191
  ${IfNot} ${FileExists} "$ModelSource"
192
- MessageBox MB_ICONSTOP|MB_OK "The local AI model included with this installer could not be found. Download a fresh Trillboards CCTV installer." /SD IDOK
192
+ MessageBox MB_ICONSTOP|MB_OK "The local AI model included with this installer could not be found. Download a fresh Sense Anything Connector." /SD IDOK
193
193
  SetErrorLevel 2
194
194
  Abort
195
195
  ${EndIf}
@@ -197,7 +197,7 @@ Section "Install"
197
197
  nsExec::ExecToLog '"$WINDIR\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -ExecutionPolicy Bypass -File "$INSTDIR\bin\setup-litertlm.ps1" -BundledModelPath "$ModelSource" -RequireBundledModel'
198
198
  Pop $0
199
199
  ${If} $0 != 0
200
- MessageBox MB_ICONSTOP|MB_OK "Private local AI could not be installed. Camera pairing has not started. Download a fresh installer or contact Trillboards support." /SD IDOK
200
+ MessageBox MB_ICONSTOP|MB_OK "Private local AI could not be installed. Camera pairing has not started. Download a fresh installer or contact Sense Anything support." /SD IDOK
201
201
  SetErrorLevel 4
202
202
  Abort
203
203
  ${EndIf}
@@ -232,10 +232,13 @@ Section "Install"
232
232
  ${EndIf}
233
233
  ${EndIf}
234
234
 
235
- ; Start Menu shortcuts.
236
- CreateDirectory "$SMPROGRAMS\Trillboards"
237
- CreateShortcut "$SMPROGRAMS\Trillboards\Trillboards CCTV Setup.lnk" "$WINDIR\System32\wscript.exe" '$\"$INSTDIR\bin\trillboards-setup.vbs$\"' "$INSTDIR\SenseAnythingConnector.ico" 0
238
- CreateShortcut "$SMPROGRAMS\Trillboards\Uninstall Trillboards Edge.lnk" "$INSTDIR\uninstall.exe"
235
+ ; Start Menu shortcuts. Remove the pre-rebrand entries during an upgrade.
236
+ Delete "$SMPROGRAMS\Trillboards\Trillboards CCTV Setup.lnk"
237
+ Delete "$SMPROGRAMS\Trillboards\Uninstall Trillboards Edge.lnk"
238
+ RMDir "$SMPROGRAMS\Trillboards"
239
+ CreateDirectory "$SMPROGRAMS\Sense Anything"
240
+ CreateShortcut "$SMPROGRAMS\Sense Anything\Sense Anything Connector.lnk" "$WINDIR\System32\wscript.exe" '$\"$INSTDIR\bin\trillboards-setup.vbs$\"' "$INSTDIR\SenseAnythingConnector.ico" 0
241
+ CreateShortcut "$SMPROGRAMS\Sense Anything\Uninstall Sense Anything Connector.lnk" "$INSTDIR\uninstall.exe"
239
242
 
240
243
  ; Uninstaller + Add/Remove Programs entry (per-user hive).
241
244
  WriteUninstaller "$INSTDIR\uninstall.exe"
@@ -263,6 +266,9 @@ Section "Uninstall"
263
266
  Delete "$SMPROGRAMS\Trillboards\Trillboards CCTV Setup.lnk"
264
267
  Delete "$SMPROGRAMS\Trillboards\Uninstall Trillboards Edge.lnk"
265
268
  RMDir "$SMPROGRAMS\Trillboards"
269
+ Delete "$SMPROGRAMS\Sense Anything\Sense Anything Connector.lnk"
270
+ Delete "$SMPROGRAMS\Sense Anything\Uninstall Sense Anything Connector.lnk"
271
+ RMDir "$SMPROGRAMS\Sense Anything"
266
272
  RMDir /r "$INSTDIR"
267
273
  DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\TrillboardsEdge"
268
274
  SectionEnd
@@ -324,7 +324,7 @@ if (-not $haveSetupMutex) {
324
324
  }
325
325
  }
326
326
  if (-not $haveSetupMutex) {
327
- Fail-LocalAi "The local AI installation did not finish. Reinstall Trillboards CCTV Setup."
327
+ Fail-LocalAi "The local AI installation did not finish. Reinstall the Sense Anything Connector."
328
328
  $setupMutex.Dispose()
329
329
  exit 1
330
330
  }