@camstack/types 1.2.440 → 1.2.442

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 (38) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/addon.js +9 -3
  3. package/dist/addon.mjs +9 -3
  4. package/dist/capabilities/customize-catalog.d.ts +3 -0
  5. package/dist/capabilities/customize-spec.d.ts +20 -2
  6. package/dist/capabilities/index.d.ts +6 -2
  7. package/dist/capabilities/media-player.cap.d.ts +50 -0
  8. package/dist/capabilities/pet-feeder.cap.d.ts +9 -0
  9. package/dist/capabilities/remote.cap.d.ts +264 -0
  10. package/dist/capabilities/template.cap.d.ts +161 -0
  11. package/dist/client.js +14 -0
  12. package/dist/client.mjs +14 -0
  13. package/dist/{composition-DCmtFE-X.js → composition-C0dlyG9U.js} +17 -0
  14. package/dist/{composition-DpFv_J6D.mjs → composition-bIBW5_13.mjs} +12 -1
  15. package/dist/ffmpeg/invocation.d.ts +9 -0
  16. package/dist/generated/addon-api.d.ts +86 -0
  17. package/dist/generated/addon-cap-facts.d.ts +1 -1
  18. package/dist/generated/cap-input-defaults.d.ts +1 -1
  19. package/dist/generated/capability-router-map.d.ts +10 -4
  20. package/dist/generated/collection-array-methods.d.ts +1 -1
  21. package/dist/generated/customize-catalog.d.ts +18 -1
  22. package/dist/generated/method-access-map.d.ts +1 -1
  23. package/dist/generated/method-device-selectors.d.ts +2 -2
  24. package/dist/generated/system-proxy.d.ts +4 -0
  25. package/dist/index.d.ts +5 -0
  26. package/dist/index.js +863 -72
  27. package/dist/index.mjs +815 -73
  28. package/dist/interfaces/device-call-redirect.d.ts +42 -0
  29. package/dist/interfaces/kernel-abstractions.d.ts +12 -0
  30. package/dist/node.js +1 -1
  31. package/dist/node.mjs +1 -1
  32. package/dist/remote/remote-config.d.ts +116 -0
  33. package/dist/remote/remote-roles.d.ts +21 -0
  34. package/dist/remote/smartir-draft.d.ts +25 -0
  35. package/dist/{sleep-g6ZjBHBL.js → sleep-BpwNJ1Su.js} +19 -0
  36. package/dist/{sleep-BAvUCi_2.mjs → sleep-DJws6ho7.mjs} +19 -0
  37. package/dist/template/template-kinds.d.ts +26 -0
  38. package/package.json +1 -1
@@ -0,0 +1,161 @@
1
+ import { z } from 'zod';
2
+ import { type InferProvider } from './capability-definition.js';
3
+ /**
4
+ * template — the generic store of reusable, named operator data (D963). A
5
+ * record is `{ id, kind, name, payload }`; the kinds (today only `remote`, the
6
+ * button grid of a remote) and the schema each payload must satisfy are
7
+ * declared by the system in `template-kinds.ts`. Nothing here is specific to a
8
+ * kind: the engine validates a payload against its kind's schema and, on a
9
+ * delete, asks the kind's owner whether anything still points at the record.
10
+ *
11
+ * Every refusal is a typed result — a UI says "unknown kind" or names the
12
+ * devices that still use a template, without parsing text.
13
+ */
14
+ export declare const TemplateRecordSchema: z.ZodObject<{
15
+ id: z.ZodString;
16
+ kind: z.ZodEnum<{
17
+ remote: "remote";
18
+ }>;
19
+ name: z.ZodString;
20
+ payload: z.ZodUnknown;
21
+ createdAt: z.ZodNumber;
22
+ updatedAt: z.ZodNumber;
23
+ }, z.core.$strip>;
24
+ export type TemplateRecord = z.infer<typeof TemplateRecordSchema>;
25
+ export declare const TEMPLATE_WRITE_REFUSALS: readonly ['invalid-payload', 'not-found'];
26
+ export declare const TemplateWriteResultSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
27
+ status: z.ZodLiteral<"saved">;
28
+ template: z.ZodObject<{
29
+ id: z.ZodString;
30
+ kind: z.ZodEnum<{
31
+ remote: "remote";
32
+ }>;
33
+ name: z.ZodString;
34
+ payload: z.ZodUnknown;
35
+ createdAt: z.ZodNumber;
36
+ updatedAt: z.ZodNumber;
37
+ }, z.core.$strip>;
38
+ }, z.core.$strip>, z.ZodObject<{
39
+ status: z.ZodLiteral<"refused">;
40
+ reason: z.ZodEnum<{
41
+ "invalid-payload": "invalid-payload";
42
+ "not-found": "not-found";
43
+ }>;
44
+ detail: z.ZodString;
45
+ }, z.core.$strip>], "status">;
46
+ export type TemplateWriteResult = z.infer<typeof TemplateWriteResultSchema>;
47
+ /** A device still pointing at a template. */
48
+ export declare const TemplateUserSchema: z.ZodObject<{
49
+ deviceId: z.ZodNumber;
50
+ name: z.ZodString;
51
+ }, z.core.$strip>;
52
+ export type TemplateUser = z.infer<typeof TemplateUserSchema>;
53
+ export declare const TemplateDeleteResultSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
54
+ status: z.ZodLiteral<"deleted">;
55
+ }, z.core.$strip>, z.ZodObject<{
56
+ status: z.ZodLiteral<"not-found">;
57
+ }, z.core.$strip>, z.ZodObject<{
58
+ status: z.ZodLiteral<"in-use">;
59
+ devices: z.ZodArray<z.ZodObject<{
60
+ deviceId: z.ZodNumber;
61
+ name: z.ZodString;
62
+ }, z.core.$strip>>;
63
+ }, z.core.$strip>], "status">;
64
+ export type TemplateDeleteResult = z.infer<typeof TemplateDeleteResultSchema>;
65
+ export declare const templateCapability: {
66
+ readonly name: 'template';
67
+ readonly scope: 'system';
68
+ readonly mode: 'collection';
69
+ readonly methods: {
70
+ readonly list: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
71
+ kind: z.ZodOptional<z.ZodEnum<{
72
+ remote: "remote";
73
+ }>>;
74
+ }, z.core.$strip>, z.ZodArray<z.ZodObject<{
75
+ id: z.ZodString;
76
+ kind: z.ZodEnum<{
77
+ remote: "remote";
78
+ }>;
79
+ name: z.ZodString;
80
+ payload: z.ZodUnknown;
81
+ createdAt: z.ZodNumber;
82
+ updatedAt: z.ZodNumber;
83
+ }, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind>;
84
+ readonly get: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
85
+ id: z.ZodString;
86
+ }, z.core.$strip>, z.ZodNullable<z.ZodObject<{
87
+ id: z.ZodString;
88
+ kind: z.ZodEnum<{
89
+ remote: "remote";
90
+ }>;
91
+ name: z.ZodString;
92
+ payload: z.ZodUnknown;
93
+ createdAt: z.ZodNumber;
94
+ updatedAt: z.ZodNumber;
95
+ }, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind>;
96
+ readonly create: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
97
+ kind: z.ZodEnum<{
98
+ remote: "remote";
99
+ }>;
100
+ name: z.ZodString;
101
+ payload: z.ZodUnknown;
102
+ }, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
103
+ status: z.ZodLiteral<"saved">;
104
+ template: z.ZodObject<{
105
+ id: z.ZodString;
106
+ kind: z.ZodEnum<{
107
+ remote: "remote";
108
+ }>;
109
+ name: z.ZodString;
110
+ payload: z.ZodUnknown;
111
+ createdAt: z.ZodNumber;
112
+ updatedAt: z.ZodNumber;
113
+ }, z.core.$strip>;
114
+ }, z.core.$strip>, z.ZodObject<{
115
+ status: z.ZodLiteral<"refused">;
116
+ reason: z.ZodEnum<{
117
+ "invalid-payload": "invalid-payload";
118
+ "not-found": "not-found";
119
+ }>;
120
+ detail: z.ZodString;
121
+ }, z.core.$strip>], "status">, "mutation">;
122
+ readonly update: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
123
+ id: z.ZodString;
124
+ name: z.ZodOptional<z.ZodString>;
125
+ payload: z.ZodOptional<z.ZodUnknown>;
126
+ }, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
127
+ status: z.ZodLiteral<"saved">;
128
+ template: z.ZodObject<{
129
+ id: z.ZodString;
130
+ kind: z.ZodEnum<{
131
+ remote: "remote";
132
+ }>;
133
+ name: z.ZodString;
134
+ payload: z.ZodUnknown;
135
+ createdAt: z.ZodNumber;
136
+ updatedAt: z.ZodNumber;
137
+ }, z.core.$strip>;
138
+ }, z.core.$strip>, z.ZodObject<{
139
+ status: z.ZodLiteral<"refused">;
140
+ reason: z.ZodEnum<{
141
+ "invalid-payload": "invalid-payload";
142
+ "not-found": "not-found";
143
+ }>;
144
+ detail: z.ZodString;
145
+ }, z.core.$strip>], "status">, "mutation">;
146
+ readonly delete: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
147
+ id: z.ZodString;
148
+ }, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
149
+ status: z.ZodLiteral<"deleted">;
150
+ }, z.core.$strip>, z.ZodObject<{
151
+ status: z.ZodLiteral<"not-found">;
152
+ }, z.core.$strip>, z.ZodObject<{
153
+ status: z.ZodLiteral<"in-use">;
154
+ devices: z.ZodArray<z.ZodObject<{
155
+ deviceId: z.ZodNumber;
156
+ name: z.ZodString;
157
+ }, z.core.$strip>>;
158
+ }, z.core.$strip>], "status">, "mutation">;
159
+ };
160
+ };
161
+ export type ITemplateProvider = InferProvider<typeof templateCapability>;
package/dist/client.js CHANGED
@@ -28939,6 +28939,13 @@ function createSystemProxy(api) {
28939
28939
  getDownloadUrl: (input) => dispatch("recordingExport", "getDownloadUrl", "query", input),
28940
28940
  readExportBytes: (input) => dispatch("recordingExport", "readExportBytes", "query", input)
28941
28941
  },
