@camstack/server 1.2.609 → 1.2.611

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.
@@ -32,6 +32,7 @@ under [Non-commercial models](#non-commercial-models).
32
32
 
33
33
  - © Ultralytics, AGPL-3.0. Corresponding source: the upstream Ultralytics checkpoint and build-camstack-models.py (with convert_lib.py) published at https://huggingface.co/camstack/camstack-models/tree/main/source. https://github.com/ultralytics/ultralytics
34
34
  - Coral Edge TPU models and AIY Vision Birds V1 © Google LLC, Apache-2.0. https://github.com/google-coral/test_data
35
+ - YOLOv9-s EdgeTPU weights © 2025 Dan Brown (fine-tuned to 17 COCO classes, INT8, compiled for the Edge TPU; https://github.com/dbro/frigate-detector-edgetpu-yolo9, repository MIT). Derived from the YOLOv9 code and yolov9-s checkpoint of Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao, GPL-3.0 (https://github.com/WongKinYiu/yolov9). Corresponding source: the fine-tuning checkpoint (yolov9-s-relu6-best.pt), the fine-tuning and conversion notebooks and the publisher LICENSE, mirrored at https://huggingface.co/camstack/camstack-models/tree/main/source/yolov9-edgetpu-dbro. https://github.com/dbro/frigate-detector-edgetpu-yolo9
35
36
  - © Ultralytics, AGPL-3.0 (Ultralytics YOLOv9 weights). YOLOv9 architecture: Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao, GPL-3.0 (https://github.com/WongKinYiu/yolov9). Corresponding source: the upstream Ultralytics checkpoint and build-camstack-models.py (with convert_lib.py) published at https://huggingface.co/camstack/camstack-models/tree/main/source. https://github.com/ultralytics/ultralytics
36
37
  - RF-DETR © Roboflow, Apache-2.0. https://github.com/roboflow/rf-detr
37
38
  - YuNet weights Copyright (c) 2020 Shiqi Yu, MIT. Training code: ShiqiYu/libfacedetection.train, BSD-3-Clause. https://github.com/opencv/opencv_zoo/tree/main/models/face_detection_yunet
@@ -48,7 +49,7 @@ under [Non-commercial models](#non-commercial-models).
48
49
 
49
50
  Training data under attribution terms:
50
51
 
51
- - **COCO 2017** (training data of `yolo26n-seg` and 50 more): annotations CC-BY-4.0; images under their Flickr owners' terms. https://cocodataset.org/#termsofuse
52
+ - **COCO 2017** (training data of `yolo26n-seg` and 52 more): annotations CC-BY-4.0; images under their Flickr owners' terms. https://cocodataset.org/#termsofuse
52
53
  - **WIDER FACE** (training data of `yunet-2023mar`): research-oriented terms; images CC BY-NC-ND. http://shuoyang1213.me/WIDERFACE/
53
54
  - **Open Images V7** (training data of `animal-classifier`): annotations CC-BY-4.0 (Google LLC); images listed as CC-BY-2.0, no warranty. https://storage.googleapis.com/openimages/web/factsfigures_v7.html
54
55
  - **DrBimmer/vehicle-classification** (training data of `vehicle-type-v1`): CC-BY-NC-4.0 — treated as binding the trained weights (conservative reading). https://huggingface.co/datasets/DrBimmer/vehicle-classification
@@ -123,6 +124,7 @@ entry kept resolvable for a saved selection but no longer offered.
123
124
  | `yolo26n-seg`, `yolo26s-seg`, `yolo26m-seg` | [Ultralytics](https://github.com/ultralytics/ultralytics) | AGPL-3.0 / AGPL-3.0 (`AGPL-3.0.txt`) | COCO 2017: annotations CC-BY-4.0; images under their Flickr owners' terms | exported to ONNX, OpenVINO IR and CoreML | mirror `segmentation/yolo26-seg` |
124
125
  | `yolo26n` (default), `yolo26s`, `yolo26m`, `yolo26l`, `yolo26x` (hidden), `yolo26n-fp16` (hidden), `yolo26n-int8`, `yolo26s-fp16` (hidden), `yolo26s-int8`, `yolo26m-fp16` (hidden), `yolo26m-int8`, `yolo26l-fp16` (hidden), `yolo26l-int8`, `yolo26n-320`, `yolo26n-320-int8`, `yolo26n-256`, `yolo26n-256-int8`, `yolo26s-320`, `yolo26s-320-int8`, `yolo26s-256`, `yolo26s-256-int8`, `yolo26m-320`, `yolo26m-320-int8`, `yolo26m-256`, `yolo26m-256-int8`, `yolo26l-320`, `yolo26l-320-int8`, `yolo26l-256`, `yolo26l-256-int8`, `yolo26x-fp16` (hidden), `yolo26x-int8` (hidden) | [Ultralytics](https://github.com/ultralytics/ultralytics) | AGPL-3.0 / AGPL-3.0 (`AGPL-3.0.txt`) | COCO 2017: annotations CC-BY-4.0; images under their Flickr owners' terms | exported to ONNX, OpenVINO IR and CoreML (scripts/build-camstack-models.py); OpenVINO FP16 export; exported to OpenVINO IR, then OpenVINO NNCF INT8 post-training quantisation; re-exported at 320×320 to ONNX, OpenVINO IR and CoreML; re-exported at 320×320 to OpenVINO IR; OpenVINO NNCF INT8 post-training quantisation; re-exported at 256×256 to ONNX, OpenVINO IR and CoreML; re-exported at 256×256 to OpenVINO IR; OpenVINO NNCF INT8 post-training quantisation | mirror `objectDetection/yolo26` |
125
126
  | `ssd-mobilenet-v2-coco-edgetpu` (default) | [Google Coral test_data](https://github.com/google-coral/test_data) | Apache-2.0 / Apache-2.0 (`Apache-2.0.txt`) | COCO 2017: annotations CC-BY-4.0; images under their Flickr owners' terms | none | https://github.com/google-coral/test_data |
127
+ | `yolov9s-320-edgetpu`, `yolov9s-512-edgetpu` | [YOLOv9-s EdgeTPU (Dan Brown)](https://github.com/dbro/frigate-detector-edgetpu-yolo9) | GPL-3.0 / GPL-3.0 (`GPL-3.0.txt`) | COCO 2017: annotations CC-BY-4.0; images under their Flickr owners' terms | none: the publisher release files are mirrored byte-identical | mirror `objectDetection/yolov9` |
126
128
  | `yolov9t-320`, `yolov9t-320-int8`, `yolov9t-640`, `yolov9t-640-int8`, `yolov9s-320`, `yolov9s-320-int8`, `yolov9s-640`, `yolov9s-640-int8`, `yolov9m-320`, `yolov9m-320-int8`, `yolov9m-640`, `yolov9m-640-int8`, `yolov9c-320`, `yolov9c-320-int8`, `yolov9c-640`, `yolov9c-640-int8` | [Ultralytics](https://github.com/ultralytics/ultralytics) | AGPL-3.0 / AGPL-3.0 (`AGPL-3.0.txt`) | COCO 2017: annotations CC-BY-4.0; images under their Flickr owners' terms | exported at 320×320 to ONNX, OpenVINO IR FP16 and CoreML; exported at 320×320 to OpenVINO IR; OpenVINO NNCF INT8 post-training quantisation; exported at 640×640 to ONNX, OpenVINO IR FP16 and CoreML; exported at 640×640 to OpenVINO IR; OpenVINO NNCF INT8 post-training quantisation | mirror `objectDetection/yolov9` |
127
129
 
128
130
  ### Package detection
@@ -1175,7 +1175,7 @@ function buildIntegrationsProvider(ar, eb, loggingService, capabilityRegistry) {
1175
1175
  forOwner,
1176
1176
  ...(secretKeys !== undefined ? { secretKeys } : {}),
1177
1177
  onSuspectSecret: (suspect) => logger.error(suspect.kind === 'coerced-marker'
1178
- ? 'integration secret is "[object Object]" — a keychain marker was coerced to text; the addon is sending it as the credential (repair: scripts/hub/repair-integration-secret-markers.ts, or re-type it)'
1178
+ ? 'integration secret is "[object Object]" — a keychain marker was coerced to text; the addon is sending it as the credential; re-type it'
1179
1179
  : 'integration secret stored as PLAINTEXT under a keychain-declared key — withheld from the form; re-type it to move it into the keychain', {
1180
1180
  tags: { integrationId: input.id, addonId: integration.addonId },
1181
1181
  meta: { phase: 'getSettings', key: suspect.key, kind: suspect.kind, forOwner },
@@ -11095,33 +11095,6 @@ function createCapRouter_storageAdmin(getProvider, createRemoteProxy) {
11095
11095
  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument
11096
11096
  return p.readRecords(methodInput);
11097
11097
  }),
11098
- adoptRecords: trpc_middleware_js_1.adminProcedure
11099
- .input(types_125.storageAdminCapability.methods.adoptRecords.input.loose())
11100
- .output(types_125.storageAdminCapability.methods.adoptRecords.output)
11101
- .mutation(async ({ input, ctx }) => {
11102
- const { nodeId, ...methodInput } = input;
11103
- const p = resolveProvider('storage-admin', nodeId, () => getProvider(ctx), createRemoteProxy);
11104
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument
11105
- return p.adoptRecords(methodInput);
11106
- }),
11107
- readLegacyCollection: trpc_middleware_js_1.adminProcedure
11108
- .input(types_125.storageAdminCapability.methods.readLegacyCollection.input.loose())
11109
- .output(types_125.storageAdminCapability.methods.readLegacyCollection.output)
11110
- .query(async ({ input, ctx }) => {
11111
- const { nodeId, ...methodInput } = input;
11112
- const p = resolveProvider('storage-admin', nodeId, () => getProvider(ctx), createRemoteProxy);
11113
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument
11114
- return p.readLegacyCollection(methodInput);
11115
- }),
11116
- isAdoptedLegacyTable: trpc_middleware_js_1.adminProcedure
11117
- .input(types_125.storageAdminCapability.methods.isAdoptedLegacyTable.input.loose())
11118
- .output(types_125.storageAdminCapability.methods.isAdoptedLegacyTable.output)
11119
- .query(async ({ input, ctx }) => {
11120
- const { nodeId, ...methodInput } = input;
11121
- const p = resolveProvider('storage-admin', nodeId, () => getProvider(ctx), createRemoteProxy);
11122
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument
11123
- return p.isAdoptedLegacyTable(methodInput);
11124
- }),
11125
11098
  });
11126
11099
  }
11127
11100
  function createCapRouter_storageEvictable(getProvider, createRemoteProxy) {
@@ -248,17 +248,30 @@ function isShareViewKind(value) {
248
248
  // new `getAddonSettings / getGlobalSettings / getDeviceSettings`
249
249
  // endpoints on the `addon-settings` singleton capability.
250
250
  /**
251
- * Whether the `capability:provider-registered` hook may emit `ready` for a
252
- * capability. `platform-probe` OWNS its readiness protocol: its provider
253
- * registers synchronously from `onInitialize` while the REAL probe
254
- * (hardware + embedded-Python EP scoring) is still running async — the
255
- * registration-time emit would flip it `ready` prematurely and probe-gated
256
- * consumers (detection-pipeline engine auto-pick) would read
257
- * accelerator-blind results. The addon emits `starting`/`ready`/`down`
258
- * itself (`autoEmitReadiness=false`, ready on probe-done).
251
+ * Capabilities whose provider OWNS its readiness protocol
252
+ * (`autoEmitReadiness=false`): it registers before it can answer, and emits
253
+ * `starting`/`ready`/`down` itself. The registration-time emit would flip
254
+ * them `ready` early.
255
+ *
256
+ * - `platform-probe` registers synchronously from `onInitialize` while the
257
+ * REAL probe (hardware + embedded-Python EP scoring) still runs async;
258
+ * probe-gated consumers (detection-pipeline engine auto-pick) would read
259
+ * accelerator-blind results.
260
+ * - `device-history` is `ready` when its STORE is open (`onHubReachable`),
261
+ * not when it registered; every producer that declares on `ready`
262
+ * (metrics-native, pipeline-analytics) declared into a closed store and
263
+ * logged a declare failure on each boot.
264
+ *
265
+ * Only single-provider caps belong here: the hook is per CAPABILITY, so a cap
266
+ * other addons also provide (`device-removal-hook`) would lose its ready.
259
267
  */
268
+ const SELF_READYING_CAPABILITIES = new Set([
269
+ 'platform-probe',
270
+ 'device-history',
271
+ ]);
272
+ /** Whether the `capability:provider-registered` hook may emit `ready` for a capability. */
260
273
  function shouldEmitProviderRegisteredReady(capability) {
261
- return capability !== 'platform-probe';
274
+ return !SELF_READYING_CAPABILITIES.has(capability);
262
275
  }
263
276
  /**
264
277
  * Is this capability device-scoped?
@@ -2378,6 +2391,17 @@ class AddonRegistryService {
2378
2391
  // (the running instance) and `entry.initialized` untouched so
2379
2392
  // `restartAddon` still shuts the live instance down cleanly.
2380
2393
  const existing = this.addonEntries.get(registered.declaration.id);
2394
+ // Another PACKAGE claiming a running addon's id (a package since folded
2395
+ // into the framework, still on disk) never relabels it: its declaration's
2396
+ // entry would then be resolved against the owner's dir. Same rule as
2397
+ // `AddonLoader.loadDeclaration` at boot.
2398
+ if (existing && existing.packageName !== registered.packageName) {
2399
+ this.logger.warn('loadNewAddons: skipped a package claiming a running addon id', {
2400
+ tags: { addonId: registered.declaration.id },
2401
+ meta: { skippedPackage: registered.packageName, ownerPackage: existing.packageName },
2402
+ });
2403
+ continue;
2404
+ }
2381
2405
  if (existing) {
2382
2406
  existing.packageVersion = registered.packageVersion;
2383
2407
  existing.packageName = registered.packageName;
@@ -54,7 +54,6 @@ exports.coreAuthRecordKinds = (0, types_1.defineRecordKinds)({
54
54
  { name: 'user', fields: ['userId'] },
55
55
  ],
56
56
  retention: { none: 'operator drops the legacy rows by hand (D895)' },
57
- adoptsFrom: exports.SHARE_VIEW_TOKENS_LEGACY,
58
57
  },
59
58
  'credential-tokens': {
60
59
  schema: CredentialTokenBodySchema,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/server",
3
- "version": "1.2.609",
3
+ "version": "1.2.611",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "files": [
@@ -38,19 +38,19 @@
38
38
  ]
39
39
  },
40
40
  "dependencies": {
41
- "@camstack/addon-admin-ui": "1.2.444",
42
- "@camstack/addon-agent-ui": "1.2.250",
43
- "@camstack/addon-auth": "1.2.155",
44
- "@camstack/addon-decoder-nodeav": "1.2.129",
45
- "@camstack/addon-notifiers": "1.2.607",
46
- "@camstack/addon-pipeline": "1.2.607",
47
- "@camstack/addon-pipeline-orchestrator": "1.2.609",
48
- "@camstack/addon-post-analysis": "1.2.614",
49
- "@camstack/develop": "0.1.19",
50
- "@camstack/sdk": "1.2.139",
51
- "@camstack/system": "1.2.458",
52
- "@camstack/types": "1.2.389",
53
- "@camstack/ui-library": "1.2.306",
41
+ "@camstack/addon-admin-ui": "1.2.447",
42
+ "@camstack/addon-agent-ui": "1.2.253",
43
+ "@camstack/addon-auth": "1.2.158",
44
+ "@camstack/addon-decoder-nodeav": "1.2.133",
45
+ "@camstack/addon-notifiers": "1.2.611",
46
+ "@camstack/addon-pipeline": "1.2.611",
47
+ "@camstack/addon-pipeline-orchestrator": "1.2.613",
48
+ "@camstack/addon-post-analysis": "1.2.618",
49
+ "@camstack/develop": "0.1.23",
50
+ "@camstack/sdk": "1.2.143",
51
+ "@camstack/system": "1.2.461",
52
+ "@camstack/types": "1.2.393",
53
+ "@camstack/ui-library": "1.2.310",
54
54
  "@fastify/compress": "^9.0.0",
55
55
  "@fastify/cookie": "^11.0.2",
56
56
  "@fastify/cors": "^11.2.0",