camstack 1.2.35 → 1.2.36
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.
|
@@ -15602,7 +15602,7 @@ var RecordingBandSchema = external_exports.object({
|
|
|
15602
15602
|
postBufferSec: external_exports.number().min(0).optional()
|
|
15603
15603
|
});
|
|
15604
15604
|
var DEFAULT_EVENTS_BAND_BUFFER_SEC = {
|
|
15605
|
-
preBufferSec:
|
|
15605
|
+
preBufferSec: 15,
|
|
15606
15606
|
postBufferSec: 30
|
|
15607
15607
|
};
|
|
15608
15608
|
var VISIT_MERGE_GAP_MS = DEFAULT_EVENTS_BAND_BUFFER_SEC.postBufferSec * 1e3;
|
|
@@ -22016,128 +22016,103 @@ var COCO_TO_MACRO = {
|
|
|
22016
22016
|
var AUDIO_MACRO_LABELS = [
|
|
22017
22017
|
{
|
|
22018
22018
|
id: "speech",
|
|
22019
|
-
name: "Speech"
|
|
22020
|
-
icon: "\u{1F5E3}\uFE0F"
|
|
22019
|
+
name: "Speech"
|
|
22021
22020
|
},
|
|
22022
22021
|
{
|
|
22023
22022
|
id: "scream",
|
|
22024
|
-
name: "Scream / Shout"
|
|
22025
|
-
icon: "\u{1F631}"
|
|
22023
|
+
name: "Scream / Shout"
|
|
22026
22024
|
},
|
|
22027
22025
|
{
|
|
22028
22026
|
id: "crying",
|
|
22029
|
-
name: "Crying / Baby"
|
|
22030
|
-
icon: "\u{1F622}"
|
|
22027
|
+
name: "Crying / Baby"
|
|
22031
22028
|
},
|
|
22032
22029
|
{
|
|
22033
22030
|
id: "laughter",
|
|
22034
|
-
name: "Laughter"
|
|
22035
|
-
icon: "\u{1F602}"
|
|
22031
|
+
name: "Laughter"
|
|
22036
22032
|
},
|
|
22037
22033
|
{
|
|
22038
22034
|
id: "music",
|
|
22039
|
-
name: "Music"
|
|
22040
|
-
icon: "\u{1F3B5}"
|
|
22035
|
+
name: "Music"
|
|
22041
22036
|
},
|
|
22042
22037
|
{
|
|
22043
22038
|
id: "dog",
|
|
22044
|
-
name: "Dog"
|
|
22045
|
-
icon: "\u{1F415}"
|
|
22039
|
+
name: "Dog"
|
|
22046
22040
|
},
|
|
22047
22041
|
{
|
|
22048
22042
|
id: "cat",
|
|
22049
|
-
name: "Cat"
|
|
22050
|
-
icon: "\u{1F408}"
|
|
22043
|
+
name: "Cat"
|
|
22051
22044
|
},
|
|
22052
22045
|
{
|
|
22053
22046
|
id: "bird",
|
|
22054
|
-
name: "Bird"
|
|
22055
|
-
icon: "\u{1F426}"
|
|
22047
|
+
name: "Bird"
|
|
22056
22048
|
},
|
|
22057
22049
|
{
|
|
22058
22050
|
id: "animal",
|
|
22059
|
-
name: "Animal (other)"
|
|
22060
|
-
icon: "\u{1F43E}"
|
|
22051
|
+
name: "Animal (other)"
|
|
22061
22052
|
},
|
|
22062
22053
|
{
|
|
22063
22054
|
id: "alarm",
|
|
22064
|
-
name: "Alarm / Siren"
|
|
22065
|
-
icon: "\u{1F6A8}"
|
|
22055
|
+
name: "Alarm / Siren"
|
|
22066
22056
|
},
|
|
22067
22057
|
{
|
|
22068
22058
|
id: "doorbell",
|
|
22069
|
-
name: "Doorbell / Knock"
|
|
22070
|
-
icon: "\u{1F514}"
|
|
22059
|
+
name: "Doorbell / Knock"
|
|
22071
22060
|
},
|
|
22072
22061
|
{
|
|
22073
22062
|
id: "glass_breaking",
|
|
22074
|
-
name: "Glass Breaking"
|
|
22075
|
-
icon: "\u{1F4A5}"
|
|
22063
|
+
name: "Glass Breaking"
|
|
22076
22064
|
},
|
|
22077
22065
|
{
|
|
22078
22066
|
id: "gunshot",
|
|
22079
|
-
name: "Gunshot / Explosion"
|
|
22080
|
-
icon: "\u{1F4A3}"
|
|
22067
|
+
name: "Gunshot / Explosion"
|
|
22081
22068
|
},
|
|
22082
22069
|
{
|
|
22083
22070
|
id: "vehicle",
|
|
22084
|
-
name: "Vehicle"
|
|
22085
|
-
icon: "\u{1F697}"
|
|
22071
|
+
name: "Vehicle"
|
|
22086
22072
|
},
|
|
22087
22073
|
{
|
|
22088
22074
|
id: "siren",
|
|
22089
|
-
name: "Emergency Siren"
|
|
22090
|
-
icon: "\u{1F691}"
|
|
22075
|
+
name: "Emergency Siren"
|
|
22091
22076
|
},
|
|
22092
22077
|
{
|
|
22093
22078
|
id: "fire",
|
|
22094
|
-
name: "Fire / Smoke"
|
|
22095
|
-
icon: "\u{1F525}"
|
|
22079
|
+
name: "Fire / Smoke"
|
|
22096
22080
|
},
|
|
22097
22081
|
{
|
|
22098
22082
|
id: "water",
|
|
22099
|
-
name: "Water"
|
|
22100
|
-
icon: "\u{1F4A7}"
|
|
22083
|
+
name: "Water"
|
|
22101
22084
|
},
|
|
22102
22085
|
{
|
|
22103
22086
|
id: "wind",
|
|
22104
|
-
name: "Wind / Weather"
|
|
22105
|
-
icon: "\u{1F32C}\uFE0F"
|
|
22087
|
+
name: "Wind / Weather"
|
|
22106
22088
|
},
|
|
22107
22089
|
{
|
|
22108
22090
|
id: "door",
|
|
22109
|
-
name: "Door"
|
|
22110
|
-
icon: "\u{1F6AA}"
|
|
22091
|
+
name: "Door"
|
|
22111
22092
|
},
|
|
22112
22093
|
{
|
|
22113
22094
|
id: "footsteps",
|
|
22114
|
-
name: "Footsteps"
|
|
22115
|
-
icon: "\u{1F463}"
|
|
22095
|
+
name: "Footsteps"
|
|
22116
22096
|
},
|
|
22117
22097
|
{
|
|
22118
22098
|
id: "crowd",
|
|
22119
|
-
name: "Crowd / Chatter"
|
|
22120
|
-
icon: "\u{1F465}"
|
|
22099
|
+
name: "Crowd / Chatter"
|
|
22121
22100
|
},
|
|
22122
22101
|
{
|
|
22123
22102
|
id: "telephone",
|
|
22124
|
-
name: "Telephone"
|
|
22125
|
-
icon: "\u{1F4DE}"
|
|
22103
|
+
name: "Telephone"
|
|
22126
22104
|
},
|
|
22127
22105
|
{
|
|
22128
22106
|
id: "engine",
|
|
22129
|
-
name: "Engine / Motor"
|
|
22130
|
-
icon: "\u2699\uFE0F"
|
|
22107
|
+
name: "Engine / Motor"
|
|
22131
22108
|
},
|
|
22132
22109
|
{
|
|
22133
22110
|
id: "tools",
|
|
22134
|
-
name: "Tools / Construction"
|
|
22135
|
-
icon: "\u{1F528}"
|
|
22111
|
+
name: "Tools / Construction"
|
|
22136
22112
|
},
|
|
22137
22113
|
{
|
|
22138
22114
|
id: "silence",
|
|
22139
|
-
name: "Silence"
|
|
22140
|
-
icon: "\u{1F92B}"
|
|
22115
|
+
name: "Silence"
|
|
22141
22116
|
}
|
|
22142
22117
|
];
|
|
22143
22118
|
var YAMNET_TO_MACRO = {
|
|
@@ -24251,6 +24226,35 @@ var TrackSchema = external_exports.object({
|
|
|
24251
24226
|
*/
|
|
24252
24227
|
hasFace: external_exports.boolean().optional(),
|
|
24253
24228
|
/**
|
|
24229
|
+
* This track has a face row IN THE GALLERY: a crop **and** an embedding — a
|
|
24230
|
+
* face an operator could ASSIGN to an identity.
|
|
24231
|
+
*
|
|
24232
|
+
* The STRICT twin of {@link hasFace}, and the pair only earns its keep
|
|
24233
|
+
* because the two disagree. `hasFace` is stamped at the TOP of the face
|
|
24234
|
+
* branch, before every gate, and means no more than "a face detector produced
|
|
24235
|
+
* a face detail". This one is stamped at the single moment the gallery row
|
|
24236
|
+
* LANDS — after `FaceRecognizer.onTrackEnd` successfully persists it, i.e.
|
|
24237
|
+
* past the embedding-magnitude verdict, the `minFacePx` detection gate, the
|
|
24238
|
+
* candidate gate, the imageless-track drop (no crop was ever captured) and
|
|
24239
|
+
* the crop-store drop. Everything between the detector and that insert can
|
|
24240
|
+
* legitimately refuse the face, so a flag written any earlier promises the
|
|
24241
|
+
* operator something to assign and delivers nothing.
|
|
24242
|
+
*
|
|
24243
|
+
* **Independent of recognition.** A face collected but never auto-matched is
|
|
24244
|
+
* still assignable — it is in fact the face an operator most wants to reach —
|
|
24245
|
+
* so this is NOT gated on `recognizedIdentityId`. Recognition lands in
|
|
24246
|
+
* `subLabel`; this says only that the raw material exists.
|
|
24247
|
+
*
|
|
24248
|
+
* **Set once, never cleared.** A track that produced a gallery row produced
|
|
24249
|
+
* one; deleting the row later is the gallery's business, not this flag's.
|
|
24250
|
+
*
|
|
24251
|
+
* **Absent ≠ false**, the same rule as {@link hasFace}: every row written
|
|
24252
|
+
* before the column omits it, and so does every server that predates the
|
|
24253
|
+
* field. A consumer must test `=== true` and render nothing otherwise —
|
|
24254
|
+
* never infer "no assignable face".
|
|
24255
|
+
*/
|
|
24256
|
+
hasEmbeddedFace: external_exports.boolean().optional(),
|
|
24257
|
+
/**
|
|
24254
24258
|
* This subject CONTAINS a folded rider — a person the rider-pairing step
|
|
24255
24259
|
* ([D34](../decisions/adr-0034.md)) removed from the frame BEFORE the tracker,
|
|
24256
24260
|
* so the passage is tracked once and as a VEHICLE.
|
|
@@ -26011,6 +26015,32 @@ var DetailResultSchema = external_exports.object({
|
|
|
26011
26015
|
/** FRAME-space bbox (already mapped back from crop space). */
|
|
26012
26016
|
bbox: NativeCropBboxSchema.optional(),
|
|
26013
26017
|
embedding: external_exports.string().optional(),
|
|
26018
|
+
/**
|
|
26019
|
+
* L2 magnitude of the RAW pre-normalization embedding. Additive and optional
|
|
26020
|
+
* so an older runner that does not send it degrades to "unmeasurable", which
|
|
26021
|
+
* the consuming gate treats as accept — never as reject.
|
|
26022
|
+
*/
|
|
26023
|
+
embeddingMagnitude: external_exports.number().optional(),
|
|
26024
|
+
/**
|
|
26025
|
+
* Model that produced `embedding` — the SAME contract `labelModelId` has for
|
|
26026
|
+
* `label`, and for the same reason: the producing node is the only side that
|
|
26027
|
+
* knows which model actually ran, and re-deriving it downstream is exactly
|
|
26028
|
+
* the inference this model exists to forbid.
|
|
26029
|
+
*
|
|
26030
|
+
* Additive and optional, so a runner that predates it degrades to
|
|
26031
|
+
* "unmeasurable" rather than to a wrong answer — the consumer falls back to
|
|
26032
|
+
* its previous assumption instead of refusing.
|
|
26033
|
+
*
|
|
26034
|
+
* Its absence was not cosmetic. `FaceRecognizer` needs the probe's model id
|
|
26035
|
+
* to use `face-matcher`'s same-model gate (`sample.modelId !== probe.modelId`);
|
|
26036
|
+
* with nothing on the wire it took the id from the GALLERY, so the gate
|
|
26037
|
+
* compared the gallery against itself and could never fire. That turned the
|
|
26038
|
+
* one guard protecting the face feature space into a tautology, and it is
|
|
26039
|
+
* why swapping `face-embedding`'s model would NOT have stranded the enrolled
|
|
26040
|
+
* gallery as the catalog comment predicts — it would have scored the new
|
|
26041
|
+
* model's vectors against the old model's samples in one cosine space.
|
|
26042
|
+
*/
|
|
26043
|
+
embeddingModelId: external_exports.string().optional(),
|
|
26014
26044
|
label: external_exports.string().optional(),
|
|
26015
26045
|
/**
|
|
26016
26046
|
* The tier `label` occupies, copied VERBATIM from the producing step's
|
|
@@ -27816,6 +27846,7 @@ var snapshotCapability = {
|
|
|
27816
27846
|
isBattery: external_exports.boolean(),
|
|
27817
27847
|
reason: external_exports.enum([
|
|
27818
27848
|
"disabled",
|
|
27849
|
+
"offline",
|
|
27819
27850
|
"sleeping",
|
|
27820
27851
|
"unreachable",
|
|
27821
27852
|
"waking"
|
|
@@ -27906,9 +27937,17 @@ var snapshotCapability = {
|
|
|
27906
27937
|
sleeping: external_exports.boolean(),
|
|
27907
27938
|
/** Current device state rendered over the cached frame. State images
|
|
27908
27939
|
* remain authoritative even when their photographic background is
|
|
27909
|
-
* old; null means the link must carry a current camera frame.
|
|
27940
|
+
* old; null means the link must carry a current camera frame.
|
|
27941
|
+
*
|
|
27942
|
+
* **This is the ONLY source a surface may derive an inactive tile
|
|
27943
|
+
* from.** A client that reads a device's `online`/`disabled` flags and
|
|
27944
|
+
* draws its own verdict will disagree with the pixels it is painting
|
|
27945
|
+
* — the frame comes from here, and so must the sentence over it
|
|
27946
|
+
* (D190). Pair with `ageMs` for the age of the photograph behind the
|
|
27947
|
+
* state. */
|
|
27910
27948
|
stateReason: external_exports.enum([
|
|
27911
27949
|
"disabled",
|
|
27950
|
+
"offline",
|
|
27912
27951
|
"sleeping",
|
|
27913
27952
|
"unreachable",
|
|
27914
27953
|
"waking"
|
|
@@ -43935,7 +43974,6 @@ var NC_AUDIO_DEFAULTS = {
|
|
|
43935
43974
|
hitPercent: 60,
|
|
43936
43975
|
samplingSeconds: 10
|
|
43937
43976
|
};
|
|
43938
|
-
var ICON_BY_ID = new Map(AUDIO_MACRO_LABELS.flatMap((macro2) => macro2.icon === void 0 ? [] : [[macro2.id, macro2.icon]]));
|
|
43939
43977
|
var NC_BASE_CONDITION_KEYS = ["devices", "classes"];
|
|
43940
43978
|
var BASE_CONDITION_SET = new Set(NC_BASE_CONDITION_KEYS);
|
|
43941
43979
|
var NC_AUDIO_SEED = {
|
|
@@ -44053,6 +44091,40 @@ var TimelapseRuleSchema = TimelapseRuleInputSchema.extend({
|
|
|
44053
44091
|
createdAt: external_exports.number(),
|
|
44054
44092
|
updatedAt: external_exports.number()
|
|
44055
44093
|
});
|
|
44094
|
+
var CLUSTER_MODEL_SCOPED_STEPS = [{
|
|
44095
|
+
stepId: "face-embedding",
|
|
44096
|
+
label: "Face recognition model",
|
|
44097
|
+
defaultModelId: "arcface-r100",
|
|
44098
|
+
indexName: "the enrolled face gallery",
|
|
44099
|
+
options: [
|
|
44100
|
+
{
|
|
44101
|
+
id: "arcface-r100",
|
|
44102
|
+
label: "ArcFace (ResNet34)"
|
|
44103
|
+
},
|
|
44104
|
+
{
|
|
44105
|
+
id: "auraface-r100",
|
|
44106
|
+
label: "AuraFace R100"
|
|
44107
|
+
},
|
|
44108
|
+
{
|
|
44109
|
+
id: "inception-resnet-v1",
|
|
44110
|
+
label: "Inception ResNet V1"
|
|
44111
|
+
}
|
|
44112
|
+
]
|
|
44113
|
+
}, {
|
|
44114
|
+
stepId: "clip-embedding",
|
|
44115
|
+
label: "Semantic search model",
|
|
44116
|
+
defaultModelId: "mobileclip-s1",
|
|
44117
|
+
indexName: "the object semantic-search index",
|
|
44118
|
+
options: [{
|
|
44119
|
+
id: "mobileclip-s1",
|
|
44120
|
+
label: "MobileCLIP S1"
|
|
44121
|
+
}, {
|
|
44122
|
+
id: "mobileclip-s2",
|
|
44123
|
+
label: "MobileCLIP S2"
|
|
44124
|
+
}]
|
|
44125
|
+
}];
|
|
44126
|
+
var DEFAULT_CLUSTER_STEP_MODELS = Object.freeze(Object.fromEntries(CLUSTER_MODEL_SCOPED_STEPS.map((s) => [s.stepId, s.defaultModelId])));
|
|
44127
|
+
var ChosenModelIdSchema = external_exports.string().min(1);
|
|
44056
44128
|
var DetailCropConventionSchema = external_exports.object({
|
|
44057
44129
|
/**
|
|
44058
44130
|
* Fraction of the box's own size added on EACH side before cutting.
|
|
@@ -44077,6 +44149,12 @@ var DEFAULT_DETAIL_CROP_CONVENTION = {
|
|
|
44077
44149
|
paddingRatio: 0.15,
|
|
44078
44150
|
square: false
|
|
44079
44151
|
};
|
|
44152
|
+
var FULL_IMAGE_BBOX = Object.freeze({
|
|
44153
|
+
x: 0,
|
|
44154
|
+
y: 0,
|
|
44155
|
+
w: 1,
|
|
44156
|
+
h: 1
|
|
44157
|
+
});
|
|
44080
44158
|
var DETAIL_CROP_PADDING_FIELD = {
|
|
44081
44159
|
min: 0,
|
|
44082
44160
|
max: 1,
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
runDiscover
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-V75HN7AE.js";
|
|
5
5
|
import "./chunk-LMMQX4CK.js";
|
|
6
6
|
|
|
7
7
|
// src/cli.ts
|
|
@@ -38,7 +38,7 @@ async function runServe(args) {
|
|
|
38
38
|
...typeof values.data === "string" ? { data: values.data } : {}
|
|
39
39
|
};
|
|
40
40
|
Object.assign(process.env, buildServeEnv(opts));
|
|
41
|
-
await import("./launcher-
|
|
41
|
+
await import("./launcher-OXQ3W5WV.js");
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
// src/commands/agent.ts
|
|
@@ -83,7 +83,7 @@ async function runAgent(args) {
|
|
|
83
83
|
...typeof values.port === "string" ? { port: values.port } : {}
|
|
84
84
|
};
|
|
85
85
|
Object.assign(process.env, buildAgentEnv(opts));
|
|
86
|
-
await import("./launcher-
|
|
86
|
+
await import("./launcher-OXQ3W5WV.js");
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
// src/commands/setup.ts
|
|
@@ -1130,7 +1130,7 @@ function isUnknown(_value) {
|
|
|
1130
1130
|
return true;
|
|
1131
1131
|
}
|
|
1132
1132
|
async function resolveServerInteractive(presetNamespace) {
|
|
1133
|
-
const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-
|
|
1133
|
+
const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-FXX2XNDX.js");
|
|
1134
1134
|
if (presetNamespace) {
|
|
1135
1135
|
const spinner4 = clack.spinner();
|
|
1136
1136
|
spinner4.start(`Discovering hub on LAN (namespace "${presetNamespace}")`);
|