@camstack/addon-ai 0.4.18 → 0.4.20

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.
package/dist/addon.js CHANGED
@@ -11964,6 +11964,27 @@ var LinkedDeviceSchema = object({
11964
11964
  features: array(string()),
11965
11965
  producesTrackedEvents: boolean().optional()
11966
11966
  });
11967
+ /** One camera's resolved linked set, tagged with the camera it belongs to.
11968
+ * The batch answer needs the tag; the single-device answer already has it
11969
+ * from the input, which is why `getLinkedDevices` keeps the untagged shape. */
11970
+ var LinkedDevicesForDeviceSchema = object({
11971
+ deviceId: number$1(),
11972
+ mode: LinkedDevicesModeSchema,
11973
+ devices: array(LinkedDeviceSchema)
11974
+ });
11975
+ /** One device's binding map — the shape `getBindings`, `getBindingsBatch` and
11976
+ * `getAllBindings` all answer in. Declared once: three copies of the same
11977
+ * object literal is exactly how the three drift apart. */
11978
+ var DeviceBindingsForDeviceSchema = object({
11979
+ deviceId: number$1(),
11980
+ entries: array(object({
11981
+ capName: string(),
11982
+ kind: _enum(["native", "wrapped"]),
11983
+ providerAddonId: string(),
11984
+ providerNodeId: string(),
11985
+ nativeAddonId: string()
11986
+ }))
11987
+ });
11967
11988
  var SavedDeviceRowSchema = object({
11968
11989
  /** Numeric id reserved at allocateDeviceId time. */
11969
11990
  id: number$1(),
@@ -12189,11 +12210,25 @@ method(object({
12189
12210
  projection: _enum(["full", "slim"]).optional(),
12190
12211
  /** Return only camera devices. Filtering server-side instead of
12191
12212
  * shipping 293 rows to find 12. */
12192
- isCamera: boolean().optional()
12213
+ isCamera: boolean().optional(),
12214
+ /**
12215
+ * Return only these device ids. For the caller that already KNOWS the
12216
+ * handful it wants and needs a field the id-bearing answer does not
12217
+ * carry — the viewer's linked-devices panel joins `type` and `online`
12218
+ * onto ~8 linked ids and, unfiltered, dragged the fleet across to do
12219
+ * it: 433 KB slim / 958 KB full for 967 devices, on a query that
12220
+ * refetches on the reconcile interval, on a phone.
12221
+ *
12222
+ * Safe to send at a hub that predates it: Zod STRIPS unknown input
12223
+ * keys rather than rejecting them (verified against the live hub
12224
+ * 2026-08-25 — 967 rows came back), so an old hub answers exactly what
12225
+ * it answers today and the caller filters as it already does.
12226
+ */
12227
+ deviceIds: array(number$1()).optional()
12193
12228
  }), array(DeviceInfoSchema)), method(object({ deviceId: number$1() }), DeviceInfoSchema.nullable()), method(object({ parentDeviceId: number$1() }), array(DeviceInfoSchema)), method(object({ deviceId: number$1() }), object({
12194
12229
  mode: LinkedDevicesModeSchema,
12195
12230
  devices: array(LinkedDeviceSchema)
12196
- })), method(object({ deviceId: number$1() }), array(StreamSourceEntrySchema$1)), method(object({ deviceId: number$1() }), array(ConfigEntrySchema)), method(object({ deviceId: number$1() }), ConfigUISchemaOutput), method(object({
12231
+ })), method(object({ deviceIds: array(number$1()) }), array(LinkedDevicesForDeviceSchema)), method(object({ deviceId: number$1() }), array(StreamSourceEntrySchema$1)), method(object({ deviceId: number$1() }), array(ConfigEntrySchema)), method(object({ deviceId: number$1() }), ConfigUISchemaOutput), method(object({
12197
12232
  deviceId: number$1(),
12198
12233
  values: record(string(), unknown())
12199
12234
  }), object({ success: literal(true) }), {
@@ -12220,25 +12255,7 @@ method(object({
12220
12255
  }), method(object({ deviceId: number$1() }), array(StreamProbeResultSchema), {
12221
12256
  kind: "mutation",
12222
12257
  auth: "admin"
12223
- }), method(object({ deviceId: number$1() }), object({
12224
- deviceId: number$1(),
12225
- entries: array(object({
12226
- capName: string(),
12227
- kind: _enum(["native", "wrapped"]),
12228
- providerAddonId: string(),
12229
- providerNodeId: string(),
12230
- nativeAddonId: string()
12231
- }))
12232
- })), method(object({}), array(object({
12233
- deviceId: number$1(),
12234
- entries: array(object({
12235
- capName: string(),
12236
- kind: _enum(["native", "wrapped"]),
12237
- providerAddonId: string(),
12238
- providerNodeId: string(),
12239
- nativeAddonId: string()
12240
- }))
12241
- }))), method(object({
12258
+ }), method(object({ deviceId: number$1() }), DeviceBindingsForDeviceSchema), method(object({ deviceIds: array(number$1()) }), array(DeviceBindingsForDeviceSchema)), method(object({}), array(DeviceBindingsForDeviceSchema)), method(object({
12242
12259
  deviceId: number$1(),
12243
12260
  capName: string(),
12244
12261
  wrapperAddonId: string(),
@@ -27921,6 +27938,12 @@ Object.freeze({
27921
27938
  addonId: null,
27922
27939
  access: "view"
27923
27940
  },
27941
+ "deviceManager.getBindingsBatch": {
27942
+ capName: "device-manager",
27943
+ capScope: "system",
27944
+ addonId: null,
27945
+ access: "view"
27946
+ },
27924
27947
  "deviceManager.getChildren": {
27925
27948
  capName: "device-manager",
27926
27949
  capScope: "system",
@@ -27981,6 +28004,12 @@ Object.freeze({
27981
28004
  addonId: null,
27982
28005
  access: "view"
27983
28006
  },
28007
+ "deviceManager.getLinkedDevicesBatch": {
28008
+ capName: "device-manager",
28009
+ capScope: "system",
28010
+ addonId: null,
28011
+ access: "view"
28012
+ },
27984
28013
  "deviceManager.getRoleDisplayDefaults": {
27985
28014
  capName: "device-manager",
27986
28015
  capScope: "system",
@@ -32628,6 +32657,11 @@ Object.freeze({
32628
32657
  form: "single",
32629
32658
  optional: false
32630
32659
  }],
32660
+ "deviceManager.getBindingsBatch": [{
32661
+ name: "deviceIds",
32662
+ form: "array",
32663
+ optional: false
32664
+ }],
32631
32665
  "deviceManager.getChildren": [{
32632
32666
  name: "parentDeviceId",
32633
32667
  form: "single",
@@ -32673,6 +32707,11 @@ Object.freeze({
32673
32707
  form: "single",
32674
32708
  optional: false
32675
32709
  }],
32710
+ "deviceManager.getLinkedDevicesBatch": [{
32711
+ name: "deviceIds",
32712
+ form: "array",
32713
+ optional: false
32714
+ }],
32676
32715
  "deviceManager.getSettingsSchema": [{
32677
32716
  name: "deviceId",
32678
32717
  form: "single",
@@ -32693,6 +32732,11 @@ Object.freeze({
32693
32732
  form: "single",
32694
32733
  optional: false
32695
32734
  }],
32735
+ "deviceManager.listAll": [{
32736
+ name: "deviceIds",
32737
+ form: "array",
32738
+ optional: true
32739
+ }],
32696
32740
  "deviceManager.loadConfig": [{
32697
32741
  name: "deviceId",
32698
32742
  form: "single",
package/dist/addon.mjs CHANGED
@@ -11990,6 +11990,27 @@ var LinkedDeviceSchema = object({
11990
11990
  features: array(string()),
11991
11991
  producesTrackedEvents: boolean().optional()
11992
11992
  });
11993
+ /** One camera's resolved linked set, tagged with the camera it belongs to.
11994
+ * The batch answer needs the tag; the single-device answer already has it
11995
+ * from the input, which is why `getLinkedDevices` keeps the untagged shape. */
11996
+ var LinkedDevicesForDeviceSchema = object({
11997
+ deviceId: number$1(),
11998
+ mode: LinkedDevicesModeSchema,
11999
+ devices: array(LinkedDeviceSchema)
12000
+ });
12001
+ /** One device's binding map — the shape `getBindings`, `getBindingsBatch` and
12002
+ * `getAllBindings` all answer in. Declared once: three copies of the same
12003
+ * object literal is exactly how the three drift apart. */
12004
+ var DeviceBindingsForDeviceSchema = object({
12005
+ deviceId: number$1(),
12006
+ entries: array(object({
12007
+ capName: string(),
12008
+ kind: _enum(["native", "wrapped"]),
12009
+ providerAddonId: string(),
12010
+ providerNodeId: string(),
12011
+ nativeAddonId: string()
12012
+ }))
12013
+ });
11993
12014
  var SavedDeviceRowSchema = object({
11994
12015
  /** Numeric id reserved at allocateDeviceId time. */
11995
12016
  id: number$1(),
@@ -12215,11 +12236,25 @@ method(object({
12215
12236
  projection: _enum(["full", "slim"]).optional(),
12216
12237
  /** Return only camera devices. Filtering server-side instead of
12217
12238
  * shipping 293 rows to find 12. */
12218
- isCamera: boolean().optional()
12239
+ isCamera: boolean().optional(),
12240
+ /**
12241
+ * Return only these device ids. For the caller that already KNOWS the
12242
+ * handful it wants and needs a field the id-bearing answer does not
12243
+ * carry — the viewer's linked-devices panel joins `type` and `online`
12244
+ * onto ~8 linked ids and, unfiltered, dragged the fleet across to do
12245
+ * it: 433 KB slim / 958 KB full for 967 devices, on a query that
12246
+ * refetches on the reconcile interval, on a phone.
12247
+ *
12248
+ * Safe to send at a hub that predates it: Zod STRIPS unknown input
12249
+ * keys rather than rejecting them (verified against the live hub
12250
+ * 2026-08-25 — 967 rows came back), so an old hub answers exactly what
12251
+ * it answers today and the caller filters as it already does.
12252
+ */
12253
+ deviceIds: array(number$1()).optional()
12219
12254
  }), array(DeviceInfoSchema)), method(object({ deviceId: number$1() }), DeviceInfoSchema.nullable()), method(object({ parentDeviceId: number$1() }), array(DeviceInfoSchema)), method(object({ deviceId: number$1() }), object({
12220
12255
  mode: LinkedDevicesModeSchema,
12221
12256
  devices: array(LinkedDeviceSchema)
12222
- })), method(object({ deviceId: number$1() }), array(StreamSourceEntrySchema$1)), method(object({ deviceId: number$1() }), array(ConfigEntrySchema)), method(object({ deviceId: number$1() }), ConfigUISchemaOutput), method(object({
12257
+ })), method(object({ deviceIds: array(number$1()) }), array(LinkedDevicesForDeviceSchema)), method(object({ deviceId: number$1() }), array(StreamSourceEntrySchema$1)), method(object({ deviceId: number$1() }), array(ConfigEntrySchema)), method(object({ deviceId: number$1() }), ConfigUISchemaOutput), method(object({
12223
12258
  deviceId: number$1(),
12224
12259
  values: record(string(), unknown())
12225
12260
  }), object({ success: literal(true) }), {
@@ -12246,25 +12281,7 @@ method(object({
12246
12281
  }), method(object({ deviceId: number$1() }), array(StreamProbeResultSchema), {
12247
12282
  kind: "mutation",
12248
12283
  auth: "admin"
12249
- }), method(object({ deviceId: number$1() }), object({
12250
- deviceId: number$1(),
12251
- entries: array(object({
12252
- capName: string(),
12253
- kind: _enum(["native", "wrapped"]),
12254
- providerAddonId: string(),
12255
- providerNodeId: string(),
12256
- nativeAddonId: string()
12257
- }))
12258
- })), method(object({}), array(object({
12259
- deviceId: number$1(),
12260
- entries: array(object({
12261
- capName: string(),
12262
- kind: _enum(["native", "wrapped"]),
12263
- providerAddonId: string(),
12264
- providerNodeId: string(),
12265
- nativeAddonId: string()
12266
- }))
12267
- }))), method(object({
12284
+ }), method(object({ deviceId: number$1() }), DeviceBindingsForDeviceSchema), method(object({ deviceIds: array(number$1()) }), array(DeviceBindingsForDeviceSchema)), method(object({}), array(DeviceBindingsForDeviceSchema)), method(object({
12268
12285
  deviceId: number$1(),
12269
12286
  capName: string(),
12270
12287
  wrapperAddonId: string(),
@@ -27947,6 +27964,12 @@ Object.freeze({
27947
27964
  addonId: null,
27948
27965
  access: "view"
27949
27966
  },
27967
+ "deviceManager.getBindingsBatch": {
27968
+ capName: "device-manager",
27969
+ capScope: "system",
27970
+ addonId: null,
27971
+ access: "view"
27972
+ },
27950
27973
  "deviceManager.getChildren": {
27951
27974
  capName: "device-manager",
27952
27975
  capScope: "system",
@@ -28007,6 +28030,12 @@ Object.freeze({
28007
28030
  addonId: null,
28008
28031
  access: "view"
28009
28032
  },
28033
+ "deviceManager.getLinkedDevicesBatch": {
28034
+ capName: "device-manager",
28035
+ capScope: "system",
28036
+ addonId: null,
28037
+ access: "view"
28038
+ },
28010
28039
  "deviceManager.getRoleDisplayDefaults": {
28011
28040
  capName: "device-manager",
28012
28041
  capScope: "system",
@@ -32654,6 +32683,11 @@ Object.freeze({
32654
32683
  form: "single",
32655
32684
  optional: false
32656
32685
  }],
32686
+ "deviceManager.getBindingsBatch": [{
32687
+ name: "deviceIds",
32688
+ form: "array",
32689
+ optional: false
32690
+ }],
32657
32691
  "deviceManager.getChildren": [{
32658
32692
  name: "parentDeviceId",
32659
32693
  form: "single",
@@ -32699,6 +32733,11 @@ Object.freeze({
32699
32733
  form: "single",
32700
32734
  optional: false
32701
32735
  }],
32736
+ "deviceManager.getLinkedDevicesBatch": [{
32737
+ name: "deviceIds",
32738
+ form: "array",
32739
+ optional: false
32740
+ }],
32702
32741
  "deviceManager.getSettingsSchema": [{
32703
32742
  name: "deviceId",
32704
32743
  form: "single",
@@ -32719,6 +32758,11 @@ Object.freeze({
32719
32758
  form: "single",
32720
32759
  optional: false
32721
32760
  }],
32761
+ "deviceManager.listAll": [{
32762
+ name: "deviceIds",
32763
+ form: "array",
32764
+ optional: true
32765
+ }],
32722
32766
  "deviceManager.loadConfig": [{
32723
32767
  name: "deviceId",
32724
32768
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-ai",
3
- "version": "0.4.18",
3
+ "version": "0.4.20",
4
4
  "description": "AI addon for CamStack — the `llm` collection provider (cloud, LAN, and camstack-managed local llama.cpp profiles) plus the per-node `llm-runtime` managed executor.",
5
5
  "keywords": [
6
6
  "camstack",