camstack 1.2.157 → 1.2.159
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.
|
@@ -21004,6 +21004,46 @@ var deviceExportCapability = {
|
|
|
21004
21004
|
unexposeDevice: method(UnexposeInputSchema, external_exports.void(), { kind: "mutation" })
|
|
21005
21005
|
}
|
|
21006
21006
|
};
|
|
21007
|
+
var LOCATION_ICON_IDS = [
|
|
21008
|
+
"map-pin",
|
|
21009
|
+
"house",
|
|
21010
|
+
"door-open",
|
|
21011
|
+
"sofa",
|
|
21012
|
+
"utensils",
|
|
21013
|
+
"bed-double",
|
|
21014
|
+
"bath",
|
|
21015
|
+
"briefcase",
|
|
21016
|
+
"car",
|
|
21017
|
+
"circle-parking",
|
|
21018
|
+
"route",
|
|
21019
|
+
"trees",
|
|
21020
|
+
"umbrella",
|
|
21021
|
+
"waves-ladder",
|
|
21022
|
+
"fence",
|
|
21023
|
+
"package",
|
|
21024
|
+
"warehouse",
|
|
21025
|
+
"store",
|
|
21026
|
+
"sun",
|
|
21027
|
+
"radar"
|
|
21028
|
+
];
|
|
21029
|
+
var LocationIconIdSchema = external_exports.enum(LOCATION_ICON_IDS);
|
|
21030
|
+
var LocationIconAssignmentSchema = external_exports.object({
|
|
21031
|
+
locationKey: external_exports.string(),
|
|
21032
|
+
icon: LocationIconIdSchema
|
|
21033
|
+
});
|
|
21034
|
+
var LocationDescriptionAssignmentSchema = external_exports.object({
|
|
21035
|
+
locationKey: external_exports.string(),
|
|
21036
|
+
description: external_exports.string()
|
|
21037
|
+
});
|
|
21038
|
+
var SiteZoneSchema = external_exports.object({
|
|
21039
|
+
zoneKey: external_exports.string(),
|
|
21040
|
+
label: external_exports.string(),
|
|
21041
|
+
icon: LocationIconIdSchema.nullable(),
|
|
21042
|
+
/** Folded location keys, sorted. A location listed here need not be
|
|
21043
|
+
* REGISTERED — devices carry labels nobody registered, and those rooms are
|
|
21044
|
+
* the ones that most want grouping. */
|
|
21045
|
+
locationKeys: external_exports.array(external_exports.string())
|
|
21046
|
+
});
|
|
21007
21047
|
var ProviderStatusSchema = external_exports.object({
|
|
21008
21048
|
connected: external_exports.boolean(),
|
|
21009
21049
|
deviceCount: external_exports.number(),
|
|
@@ -21653,7 +21693,11 @@ var deviceManagerCapability = {
|
|
|
21653
21693
|
* reference this label keep their `meta.location` value — the
|
|
21654
21694
|
* registry is purely a suggestion list. To purge from devices,
|
|
21655
21695
|
* iterate them and call `setLocation(deviceId, null)`
|
|
21656
|
-
* separately (or pass `cascade: true` to do it in one shot).
|
|
21696
|
+
* separately (or pass `cascade: true` to do it in one shot).
|
|
21697
|
+
*
|
|
21698
|
+
* The room's ICON goes with it, always — a key left behind survives in a
|
|
21699
|
+
* map nobody lists, and a room later re-created under the same name would
|
|
21700
|
+
* silently inherit an icon the operator never chose for it. */
|
|
21657
21701
|
removeLocation: method(external_exports.object({
|
|
21658
21702
|
name: external_exports.string(),
|
|
21659
21703
|
cascade: external_exports.boolean().optional()
|
|
@@ -21674,7 +21718,13 @@ var deviceManagerCapability = {
|
|
|
21674
21718
|
* a suggestion list, and the devices that most need a rename are exactly
|
|
21675
21719
|
* the ones carrying a label nobody registered. `to` renames onto an
|
|
21676
21720
|
* existing room by MERGING into it, leaving no duplicate label. An empty
|
|
21677
|
-
* `to` throws before anything is written.
|
|
21721
|
+
* `to` throws before anything is written.
|
|
21722
|
+
*
|
|
21723
|
+
* The room's ICON travels with the rename, including when `from` was
|
|
21724
|
+
* never registered — otherwise it orphans on a key no location carries
|
|
21725
|
+
* any more. A merge keeps the TARGET's icon when it has one: renaming
|
|
21726
|
+
* "Sala" into "Salone" moves devices into Salone, it does not restyle
|
|
21727
|
+
* it. */
|
|
21678
21728
|
renameLocation: method(external_exports.object({
|
|
21679
21729
|
from: external_exports.string(),
|
|
21680
21730
|
to: external_exports.string()
|
|
@@ -21682,6 +21732,127 @@ var deviceManagerCapability = {
|
|
|
21682
21732
|
kind: "mutation",
|
|
21683
21733
|
auth: "admin"
|
|
21684
21734
|
}),
|
|
21735
|
+
/** Every location that carries an ICON, as `(locationKey, icon)` pairs.
|
|
21736
|
+
*
|
|
21737
|
+
* ADDITIVE, deliberately: `listLocations` keeps returning `string[]` —
|
|
21738
|
+
* every consumer of it (the Device Info autocomplete, the HA adoption
|
|
21739
|
+
* import, the recorder) reads a list of labels and none of them wants a
|
|
21740
|
+
* shape change. A surface that wants icons asks for them and joins.
|
|
21741
|
+
*
|
|
21742
|
+
* Only assignments that EXIST are returned — a location with no icon is
|
|
21743
|
+
* absent, not `map-pin`. The fallback belongs to the renderer
|
|
21744
|
+
* (`resolveLocationIcon`), not to the store, so "the operator chose the
|
|
21745
|
+
* pin" and "the operator chose nothing" stay distinguishable.
|
|
21746
|
+
*
|
|
21747
|
+
* The join key is `locationIconKey(label)` (trimmed, lower-cased) — the
|
|
21748
|
+
* same equality the registry uses everywhere. Never the operator's
|
|
21749
|
+
* casing: a case-only rename is a real edit here, and a map keyed on the
|
|
21750
|
+
* displayed spelling would orphan its entry on exactly that edit. */
|
|
21751
|
+
listLocationIcons: method(external_exports.void(), external_exports.array(LocationIconAssignmentSchema)),
|
|
21752
|
+
/** Set (or clear) the icon of a location label. `icon: null` removes the
|
|
21753
|
+
* assignment. The label need NOT be registered — the registry is a
|
|
21754
|
+
* suggestion list and devices carry labels nobody registered — but an
|
|
21755
|
+
* empty / whitespace-only label throws. Idempotent.
|
|
21756
|
+
*
|
|
21757
|
+
* The icon vocabulary is CLOSED (`LOCATION_ICON_IDS`) because the admin UI
|
|
21758
|
+
* and the viewer draw from different icon modules; see
|
|
21759
|
+
* `device/location-icon.ts` for the list and for what a surface that
|
|
21760
|
+
* cannot draw a member must do (fall back to `map-pin`, never a hole). */
|
|
21761
|
+
setLocationIcon: method(external_exports.object({
|
|
21762
|
+
location: external_exports.string(),
|
|
21763
|
+
icon: LocationIconIdSchema.nullable()
|
|
21764
|
+
}), external_exports.void(), {
|
|
21765
|
+
kind: "mutation",
|
|
21766
|
+
auth: "admin"
|
|
21767
|
+
}),
|
|
21768
|
+
/** Every location that carries a DESCRIPTION — what the place LOOKS like,
|
|
21769
|
+
* in plain words, given to the vision model alongside the pictures so it
|
|
21770
|
+
* knows what it is looking at. A driveway of cobbles between a brick wall
|
|
21771
|
+
* and three parking spaces reads very differently from a back garden.
|
|
21772
|
+
*
|
|
21773
|
+
* Same additive shape and same join key as `listLocationIcons`, and that
|
|
21774
|
+
* is the point of it being here at all: this lived in the post-analysis
|
|
21775
|
+
* addon's own settings, keyed by a hand-typed label matched exactly and
|
|
21776
|
+
* case-sensitively, while the icon hung off the location itself. A rename
|
|
21777
|
+
* carried the icon and silently orphaned the description. One location,
|
|
21778
|
+
* one authority, one key.
|
|
21779
|
+
*
|
|
21780
|
+
* Absent means nobody wrote one — the digest then tells the model only the
|
|
21781
|
+
* location NAME, exactly as it did before descriptions existed. */
|
|
21782
|
+
listLocationDescriptions: method(external_exports.void(), external_exports.array(LocationDescriptionAssignmentSchema)),
|
|
21783
|
+
/** Set (or clear) a location's description. `description: null`, or a
|
|
21784
|
+
* blank string, removes it — an empty description and no description are
|
|
21785
|
+
* the same thing to every reader, and storing the first would send an
|
|
21786
|
+
* empty line to the model.
|
|
21787
|
+
*
|
|
21788
|
+
* Like `setLocationIcon`, the label need NOT be registered, and an
|
|
21789
|
+
* empty / whitespace-only LABEL throws. */
|
|
21790
|
+
setLocationDescription: method(external_exports.object({
|
|
21791
|
+
location: external_exports.string(),
|
|
21792
|
+
description: external_exports.string().max(400).nullable()
|
|
21793
|
+
}), external_exports.void(), {
|
|
21794
|
+
kind: "mutation",
|
|
21795
|
+
auth: "admin"
|
|
21796
|
+
}),
|
|
21797
|
+
/** Every SITE ZONE — a named part of the property that groups locations
|
|
21798
|
+
* ("Zona notte" holds the bedrooms). One call answers the whole picture:
|
|
21799
|
+
* key, the label as typed, the icon, and the locations inside.
|
|
21800
|
+
*
|
|
21801
|
+
* Together, because a surface that asked for membership separately could
|
|
21802
|
+
* draw a zone whose rooms it has not fetched — and the strip that renders
|
|
21803
|
+
* these puts zones BEFORE locations, so a half-known zone is the first
|
|
21804
|
+
* thing an operator sees.
|
|
21805
|
+
*
|
|
21806
|
+
* Nothing here touches a device: a camera's zone is derived from its
|
|
21807
|
+
* location, never stored on the row. Grouping rooms must not rewrite the
|
|
21808
|
+
* fleet. */
|
|
21809
|
+
listSiteZones: method(external_exports.void(), external_exports.array(SiteZoneSchema)),
|
|
21810
|
+
/** Create a zone, or set the icon of one that exists. `icon: null` clears
|
|
21811
|
+
* the icon and KEEPS the zone — a zone with no icon is a normal zone, and
|
|
21812
|
+
* conflating "no icon" with "no zone" would delete membership on a
|
|
21813
|
+
* mis-click.
|
|
21814
|
+
*
|
|
21815
|
+
* Idempotent, and the label is stored as typed: the key is folded, so
|
|
21816
|
+
* re-running this with different casing re-labels rather than duplicating. */
|
|
21817
|
+
setSiteZone: method(external_exports.object({
|
|
21818
|
+
name: external_exports.string(),
|
|
21819
|
+
icon: LocationIconIdSchema.nullable().optional()
|
|
21820
|
+
}), external_exports.void(), {
|
|
21821
|
+
kind: "mutation",
|
|
21822
|
+
auth: "admin"
|
|
21823
|
+
}),
|
|
21824
|
+
/** Delete a zone. Its LOCATIONS survive — they simply stop belonging to
|
|
21825
|
+
* anything. Deleting a grouping must never delete what was grouped. */
|
|
21826
|
+
removeSiteZone: method(external_exports.object({ name: external_exports.string() }), external_exports.void(), {
|
|
21827
|
+
kind: "mutation",
|
|
21828
|
+
auth: "admin"
|
|
21829
|
+
}),
|
|
21830
|
+
/** Rename a zone, carrying its icon AND its membership.
|
|
21831
|
+
*
|
|
21832
|
+
* It exists so that renaming is not delete-then-recreate, which would drop
|
|
21833
|
+
* both — the exact orphaning that lost a location's description when the
|
|
21834
|
+
* two hung off different keys. Renaming onto an existing zone MERGES into
|
|
21835
|
+
* it and the target keeps its own icon. */
|
|
21836
|
+
renameSiteZone: method(external_exports.object({
|
|
21837
|
+
from: external_exports.string(),
|
|
21838
|
+
to: external_exports.string()
|
|
21839
|
+
}), external_exports.void(), {
|
|
21840
|
+
kind: "mutation",
|
|
21841
|
+
auth: "admin"
|
|
21842
|
+
}),
|
|
21843
|
+
/** Put a location in a zone, or take it out with `zone: null`.
|
|
21844
|
+
*
|
|
21845
|
+
* At most one zone per location, by construction: this writes one key, so
|
|
21846
|
+
* there is no state in which a room is in two places at once. The zone
|
|
21847
|
+
* need not exist yet — it is created empty-labelled from this call, the
|
|
21848
|
+
* same way `setLocationIcon` does not require a registered location. */
|
|
21849
|
+
setLocationZone: method(external_exports.object({
|
|
21850
|
+
location: external_exports.string(),
|
|
21851
|
+
zone: external_exports.string().nullable()
|
|
21852
|
+
}), external_exports.void(), {
|
|
21853
|
+
kind: "mutation",
|
|
21854
|
+
auth: "admin"
|
|
21855
|
+
}),
|
|
21685
21856
|
/** Soft-disable / re-enable the device. Drivers consult
|
|
21686
21857
|
* `BaseDevice.disabled` to gate lifecycle hooks. */
|
|
21687
21858
|
setDisabled: method(external_exports.object({
|
|
@@ -42950,6 +43121,18 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
42950
43121
|
addonId: null,
|
|
42951
43122
|
access: "view"
|
|
42952
43123
|
},
|
|
43124
|
+
"deviceManager.listLocationDescriptions": {
|
|
43125
|
+
capName: "device-manager",
|
|
43126
|
+
capScope: "system",
|
|
43127
|
+
addonId: null,
|
|
43128
|
+
access: "view"
|
|
43129
|
+
},
|
|
43130
|
+
"deviceManager.listLocationIcons": {
|
|
43131
|
+
capName: "device-manager",
|
|
43132
|
+
capScope: "system",
|
|
43133
|
+
addonId: null,
|
|
43134
|
+
access: "view"
|
|
43135
|
+
},
|
|
42953
43136
|
"deviceManager.listLocations": {
|
|
42954
43137
|
capName: "device-manager",
|
|
42955
43138
|
capScope: "system",
|
|
@@ -42962,6 +43145,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
42962
43145
|
addonId: null,
|
|
42963
43146
|
access: "view"
|
|
42964
43147
|
},
|
|
43148
|
+
"deviceManager.listSiteZones": {
|
|
43149
|
+
capName: "device-manager",
|
|
43150
|
+
capScope: "system",
|
|
43151
|
+
addonId: null,
|
|
43152
|
+
access: "view"
|
|
43153
|
+
},
|
|
42965
43154
|
"deviceManager.listWrappersForCap": {
|
|
42966
43155
|
capName: "device-manager",
|
|
42967
43156
|
capScope: "system",
|
|
@@ -43046,12 +43235,24 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
43046
43235
|
addonId: null,
|
|
43047
43236
|
access: "delete"
|
|
43048
43237
|
},
|
|
43238
|
+
"deviceManager.removeSiteZone": {
|
|
43239
|
+
capName: "device-manager",
|
|
43240
|
+
capScope: "system",
|
|
43241
|
+
addonId: null,
|
|
43242
|
+
access: "delete"
|
|
43243
|
+
},
|
|
43049
43244
|
"deviceManager.renameLocation": {
|
|
43050
43245
|
capName: "device-manager",
|
|
43051
43246
|
capScope: "system",
|
|
43052
43247
|
addonId: null,
|
|
43053
43248
|
access: "create"
|
|
43054
43249
|
},
|
|
43250
|
+
"deviceManager.renameSiteZone": {
|
|
43251
|
+
capName: "device-manager",
|
|
43252
|
+
capScope: "system",
|
|
43253
|
+
addonId: null,
|
|
43254
|
+
access: "create"
|
|
43255
|
+
},
|
|
43055
43256
|
"deviceManager.runDeviceAction": {
|
|
43056
43257
|
capName: "device-manager",
|
|
43057
43258
|
capScope: "system",
|
|
@@ -43094,6 +43295,24 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
43094
43295
|
addonId: null,
|
|
43095
43296
|
access: "create"
|
|
43096
43297
|
},
|
|
43298
|
+
"deviceManager.setLocationDescription": {
|
|
43299
|
+
capName: "device-manager",
|
|
43300
|
+
capScope: "system",
|
|
43301
|
+
addonId: null,
|
|
43302
|
+
access: "create"
|
|
43303
|
+
},
|
|
43304
|
+
"deviceManager.setLocationIcon": {
|
|
43305
|
+
capName: "device-manager",
|
|
43306
|
+
capScope: "system",
|
|
43307
|
+
addonId: null,
|
|
43308
|
+
access: "create"
|
|
43309
|
+
},
|
|
43310
|
+
"deviceManager.setLocationZone": {
|
|
43311
|
+
capName: "device-manager",
|
|
43312
|
+
capScope: "system",
|
|
43313
|
+
addonId: null,
|
|
43314
|
+
access: "create"
|
|
43315
|
+
},
|
|
43097
43316
|
"deviceManager.setMetadata": {
|
|
43098
43317
|
capName: "device-manager",
|
|
43099
43318
|
capScope: "system",
|
|
@@ -43124,6 +43343,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
43124
43343
|
addonId: null,
|
|
43125
43344
|
access: "create"
|
|
43126
43345
|
},
|
|
43346
|
+
"deviceManager.setSiteZone": {
|
|
43347
|
+
capName: "device-manager",
|
|
43348
|
+
capScope: "system",
|
|
43349
|
+
addonId: null,
|
|
43350
|
+
access: "create"
|
|
43351
|
+
},
|
|
43127
43352
|
"deviceManager.setStreamProfileMap": {
|
|
43128
43353
|
capName: "device-manager",
|
|
43129
43354
|
capScope: "system",
|
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-VJIT6AOW.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-HOXPTYJH.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-HOXPTYJH.js");
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
// src/commands/setup.ts
|
|
@@ -1140,7 +1140,7 @@ function isUnknown(_value) {
|
|
|
1140
1140
|
return true;
|
|
1141
1141
|
}
|
|
1142
1142
|
async function resolveServerInteractive(presetNamespace) {
|
|
1143
|
-
const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-
|
|
1143
|
+
const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-N63N6OOD.js");
|
|
1144
1144
|
if (presetNamespace) {
|
|
1145
1145
|
const spinner4 = clack.spinner();
|
|
1146
1146
|
spinner4.start(`Discovering hub on LAN (namespace "${presetNamespace}")`);
|