28942
+ remote: {
28943
+ getConfig: (input) => dispatch("remote", "getConfig", "query", input),
28944
+ setConfig: (input) => dispatch("remote", "setConfig", "mutation", input),
28945
+ listCommands: (input) => dispatch("remote", "listCommands", "query", input),
28946
+ sendCommand: (input) => dispatch("remote", "sendCommand", "mutation", input),
28947
+ sendMediaCommand: (input) => dispatch("remote", "sendMediaCommand", "mutation", input)
28948
+ },
28942
28949
  serverManagement: {
28943
28950
  getServerPackageStatus: (input) => dispatch("serverManagement", "getServerPackageStatus", "query", input),
28944
28951
  checkServerUpdate: (input) => dispatch("serverManagement", "checkServerUpdate", "mutation", input),
@@ -29046,6 +29053,13 @@ function createSystemProxy(api) {
29046
29053
  getLoggingSettings: (input) => dispatch("system", "getLoggingSettings", "query", input),
29047
29054
  setLoggingSettings: (input) => dispatch("system", "setLoggingSettings", "mutation", input)
29048
29055
  },
29056
+ template: {
29057
+ list: (input) => dispatch("template", "list", "query", input),
29058
+ get: (input) => dispatch("template", "get", "query", input),
29059
+ create: (input) => dispatch("template", "create", "mutation", input),
29060
+ update: (input) => dispatch("template", "update", "mutation", input),
29061
+ delete: (input) => dispatch("template", "delete", "mutation", input)
29062
+ },
29049
29063
  terminalSession: {
29050
29064
  listProfiles: (input) => dispatch("terminalSession", "listProfiles", "query", input),
29051
29065
  listInstances: (input) => dispatch("terminalSession", "listInstances", "query", input),
package/dist/client.mjs CHANGED
@@ -28938,6 +28938,13 @@ function createSystemProxy(api) {
28938
28938
  getDownloadUrl: (input) => dispatch("recordingExport", "getDownloadUrl", "query", input),
28939
28939
  readExportBytes: (input) => dispatch("recordingExport", "readExportBytes", "query", input)
28940
28940
  },
28941
+ remote: {
28942
+ getConfig: (input) => dispatch("remote", "getConfig", "query", input),
28943
+ setConfig: (input) => dispatch("remote", "setConfig", "mutation", input),
28944
+ listCommands: (input) => dispatch("remote", "listCommands", "query", input),
28945
+ sendCommand: (input) => dispatch("remote", "sendCommand", "mutation", input),
28946
+ sendMediaCommand: (input) => dispatch("remote", "sendMediaCommand", "mutation", input)
28947
+ },
28941
28948
  serverManagement: {
28942
28949
  getServerPackageStatus: (input) => dispatch("serverManagement", "getServerPackageStatus", "query", input),
28943
28950
  checkServerUpdate: (input) => dispatch("serverManagement", "checkServerUpdate", "mutation", input),
@@ -29045,6 +29052,13 @@ function createSystemProxy(api) {
29045
29052
  getLoggingSettings: (input) => dispatch("system", "getLoggingSettings", "query", input),
29046
29053
  setLoggingSettings: (input) => dispatch("system", "setLoggingSettings", "mutation", input)
29047
29054
  },
29055
+ template: {
29056
+ list: (input) => dispatch("template", "list", "query", input),
29057
+ get: (input) => dispatch("template", "get", "query", input),
29058
+ create: (input) => dispatch("template", "create", "mutation", input),
29059
+ update: (input) => dispatch("template", "update", "mutation", input),
29060
+ delete: (input) => dispatch("template", "delete", "mutation", input)
29061
+ },
29048
29062
  terminalSession: {
29049
29063
  listProfiles: (input) => dispatch("terminalSession", "listProfiles", "query", input),
29050
29064
  listInstances: (input) => dispatch("terminalSession", "listInstances", "query", input),
@@ -459,6 +459,15 @@ function audioPlanFromEncodeProfile(audio) {
459
459
  * plane. Width / height / fps / bitrate in the profile are a downstream BUDGET,
460
460
  * not a forced rescale.
461
461
  */
462
+ /**
463
+ * Probe bound for an input that is one of OUR OWN RTSP restreams. Not zero: a
464
+ * zero-length probe makes ffmpeg trust the SDP completely, and a restream that
465
+ * announces a track it never sends would leave the mapping wrong unnoticed.
466
+ */
467
+ var RESTREAM_INPUT_PROBE = {
468
+ analyzeDurationUs: 2e5,
469
+ probeSizeBytes: 64 * 1024
470
+ };
462
471
  function invocationFromEncodeProfile(input) {
463
472
  const v = input.profile.video;
464
473
  const shouldCopy = v.codec === "copy" || input.forceReencode !== true && v.codec === input.sourceCodec;
@@ -496,6 +505,8 @@ function invocationFromEncodeProfile(input) {
496
505
  url: input.sourceUrl,
497
506
  rtspTransport: "tcp",
498
507
  fflags: ["+discardcorrupt"],
508
+ analyzeDurationUs: RESTREAM_INPUT_PROBE.analyzeDurationUs,
509
+ probeSizeBytes: RESTREAM_INPUT_PROBE.probeSizeBytes,
499
510
  ...input.profile.inputArgs?.length ? { extraArgs: input.profile.inputArgs } : {}
500
511
  },
501
512
  video,
@@ -3837,6 +3848,12 @@ Object.defineProperty(exports, "RESET_PERIODS", {
3837
3848
  return RESET_PERIODS;
3838
3849
  }
3839
3850
  });
3851
+ Object.defineProperty(exports, "RESTREAM_INPUT_PROBE", {
3852
+ enumerable: true,
3853
+ get: function() {
3854
+ return RESTREAM_INPUT_PROBE;
3855
+ }
3856
+ });
3840
3857
  Object.defineProperty(exports, "ROLLING_SPANS", {
3841
3858
  enumerable: true,
3842
3859
  get: function() {
@@ -459,6 +459,15 @@ function audioPlanFromEncodeProfile(audio) {
459
459
  * plane. Width / height / fps / bitrate in the profile are a downstream BUDGET,
460
460
  * not a forced rescale.
461
461
  */
462
+ /**
463
+ * Probe bound for an input that is one of OUR OWN RTSP restreams. Not zero: a
464
+ * zero-length probe makes ffmpeg trust the SDP completely, and a restream that
465
+ * announces a track it never sends would leave the mapping wrong unnoticed.
466
+ */
467
+ var RESTREAM_INPUT_PROBE = {
468
+ analyzeDurationUs: 2e5,
469
+ probeSizeBytes: 64 * 1024
470
+ };
462
471
  function invocationFromEncodeProfile(input) {
463
472
  const v = input.profile.video;
464
473
  const shouldCopy = v.codec === "copy" || input.forceReencode !== true && v.codec === input.sourceCodec;
@@ -496,6 +505,8 @@ function invocationFromEncodeProfile(input) {
496
505
  url: input.sourceUrl,
497
506
  rtspTransport: "tcp",
498
507
  fflags: ["+discardcorrupt"],
508
+ analyzeDurationUs: RESTREAM_INPUT_PROBE.analyzeDurationUs,
509
+ probeSizeBytes: RESTREAM_INPUT_PROBE.probeSizeBytes,
499
510
  ...input.profile.inputArgs?.length ? { extraArgs: input.profile.inputArgs } : {}
500
511
  },
501
512
  video,
@@ -3339,4 +3350,4 @@ function featureSources(feature) {
3339
3350
  return featureFieldEntries(feature).map((e) => e.source);
3340
3351
  }
3341
3352
  //#endregion
3342
- export { GroupTemplateIdSchema as $, validateExpressionSource as $t, composedDeviceStableId as A, sliceActiveValue as An, planResetTier as At, AGGREGATE_REDUCERS as B, AUDIO_PRESETS as Bn, wattMillisecondsToKwh as Bt, CompositionSeriesSourceSchema as C, SOURCE_CAPS as Cn, RollingWindowSchema as Ct, MAX_COMPOSITION_FIELDS_PER_FEATURE as D, evaluateSensorEdge as Dn, nextLocalMidnight as Dt, MAX_COMPOSITION_FEATURES as E, SOURCE_DEVICE_TYPES as En, maxDurationMs as Et, compositionSourceKey as F, FFMPEG_RELEASE as Fn, STATISTIC_STATS as Ft, ArithmeticHelperSpecSchema as G, buildVideoArgs as Gn, isApplianceKind as Gt, ActiveCriterionSchema as H, buildAudioArgs as Hn, APPLIANCE_KINDS as Ht, featureFieldEntries as I, getFfmpegArtifact as In, evaluateDerivative as It, DerivativeHelperSpecSchema as J, logBannerArgs as Jn, cloneStatefulExpressionMemory as Jt, BINARY_AGGREGATES as K, invocationFromEncodeProfile as Kn, sourcePickForAppliance as Kt, featureSources as L, getFfmpegDownloadUrl as Ln, evaluateStatistic as Lt, compositionItemFieldPath as M, FFMPEG_PATH_ENV as Mn, rollingDurationMs as Mt, compositionReadKey as N, chooseFfmpegBinary as Nn, statisticCadenceMs as Nt, MAX_COMPOSITION_ITEMS as O, evaluateSensorLevelEdge as On, openReset as Ot, compositionSliceKey as P, ffmpegBinaryName as Pn, SERIES_KINDS as Pt, GroupHelperSpecSchema as Q, toExpressionValue as Qt, fieldReads as R, canonicalHash as Rn, integrateReading as Rt, CompositionSchema as S, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as Sn, ROLLING_SPANS as St, MAX_COMPOSITION_CODE_LENGTH as T, SOURCE_CAP_CHANGED_AT_FIELD as Tn, integralCadenceMs as Tt, AggregateReducerSchema as U, buildFfmpegArgs as Un, APPLIANCE_TEMPLATE_ID as Ut, ARITHMETIC_OPS as V, audioPlanFromEncodeProfile as Vn, APPLIANCE_DEFAULTS as Vt, ApplianceHelperSpecSchema as W, buildInputArgs as Wn, applianceDeviceType as Wt, ExpressionHelperSpecSchema as X, resolveStreamMaps as Xn, evaluateExpressionSource as Xt, EXPRESSION_OUTPUTS as Y, pickVideoEncoder as Yn, createStatefulExpressionMemory as Yt, GROUP_TEMPLATE_IDS as Z, evaluateStatefulExpressionCall as Zt, CompositionFromSourceSchema as _, evaluateCount as _n, HISTORY_TIERS as _t, CUSTOMIZATION_BLOCK_NAME_PREFIX as a, tokenize as an, NUMERIC_AGGREGATES as at, CompositionNewTargetSchema as b, ExpressionEvalError as bn, MIN_CUSTOM_MINUTES as bt, CompositionCodeSourceSchema as c, MAX_EXPRESSION_AST_NODES as cn, helperMembers as ct, CompositionExpressionSourceSchema as d, MAX_EXPRESSION_EVAL_STEPS as dn, CALENDAR_PERIODS as dt, createExpressionScope as en, HelperMemberSchema as et, CompositionFeatureSchema as f, MAX_EXPRESSION_SOURCE_LENGTH as fn, CalendarWindowSchema as ft, CompositionForwardCommandSchema as g, disarmRoseMemory as gn, HISTORY_SLOW_MS as gt, CompositionFieldsFeatureSchema as h, EXPRESSION_BUILTIN_NAMES as hn, HISTORY_FAST_MS as ht, COMPOSITION_ITEM_KEY_RE as i, parseExpression as in, MAX_HELPER_MEMBERS as it, compositionFeatureEnabled as j, sliceChangedAt as jn, planStatisticTier as jt, composedDeviceRef as k, isSourceCap as kn, openStatistic as kt, CompositionCommandTargetSchema as l, MAX_EXPRESSION_BINDINGS as ln, isHistoryHelper as lt, CompositionFieldSourceSchema as m, EXPRESSION_BUILTINS as mn, DEFAULT_HISTORY_RETENTION as mt, COMPOSER_ADDON_ID as n, compileExpression as nn, INTEGRAL_OUTPUTS as nt, CompositionAggregateSourceSchema as o, EXPRESSION_COMPILE_CACHE_CAPACITY as on, StatisticHelperSpecSchema as ot, CompositionFieldReadSchema as p, RESERVED_BINDING_NAMES as pn, DAY_MS as pt, DERIVATIVE_UNITS as q, isSoftwareDecode as qn, EXPRESSION_INJECTED_NOW as qt, COMPOSITION_ITEM_ARRAY_PATH as r, compileExpressionSafe as rn, IntegralHelperSpecSchema as rt, CompositionBindingSchema as s, EXPRESSION_IDENTIFIER_RE as sn, ThresholdHelperSpecSchema as st, COMPOSED_DEVICE_STABLE_ID_PREFIX as t, evaluateAst as tn, HelperSpecSchema as tt, CompositionExistingTargetSchema as u, MAX_EXPRESSION_CALL_ARGS as un, CompositionSourceRefSchema as ut, CompositionItemEntrySchema as v, evaluateRose as vn, HOUR_MS as vt, CompositionTargetSchema as w, SOURCE_CAP_ACTIVE_FIELD as wn, StatisticWindowSchema as wt, CompositionPassthroughFeatureSchema as x, ExpressionParseError as xn, RESET_PERIODS as xt, CompositionLiteralBindingSchema as y, isStatefulBuiltin as yn, MINUTE_MS as yt, ACTIVE_CRITERIA as z, Fmp4BoxSplitter as zn, KWH_PER_WATT_MS as zt };
3353
+ export { GroupTemplateIdSchema as $, validateExpressionSource as $t, composedDeviceStableId as A, sliceActiveValue as An, planResetTier as At, AGGREGATE_REDUCERS as B, AUDIO_PRESETS as Bn, wattMillisecondsToKwh as Bt, CompositionSeriesSourceSchema as C, SOURCE_CAPS as Cn, RollingWindowSchema as Ct, MAX_COMPOSITION_FIELDS_PER_FEATURE as D, evaluateSensorEdge as Dn, nextLocalMidnight as Dt, MAX_COMPOSITION_FEATURES as E, SOURCE_DEVICE_TYPES as En, maxDurationMs as Et, compositionSourceKey as F, FFMPEG_RELEASE as Fn, STATISTIC_STATS as Ft, ArithmeticHelperSpecSchema as G, buildInputArgs as Gn, isApplianceKind as Gt, ActiveCriterionSchema as H, audioPlanFromEncodeProfile as Hn, APPLIANCE_KINDS as Ht, featureFieldEntries as I, getFfmpegArtifact as In, evaluateDerivative as It, DerivativeHelperSpecSchema as J, isSoftwareDecode as Jn, cloneStatefulExpressionMemory as Jt, BINARY_AGGREGATES as K, buildVideoArgs as Kn, sourcePickForAppliance as Kt, featureSources as L, getFfmpegDownloadUrl as Ln, evaluateStatistic as Lt, compositionItemFieldPath as M, FFMPEG_PATH_ENV as Mn, rollingDurationMs as Mt, compositionReadKey as N, chooseFfmpegBinary as Nn, statisticCadenceMs as Nt, MAX_COMPOSITION_ITEMS as O, evaluateSensorLevelEdge as On, openReset as Ot, compositionSliceKey as P, ffmpegBinaryName as Pn, SERIES_KINDS as Pt, GroupHelperSpecSchema as Q, toExpressionValue as Qt, fieldReads as R, canonicalHash as Rn, integrateReading as Rt, CompositionSchema as S, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as Sn, ROLLING_SPANS as St, MAX_COMPOSITION_CODE_LENGTH as T, SOURCE_CAP_CHANGED_AT_FIELD as Tn, integralCadenceMs as Tt, AggregateReducerSchema as U, buildAudioArgs as Un, APPLIANCE_TEMPLATE_ID as Ut, ARITHMETIC_OPS as V, RESTREAM_INPUT_PROBE as Vn, APPLIANCE_DEFAULTS as Vt, ApplianceHelperSpecSchema as W, buildFfmpegArgs as Wn, applianceDeviceType as Wt, ExpressionHelperSpecSchema as X, pickVideoEncoder as Xn, evaluateExpressionSource as Xt, EXPRESSION_OUTPUTS as Y, logBannerArgs as Yn, createStatefulExpressionMemory as Yt, GROUP_TEMPLATE_IDS as Z, resolveStreamMaps as Zn, evaluateStatefulExpressionCall as Zt, CompositionFromSourceSchema as _, evaluateCount as _n, HISTORY_TIERS as _t, CUSTOMIZATION_BLOCK_NAME_PREFIX as a, tokenize as an, NUMERIC_AGGREGATES as at, CompositionNewTargetSchema as b, ExpressionEvalError as bn, MIN_CUSTOM_MINUTES as bt, CompositionCodeSourceSchema as c, MAX_EXPRESSION_AST_NODES as cn, helperMembers as ct, CompositionExpressionSourceSchema as d, MAX_EXPRESSION_EVAL_STEPS as dn, CALENDAR_PERIODS as dt, createExpressionScope as en, HelperMemberSchema as et, CompositionFeatureSchema as f, MAX_EXPRESSION_SOURCE_LENGTH as fn, CalendarWindowSchema as ft, CompositionForwardCommandSchema as g, disarmRoseMemory as gn, HISTORY_SLOW_MS as gt, CompositionFieldsFeatureSchema as h, EXPRESSION_BUILTIN_NAMES as hn, HISTORY_FAST_MS as ht, COMPOSITION_ITEM_KEY_RE as i, parseExpression as in, MAX_HELPER_MEMBERS as it, compositionFeatureEnabled as j, sliceChangedAt as jn, planStatisticTier as jt, composedDeviceRef as k, isSourceCap as kn, openStatistic as kt, CompositionCommandTargetSchema as l, MAX_EXPRESSION_BINDINGS as ln, isHistoryHelper as lt, CompositionFieldSourceSchema as m, EXPRESSION_BUILTINS as mn, DEFAULT_HISTORY_RETENTION as mt, COMPOSER_ADDON_ID as n, compileExpression as nn, INTEGRAL_OUTPUTS as nt, CompositionAggregateSourceSchema as o, EXPRESSION_COMPILE_CACHE_CAPACITY as on, StatisticHelperSpecSchema as ot, CompositionFieldReadSchema as p, RESERVED_BINDING_NAMES as pn, DAY_MS as pt, DERIVATIVE_UNITS as q, invocationFromEncodeProfile as qn, EXPRESSION_INJECTED_NOW as qt, COMPOSITION_ITEM_ARRAY_PATH as r, compileExpressionSafe as rn, IntegralHelperSpecSchema as rt, CompositionBindingSchema as s, EXPRESSION_IDENTIFIER_RE as sn, ThresholdHelperSpecSchema as st, COMPOSED_DEVICE_STABLE_ID_PREFIX as t, evaluateAst as tn, HelperSpecSchema as tt, CompositionExistingTargetSchema as u, MAX_EXPRESSION_CALL_ARGS as un, CompositionSourceRefSchema as ut, CompositionItemEntrySchema as v, evaluateRose as vn, HOUR_MS as vt, CompositionTargetSchema as w, SOURCE_CAP_ACTIVE_FIELD as wn, StatisticWindowSchema as wt, CompositionPassthroughFeatureSchema as x, ExpressionParseError as xn, RESET_PERIODS as xt, CompositionLiteralBindingSchema as y, isStatefulBuiltin as yn, MINUTE_MS as yt, ACTIVE_CRITERIA as z, Fmp4BoxSplitter as zn, KWH_PER_WATT_MS as zt };
@@ -570,4 +570,13 @@ export interface EncodeProfileInvocationInput {
570
570
  * plane. Width / height / fps / bitrate in the profile are a downstream BUDGET,
571
571
  * not a forced rescale.
572
572
  */
573
+ /**
574
+ * Probe bound for an input that is one of OUR OWN RTSP restreams. Not zero: a
575
+ * zero-length probe makes ffmpeg trust the SDP completely, and a restream that
576
+ * announces a track it never sends would leave the mapping wrong unnoticed.
577
+ */
578
+ export declare const RESTREAM_INPUT_PROBE: {
579
+ readonly analyzeDurationUs: 200000;
580
+ readonly probeSizeBytes: number;
581
+ };
573
582
  export declare function invocationFromEncodeProfile(input: EncodeProfileInvocationInput): FfmpegInvocation;
@@ -117,6 +117,7 @@ import type { recordingOnboardCapability } from '../capabilities/recording-onboa
117
117
  import type { recordingSignalCapability } from '../capabilities/recording-signal.cap.js';
118
118
  import type { recordingCapability } from '../capabilities/recording.cap.js';
119
119
  import type { recordsCapability } from '../capabilities/records.cap.js';
120
+ import type { remoteCapability } from '../capabilities/remote.cap.js';
120
121
  import type { sceneMonitorCapability } from '../capabilities/scene-monitor.cap.js';
121
122
  import type { scriptRunnerCapability } from '../capabilities/script-runner.cap.js';
122
123
  import type { serverManagementCapability } from '../capabilities/server-management.cap.js';
@@ -136,6 +137,7 @@ import type { streamParamsCapability } from '../capabilities/stream-params.cap.j
136
137
  import type { streamSignalsCapability } from '../capabilities/stream-signals.cap.js';
137
138
  import type { switchCapability } from '../capabilities/switch.cap.js';
138
139
  import type { systemCapability } from '../capabilities/system.cap.js';
140
+ import type { templateCapability } from '../capabilities/template.cap.js';
139
141
  import type { terminalSessionCapability } from '../capabilities/terminal-session.cap.js';
140
142
  import type { toastCapability } from '../capabilities/toast.cap.js';
141
143
  import type { trainingProviderCapability } from '../capabilities/training-provider.cap.js';
@@ -8788,6 +8790,48 @@ export type AppRouter = TrpcCoreRouter<{
8788
8790
  meta: object;
8789
8791
  }>;
8790
8792
  }>>;
8793
+ remote: TRPCBuiltRouter<{
8794
+ ctx: TrpcContext;
8795
+ meta: object;
8796
+ errorShape: AugmentedErrorShape;
8797
+ transformer: true;
8798
+ }, TRPCDecorateCreateRouterOptions<{
8799
+ getConfig: TRPCQueryProcedure<{
8800
+ input: {
8801
+ [x: string]: unknown;
8802
+ } & z.input<typeof remoteCapability.methods.getConfig.input>;
8803
+ output: z.infer<typeof remoteCapability.methods.getConfig.output>;
8804
+ meta: object;
8805
+ }>;
8806
+ setConfig: TRPCMutationProcedure<{
8807
+ input: {
8808
+ [x: string]: unknown;
8809
+ } & z.input<typeof remoteCapability.methods.setConfig.input>;
8810
+ output: z.infer<typeof remoteCapability.methods.setConfig.output>;
8811
+ meta: object;
8812
+ }>;
8813
+ listCommands: TRPCQueryProcedure<{
8814
+ input: {
8815
+ [x: string]: unknown;
8816
+ } & z.input<typeof remoteCapability.methods.listCommands.input>;
8817
+ output: z.infer<typeof remoteCapability.methods.listCommands.output>;
8818
+ meta: object;
8819
+ }>;
8820
+ sendCommand: TRPCMutationProcedure<{
8821
+ input: {
8822
+ [x: string]: unknown;
8823
+ } & z.input<typeof remoteCapability.methods.sendCommand.input>;
8824
+ output: z.infer<typeof remoteCapability.methods.sendCommand.output>;
8825
+ meta: object;
8826
+ }>;
8827
+ sendMediaCommand: TRPCMutationProcedure<{
8828
+ input: {
8829
+ [x: string]: unknown;
8830
+ } & z.input<typeof remoteCapability.methods.sendMediaCommand.input>;
8831
+ output: z.infer<typeof remoteCapability.methods.sendMediaCommand.output>;
8832
+ meta: object;
8833
+ }>;
8834
+ }>>;
8791
8835
  runningState: TRPCBuiltRouter<{
8792
8836
  ctx: TrpcContext;
8793
8837
  meta: object;
@@ -10138,6 +10182,48 @@ export type AppRouter = TrpcCoreRouter<{
10138
10182
  meta: object;
10139
10183
  }>;
10140
10184
  }>>;
10185
+ template: TRPCBuiltRouter<{
10186
+ ctx: TrpcContext;
10187
+ meta: object;
10188
+ errorShape: AugmentedErrorShape;
10189
+ transformer: true;
10190
+ }, TRPCDecorateCreateRouterOptions<{
10191
+ list: TRPCQueryProcedure<{
10192
+ input: {
10193
+ [x: string]: unknown;
10194
+ } & z.input<typeof templateCapability.methods.list.input>;
10195
+ output: z.infer<typeof templateCapability.methods.list.output>;
10196
+ meta: object;
10197
+ }>;
10198
+ get: TRPCQueryProcedure<{
10199
+ input: {
10200
+ [x: string]: unknown;
10201
+ } & z.input<typeof templateCapability.methods.get.input>;
10202
+ output: z.infer<typeof templateCapability.methods.get.output>;
10203
+ meta: object;
10204
+ }>;
10205
+ create: TRPCMutationProcedure<{
10206
+ input: {
10207
+ [x: string]: unknown;
10208
+ } & z.input<typeof templateCapability.methods.create.input>;
10209
+ output: z.infer<typeof templateCapability.methods.create.output>;
10210
+ meta: object;
10211
+ }>;
10212
+ update: TRPCMutationProcedure<{
10213
+ input: {
10214
+ [x: string]: unknown;
10215
+ } & z.input<typeof templateCapability.methods.update.input>;
10216
+ output: z.infer<typeof templateCapability.methods.update.output>;
10217
+ meta: object;
10218
+ }>;
10219
+ delete: TRPCMutationProcedure<{
10220
+ input: {
10221
+ [x: string]: unknown;
10222
+ } & z.input<typeof templateCapability.methods.delete.input>;
10223
+ output: z.infer<typeof templateCapability.methods.delete.output>;
10224
+ meta: object;
10225
+ }>;
10226
+ }>>;
10141
10227
  terminalSession: TRPCBuiltRouter<{
10142
10228
  ctx: TrpcContext;
10143
10229
  meta: object;
@@ -5,7 +5,7 @@
5
5
  * `ALL_CAPABILITY_DEFINITIONS` (the whole Zod schema graph, ~+100 MB heap per
6
6
  * runner). See docs/decisions/adr-0028.md.
7
7
  *
8
- * Coverage: 1 advance-derived caps, 77 caps with 356 state leaves.
8
+ * Coverage: 1 advance-derived caps, 77 caps with 360 state leaves.
9
9
  */
10
10
  /** A bindable scalar in a capability's runtime state. */
11
11
  export interface CapStateLeaf {
@@ -11,7 +11,7 @@
11
11
  * Plain data, zero Zod: a forked runner must not import the schema barrel
12
12
  * (~144MB RSS per runner — D28).
13
13
  *
14
- * Coverage: 29 caps, 72 methods with defaults.
14
+ * Coverage: 30 caps, 75 methods with defaults.
15
15
  */
16
16
  export declare const CAP_INPUT_DEFAULTS: Readonly<Record<string, Readonly<Record<string, Readonly<Record<string, unknown>>>>>>;
17
17
  /**
@@ -143,6 +143,7 @@ export { recordingExportCapability } from '../capabilities/recording-export.cap.
143
143
  export { recordingOnboardCapability } from '../capabilities/recording-onboard.cap.js';
144
144
  export { recordingSignalCapability } from '../capabilities/recording-signal.cap.js';
145
145
  export { recordsCapability } from '../capabilities/records.cap.js';
146
+ export { remoteCapability } from '../capabilities/remote.cap.js';
146
147
  export { runningStateCapability } from '../capabilities/running-state.cap.js';
147
148
  export { sceneMonitorCapability } from '../capabilities/scene-monitor.cap.js';
148
149
  export { scriptRunnerCapability } from '../capabilities/script-runner.cap.js';
@@ -166,6 +167,7 @@ export { switchCapability } from '../capabilities/switch.cap.js';
166
167
  export { systemCapability } from '../capabilities/system.cap.js';
167
168
  export { tamperCapability } from '../capabilities/tamper.cap.js';
168
169
  export { temperatureSensorCapability } from '../capabilities/temperature-sensor.cap.js';
170
+ export { templateCapability } from '../capabilities/template.cap.js';
169
171
  export { terminalSessionCapability } from '../capabilities/terminal-session.cap.js';
170
172
  export { toastCapability } from '../capabilities/toast.cap.js';
171
173
  export { trainingCapability } from '../capabilities/training.cap.js';
@@ -332,6 +334,7 @@ export declare const CAPABILITY_NAMES: {
332
334
  readonly recordingOnboard: 'recording-onboard';
333
335
  readonly recordingSignal: 'recording-signal';
334
336
  readonly records: 'records';
337
+ readonly remote: 'remote';
335
338
  readonly runningState: 'running-state';
336
339
  readonly sceneMonitor: 'scene-monitor';
337
340
  readonly scriptRunner: 'script-runner';
@@ -355,6 +358,7 @@ export declare const CAPABILITY_NAMES: {
355
358
  readonly system: 'system';
356
359
  readonly tamper: 'tamper';
357
360
  readonly temperatureSensor: 'temperature-sensor';
361
+ readonly template: 'template';
358
362
  readonly terminalSession: 'terminal-session';
359
363
  readonly toast: 'toast';
360
364
  readonly training: 'training';
@@ -534,6 +538,7 @@ export interface CapabilityRouterMap<TRouter = unknown> {
534
538
  readonly recordingOnboard: TRouter;
535
539
  readonly recordingSignal: TRouter;
536
540
  readonly records: TRouter;
541
+ readonly remote: TRouter;
537
542
  readonly runningState: TRouter;
538
543
  readonly sceneMonitor: TRouter;
539
544
  readonly scriptRunner: TRouter;
@@ -557,6 +562,7 @@ export interface CapabilityRouterMap<TRouter = unknown> {
557
562
  readonly system: TRouter;
558
563
  readonly tamper: TRouter;
559
564
  readonly temperatureSensor: TRouter;
565
+ readonly template: TRouter;
560
566
  readonly terminalSession: TRouter;
561
567
  readonly toast: TRouter;
562
568
  readonly training: TRouter;
@@ -578,12 +584,12 @@ export interface CapabilityRouterMap<TRouter = unknown> {
578
584
  readonly zoneRules: TRouter;
579
585
  readonly zones: TRouter;
580
586
  }
581
- /** Capability names whose mode is `singleton` (152 caps). */
582
- export declare const SINGLETON_CAPABILITY_NAMES: readonly ['accessories', 'actions', 'addon-pages', 'addon-settings', 'addon-widgets', 'addons', 'admin-ui', 'air-quality-sensor', 'alarm-panel', 'alerts', 'ambient-light-sensor', 'audio-analysis', 'audio-analyzer', 'audio-codec', 'audio-metrics', 'automation-control', 'backup', 'battery', 'binary', 'brightness', 'button', 'calendars', 'camera-credentials', 'camera-grid-layout', 'camera-pipeline-config', 'camera-streams', 'carbon-monoxide', 'climate-control', 'color', 'composer', 'connectivity', 'consumables', 'contact', 'control', 'core-blocks', 'cover', 'database-snapshot', 'day-night', 'decoder', 'detection-pipeline', 'device-admin-link', 'device-credentials', 'device-discovery', 'device-history', 'device-manager', 'device-ops', 'device-state', 'device-status', 'dishwasher', 'display-palette', 'doorbell', 'enum-sensor', 'event-emitter', 'face-gallery', 'fan-control', 'feature-probe', 'filesystem-browse', 'flood', 'gas', 'group-active', 'group-commands', 'group-status', 'heating-valve', 'humidifier', 'humidity-sensor', 'image', 'image-settings', 'integrations', 'intercom', 'ir-transmitter', 'keychain', 'keychain-admin', 'lawn-mower-control', 'llm-runtime', 'local-network', 'lock-control', 'media-player', 'meter', 'metrics-provider', 'model-convert', 'model-distributor', 'motion', 'motion-detection', 'motion-trigger', 'motion-zones', 'native-object-detection', 'navigation', 'network-link', 'network-quality', 'node-certificates', 'nodes', 'notification-rules', 'notifier', 'numeric-sensor', 'oidc-connections', 'osd', 'osd-manager', 'pet-feeder', 'pipeline-analytics', 'pipeline-executor', 'pipeline-orchestrator', 'pipeline-runner', 'plate-gallery', 'platform-probe', 'power-meter', 'presence', 'pressure-sensor', 'privacy-mask', 'ptz', 'ptz-autotrack', 'reboot', 'record-entries', 'recording-archive', 'recording-export', 'recording-onboard', 'recording-signal', 'records', 'running-state', 'scene-monitor', 'script-runner', 'server-management', 'settings-store', 'smoke', 'snapshot', 'sso-bridge', 'storage', 'storage-admin', 'storage-migration', 'stream-broker', 'stream-catalog', 'stream-params', 'stream-signals', 'switch', 'system', 'tamper', 'temperature-sensor', 'terminal-session', 'toast', 'training', 'update', 'user-management', 'vacuum-control', 'valve', 'vector-store', 'vibration', 'viewer-ui', 'water-heater', 'weather', 'webrtc-session', 'zone-analytics', 'zone-rules', 'zones'];
587
+ /** Capability names whose mode is `singleton` (153 caps). */
588
+ export declare const SINGLETON_CAPABILITY_NAMES: readonly ['accessories', 'actions', 'addon-pages', 'addon-settings', 'addon-widgets', 'addons', 'admin-ui', 'air-quality-sensor', 'alarm-panel', 'alerts', 'ambient-light-sensor', 'audio-analysis', 'audio-analyzer', 'audio-codec', 'audio-metrics', 'automation-control', 'backup', 'battery', 'binary', 'brightness', 'button', 'calendars', 'camera-credentials', 'camera-grid-layout', 'camera-pipeline-config', 'camera-streams', 'carbon-monoxide', 'climate-control', 'color', 'composer', 'connectivity', 'consumables', 'contact', 'control', 'core-blocks', 'cover', 'database-snapshot', 'day-night', 'decoder', 'detection-pipeline', 'device-admin-link', 'device-credentials', 'device-discovery', 'device-history', 'device-manager', 'device-ops', 'device-state', 'device-status', 'dishwasher', 'display-palette', 'doorbell', 'enum-sensor', 'event-emitter', 'face-gallery', 'fan-control', 'feature-probe', 'filesystem-browse', 'flood', 'gas', 'group-active', 'group-commands', 'group-status', 'heating-valve', 'humidifier', 'humidity-sensor', 'image', 'image-settings', 'integrations', 'intercom', 'ir-transmitter', 'keychain', 'keychain-admin', 'lawn-mower-control', 'llm-runtime', 'local-network', 'lock-control', 'media-player', 'meter', 'metrics-provider', 'model-convert', 'model-distributor', 'motion', 'motion-detection', 'motion-trigger', 'motion-zones', 'native-object-detection', 'navigation', 'network-link', 'network-quality', 'node-certificates', 'nodes', 'notification-rules', 'notifier', 'numeric-sensor', 'oidc-connections', 'osd', 'osd-manager', 'pet-feeder', 'pipeline-analytics', 'pipeline-executor', 'pipeline-orchestrator', 'pipeline-runner', 'plate-gallery', 'platform-probe', 'power-meter', 'presence', 'pressure-sensor', 'privacy-mask', 'ptz', 'ptz-autotrack', 'reboot', 'record-entries', 'recording-archive', 'recording-export', 'recording-onboard', 'recording-signal', 'records', 'remote', 'running-state', 'scene-monitor', 'script-runner', 'server-management', 'settings-store', 'smoke', 'snapshot', 'sso-bridge', 'storage', 'storage-admin', 'storage-migration', 'stream-broker', 'stream-catalog', 'stream-params', 'stream-signals', 'switch', 'system', 'tamper', 'temperature-sensor', 'terminal-session', 'toast', 'training', 'update', 'user-management', 'vacuum-control', 'valve', 'vector-store', 'vibration', 'viewer-ui', 'water-heater', 'weather', 'webrtc-session', 'zone-analytics', 'zone-rules', 'zones'];
583
589
  /** Union of singleton capability names (literal string union). */
584
590
  export type SingletonCapabilityName = typeof SINGLETON_CAPABILITY_NAMES[number];
585
- /** Capability names whose mode is `collection` (36 caps). */
586
- export declare const COLLECTION_CAPABILITY_NAMES: readonly ['action-source', 'addon-pages-source', 'addon-routes', 'addon-widgets-source', 'auth-provider', 'broker', 'calendar-source', 'connection-test', 'custom-model-registry', 'data-store-provider', 'device-adoption', 'device-export', 'device-extension', 'device-provider', 'device-removal-hook', 'embedding-encoder', 'failure-contribution', 'llm', 'load-contribution', 'log-channels', 'log-destination', 'login-method', 'mesh-network', 'mqtt-broker', 'network-access', 'notification-output', 'oauth-integration', 'recording', 'smtp-provider', 'storage-evictable', 'storage-occupancy', 'storage-provider', 'training-provider', 'turn-provider', 'user-passkeys', 'videoclips'];
591
+ /** Capability names whose mode is `collection` (37 caps). */
592
+ export declare const COLLECTION_CAPABILITY_NAMES: readonly ['action-source', 'addon-pages-source', 'addon-routes', 'addon-widgets-source', 'auth-provider', 'broker', 'calendar-source', 'connection-test', 'custom-model-registry', 'data-store-provider', 'device-adoption', 'device-export', 'device-extension', 'device-provider', 'device-removal-hook', 'embedding-encoder', 'failure-contribution', 'llm', 'load-contribution', 'log-channels', 'log-destination', 'login-method', 'mesh-network', 'mqtt-broker', 'network-access', 'notification-output', 'oauth-integration', 'recording', 'smtp-provider', 'storage-evictable', 'storage-occupancy', 'storage-provider', 'template', 'training-provider', 'turn-provider', 'user-passkeys', 'videoclips'];
587
593
  /** Union of collection capability names (literal string union). */
588
594
  export type CollectionCapabilityName = typeof COLLECTION_CAPABILITY_NAMES[number];
589
595
  /** Capability mode lookup at runtime — mirrors the `.cap.ts` definitions. */
@@ -8,7 +8,7 @@
8
8
  * barrel (`ALL_CAPABILITY_DEFINITIONS`), which would cost ~144MB RSS per
9
9
  * forked runner. See docs/decisions/adr-0028.md.
10
10
  *
11
- * Coverage: 27 collection caps, 45 array methods.
11
+ * Coverage: 28 collection caps, 46 array methods.
12
12
  */
13
13
  export declare const COLLECTION_ARRAY_METHODS: Readonly<Record<string, readonly string[]>>;
14
14
  /**
@@ -1,7 +1,7 @@
1
1
  import { DeviceType } from '../device/device-type.js';
2
2
  /**
3
3
  * Customize catalog, projected from every `*.cap.ts` `customize` block.
4
- * 6 caps. Field keys are `runtimeState` paths. No Zod.
4
+ * 7 caps. Field keys are `runtimeState` paths. No Zod.
5
5
  */
6
6
  export declare const CAP_CUSTOMIZE_CATALOG: {
7
7
  readonly battery: {
@@ -318,6 +318,23 @@ export declare const CAP_CUSTOMIZE_CATALOG: {
318
318
  }];
319
319
  }];
320
320
  };
321
+ readonly remote: {
322
+ readonly version: 1;
323
+ readonly targets: readonly [{
324
+ readonly id: 'remote';
325
+ readonly cardinality: 'config';
326
+ readonly deviceTypes: readonly [DeviceType.MediaPlayer];
327
+ readonly apply: 'add';
328
+ readonly readMethod: 'getConfig';
329
+ readonly writeMethod: 'setConfig';
330
+ readonly vocabularyCap: 'remote';
331
+ readonly sources: readonly [];
332
+ readonly sourceReport: {
333
+ readonly status: 'assignment-status';
334
+ };
335
+ readonly advancedExpression: false;
336
+ }];
337
+ };
321
338
  readonly 'running-state': {
322
339
  readonly version: 1;
323
340
  readonly targets: readonly [{
@@ -6,7 +6,7 @@
6
6
  * scope+access check inside `protectedProcedure` (see
7
7
  * `server/backend/src/api/trpc/trpc.middleware.ts`).
8
8
  *
9
- * Coverage: 1406 method paths across 188 capabilities.
9
+ * Coverage: 1416 method paths across 190 capabilities.
10
10
  */
11
11
  import type { MethodRole } from '../auth/viewer-access.js';
12
12
  import type { CapabilityMethodAccess } from '../capabilities/capability-definition.js';
@@ -6,8 +6,8 @@
6
6
  * system-scope cap that takes a deviceId was previously never device-filtered
7
7
  * — see the generator header).
8
8
  *
9
- * Coverage: 557 methods carry a device reference, of which
10
- * 179 are on SYSTEM-scope caps.
9
+ * Coverage: 562 methods carry a device reference, of which
10
+ * 184 are on SYSTEM-scope caps.
11
11
  *
12
12
  * Top-level fields, number arrays, and one-level arrays of objects carrying
13
13
  * a numeric device field (targets[].deviceId) are all mapped; the matcher
@@ -45,12 +45,14 @@ import type { plateGalleryCapability } from '../capabilities/plate-gallery.cap.j
45
45
  import type { recordEntriesCapability } from '../capabilities/record-entries.cap.js';
46
46
  import type { recordingArchiveCapability } from '../capabilities/recording-archive.cap.js';
47
47
  import type { recordingExportCapability } from '../capabilities/recording-export.cap.js';
48
+ import type { remoteCapability } from '../capabilities/remote.cap.js';
48
49
  import type { serverManagementCapability } from '../capabilities/server-management.cap.js';
49
50
  import type { settingsStoreCapability } from '../capabilities/settings-store.cap.js';
50
51
  import type { storageCapability } from '../capabilities/storage.cap.js';
51
52
  import type { storageMigrationCapability } from '../capabilities/storage-migration.cap.js';
52
53
  import type { streamBrokerCapability } from '../capabilities/stream-broker.cap.js';
53
54
  import type { systemCapability } from '../capabilities/system.cap.js';
55
+ import type { templateCapability } from '../capabilities/template.cap.js';
54
56
  import type { terminalSessionCapability } from '../capabilities/terminal-session.cap.js';
55
57
  import type { toastCapability } from '../capabilities/toast.cap.js';
56
58
  import type { trainingCapability } from '../capabilities/training.cap.js';
@@ -110,12 +112,14 @@ export interface SystemProxy {
110
112
  readonly recordEntries: Pick<InferProvider<typeof recordEntriesCapability>, 'listEntryKinds' | 'listEntries' | 'putEntry' | 'deleteEntry'>;
111
113
  readonly recordingArchive: Pick<InferProvider<typeof recordingArchiveCapability>, 'getAvailabilityBatch' | 'getDaysWithRecordingsBatch' | 'getStorageUsage' | 'listOpsLog' | 'pauseForStorageMigration' | 'resumeForStorageMigration' | 'refreshStorageLocationsForMigration' | 'startStorageMigrationMove' | 'getStorageMigrationMoveStatus' | 'cancelStorageMigrationMove' | 'relocateFootage' | 'listRelocateJobs' | 'getRelocateResidue' | 'reconcileLedgerAgainstDisk' | 'cancelRelocateJob' | 'planStorageRebalance' | 'startStorageRebalance' | 'getPlacement' | 'setDevicePlacement'>;
112
114
  readonly recordingExport: Pick<InferProvider<typeof recordingExportCapability>, 'createExport' | 'getExport' | 'cancelExport' | 'deleteExport' | 'getDownloadUrl' | 'readExportBytes'>;
115
+ readonly remote: Pick<InferProvider<typeof remoteCapability>, 'getConfig' | 'setConfig' | 'listCommands' | 'sendCommand' | 'sendMediaCommand'>;
113
116
  readonly serverManagement: Pick<InferProvider<typeof serverManagementCapability>, 'getServerPackageStatus' | 'checkServerUpdate' | 'applyServerUpdate' | 'rollbackServerUpdate' | 'restartServer'>;
114
117
  readonly settingsStore: Pick<InferProvider<typeof settingsStoreCapability>, 'get' | 'set' | 'query' | 'upsert' | 'upsertMany' | 'insert' | 'insertMany' | 'transact' | 'update' | 'delete' | 'deleteWhere' | 'updateWhere' | 'count' | 'aggregate' | 'histogram' | 'isEmpty' | 'declareCollection'>;
115
118
  readonly storage: Pick<InferProvider<typeof storageCapability>, 'resolve' | 'write' | 'read' | 'exists' | 'list' | 'delete' | 'getAvailableSpace' | 'beginUpload' | 'writeChunk' | 'finalizeUpload' | 'abortUpload' | 'beginDownload' | 'readChunk' | 'endDownload' | 'listLocations' | 'listLocationDeclarations' | 'upsertLocation' | 'deleteLocation' | 'listDrainProgress' | 'testLocation' | 'listProviders' | 'testConfig'>;
116
119
  readonly storageMigration: Pick<InferProvider<typeof storageMigrationCapability>, 'plan' | 'start' | 'status' | 'cancel' | 'movers' | 'moverClearance' | 'residue' | 'drain' | 'cleanupStart' | 'cleanupStatus' | 'cleanupCancel' | 'history'>;
117
120
  readonly streamBroker: Pick<InferProvider<typeof streamBrokerCapability>, 'fetchEventMedia' | 'listAllCameraStreams' | 'listAllProfileSlots' | 'getBrokerStats' | 'probeStream' | 'listClients' | 'getLiveViewerCounts' | 'killClient' | 'getStreamUrl' | 'getStreamWithCodec' | 'releaseStreamWithCodec' | 'acquireEgressTranscode' | 'releaseEgressTranscode' | 'subscribeAudioChunks' | 'pullAudioChunks' | 'unsubscribeAudioChunks' | 'setPreBufferDuration' | 'getPreBufferInfo' | 'getRtspPort' | 'getAllRtspEntries' | 'getRtspEntry' | 'regenerateRtspToken' | 'setRtspEnabled' | 'isRtspEnabled'>;
118
121
  readonly system: Pick<InferProvider<typeof systemCapability>, 'info' | 'health' | 'featureFlags' | 'networkAddresses' | 'getRetentionConfig' | 'setRetentionConfig' | 'forceRetentionCleanup' | 'getSiteLocation' | 'setSiteLocation' | 'detectSiteLocation' | 'getRequestCensus' | 'getLoadContributions' | 'getFailureContributions' | 'getLoggingSettings' | 'setLoggingSettings'>;
122
+ readonly template: Pick<InferProvider<typeof templateCapability>, 'list' | 'get' | 'create' | 'update' | 'delete'>;
119
123
  readonly terminalSession: Pick<InferProvider<typeof terminalSessionCapability>, 'listProfiles' | 'listInstances' | 'createInstance' | 'updateInstance' | 'deleteInstance' | 'setInstanceEnabled' | 'listLegacyCameras' | 'adoptLegacyMonitor' | 'listSessions' | 'openSession' | 'resize' | 'pullOutput' | 'writeInput' | 'close'>;
120
124
  readonly toast: Pick<InferProvider<typeof toastCapability>, 'onToast'>;
121
125
  readonly training: Pick<InferProvider<typeof trainingCapability>, 'listBaseModels' | 'planJob' | 'startJob' | 'startJobBatch' | 'listJobs' | 'getJob' | 'cancelJob' | 'getJobResult' | 'listCanaryTargets' | 'registerResult' | 'canaryResult' | 'rollbackCanary' | 'discardResult'>;